diff options
author | David Green <david.green@arm.com> | 2018-06-19 09:43:36 +0000 |
---|---|---|
committer | David Green <david.green@arm.com> | 2018-06-19 09:43:36 +0000 |
commit | e6a9c2487849095a8b6c87ebe1dcbcd0299bd52e (patch) | |
tree | c87fa61f02eaffe09fea3c932c9f0eefbd20aebb /llvm/lib/Transforms | |
parent | 53425f297b1f87b8c77f39cf644689161c6cc273 (diff) | |
download | bcm5719-llvm-e6a9c2487849095a8b6c87ebe1dcbcd0299bd52e.tar.gz bcm5719-llvm-e6a9c2487849095a8b6c87ebe1dcbcd0299bd52e.zip |
[LoopSimplifyCFG] Invalidate SCEV in LoopSimplifyCFG
LoopSimplifyCFG, being a loop pass, needs to preserve scalar
evolution. This invalidates SE for the loops altered during
block merging.
Differential Revision: https://reviews.llvm.org/D48258
llvm-svn: 335036
Diffstat (limited to 'llvm/lib/Transforms')
-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 { |