A loop may be unswitched multiple times. Reconstruct dom info. at the end.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55806 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/LoopUnswitch.cpp b/lib/Transforms/Scalar/LoopUnswitch.cpp
index 691a67a..1c4bba2 100644
--- a/lib/Transforms/Scalar/LoopUnswitch.cpp
+++ b/lib/Transforms/Scalar/LoopUnswitch.cpp
@@ -190,6 +190,7 @@
DF = getAnalysisToUpdate<DominanceFrontier>();
DT = getAnalysisToUpdate<DominatorTree>();
currentLoop = L;
+ Function *F = currentLoop->getHeader()->getParent();
bool Changed = false;
do {
assert(currentLoop->isLCSSAForm());
@@ -197,6 +198,13 @@
Changed |= processCurrentLoop();
} while(redoLoop);
+ if (Changed) {
+ // FIXME: Reconstruct dom info, because it is not preserved properly.
+ if (DT)
+ DT->runOnFunction(*F);
+ if (DF)
+ DF->runOnFunction(*F);
+ }
return Changed;
}
@@ -450,11 +458,6 @@
UnswitchNontrivialCondition(LoopCond, Val, currentLoop);
}
- // FIXME: Reconstruct dom info, because it is not preserved properly.
- if (DT)
- DT->runOnFunction(*F);
- if (DF)
- DF->runOnFunction(*F);
return true;
}