diff options
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp index c6d037359f0..49de71e5119 100644 --- a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp +++ b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp @@ -37,7 +37,8 @@ using namespace llvm; #define DEBUG_TYPE "loop-simplifycfg" -static bool simplifyLoopCFG(Loop &L, DominatorTree &DT, LoopInfo &LI) { +static bool simplifyLoopCFG(Loop &L, DominatorTree &DT, LoopInfo &LI, + ScalarEvolution &SE) { bool Changed = false; // Copy blocks into a temporary array to avoid iterator invalidation issues // as we remove them. @@ -59,6 +60,8 @@ static bool simplifyLoopCFG(Loop &L, DominatorTree &DT, LoopInfo &LI) { L.moveToHeader(Succ); LI.removeBlock(Pred); MergeBasicBlockIntoOnlyPred(Succ, &DT); + + SE.forgetLoop(&L); Changed = true; } @@ -68,7 +71,7 @@ static bool simplifyLoopCFG(Loop &L, DominatorTree &DT, LoopInfo &LI) { PreservedAnalyses LoopSimplifyCFGPass::run(Loop &L, LoopAnalysisManager &AM, LoopStandardAnalysisResults &AR, LPMUpdater &) { - if (!simplifyLoopCFG(L, AR.DT, AR.LI)) + if (!simplifyLoopCFG(L, AR.DT, AR.LI, AR.SE)) return PreservedAnalyses::all(); return getLoopPassPreservedAnalyses(); @@ -88,7 +91,8 @@ public: DominatorTree &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree(); LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo(); - return simplifyLoopCFG(*L, DT, LI); + ScalarEvolution &SE = getAnalysis<ScalarEvolutionWrapperPass>().getSE(); + return simplifyLoopCFG(*L, DT, LI, SE); } void getAnalysisUsage(AnalysisUsage &AU) const override { |