From 67c6c6aed80bf7c69ca321f1ae5517b66ca1d294 Mon Sep 17 00:00:00 2001 From: Max Kazantsev Date: Sat, 29 Dec 2018 04:26:22 +0000 Subject: [PATCH] Drop SE cache early because loop parent can change in LoopSimplifyCFG git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350145 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/LoopSimplifyCFG.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/Transforms/Scalar/LoopSimplifyCFG.cpp b/lib/Transforms/Scalar/LoopSimplifyCFG.cpp index 4517b9b8f06..c8461655770 100644 --- a/lib/Transforms/Scalar/LoopSimplifyCFG.cpp +++ b/lib/Transforms/Scalar/LoopSimplifyCFG.cpp @@ -87,6 +87,7 @@ private: Loop &L; LoopInfo &LI; DominatorTree &DT; + ScalarEvolution &SE; MemorySSAUpdater *MSSAU; // Whether or not the current loop has irreducible CFG. @@ -459,8 +460,9 @@ private: public: ConstantTerminatorFoldingImpl(Loop &L, LoopInfo &LI, DominatorTree &DT, + ScalarEvolution &SE, MemorySSAUpdater *MSSAU) - : L(L), LI(LI), DT(DT), MSSAU(MSSAU) {} + : L(L), LI(LI), DT(DT), SE(SE), MSSAU(MSSAU) {} bool run() { assert(L.getLoopLatch() && "Should be single latch!"); @@ -507,6 +509,7 @@ public: return false; } + SE.forgetTopmostLoop(&L); // Dump analysis results. LLVM_DEBUG(dump()); @@ -539,6 +542,7 @@ public: /// Turn branches and switches with known constant conditions into unconditional /// branches. static bool constantFoldTerminators(Loop &L, DominatorTree &DT, LoopInfo &LI, + ScalarEvolution &SE, MemorySSAUpdater *MSSAU) { if (!EnableTermFolding) return false; @@ -548,7 +552,7 @@ static bool constantFoldTerminators(Loop &L, DominatorTree &DT, LoopInfo &LI, if (!L.getLoopLatch()) return false; - ConstantTerminatorFoldingImpl BranchFolder(L, LI, DT, MSSAU); + ConstantTerminatorFoldingImpl BranchFolder(L, LI, DT, SE, MSSAU); return BranchFolder.run(); } @@ -585,7 +589,7 @@ static bool simplifyLoopCFG(Loop &L, DominatorTree &DT, LoopInfo &LI, bool Changed = false; // Constant-fold terminators with known constant conditions. - Changed |= constantFoldTerminators(L, DT, LI, MSSAU); + Changed |= constantFoldTerminators(L, DT, LI, SE, MSSAU); // Eliminate unconditional branches by merging blocks into their predecessors. Changed |= mergeBlocksIntoPredecessors(L, DT, LI, MSSAU); -- 2.50.1