1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

Drop SE cache early because loop parent can change in LoopSimplifyCFG

llvm-svn: 350145
This commit is contained in:
Max Kazantsev 2018-12-29 04:26:22 +00:00
parent 41c6312f46
commit 9bfdb33b19

View File

@ -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);