mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
Drop SE cache early because loop parent can change in LoopSimplifyCFG
llvm-svn: 350145
This commit is contained in:
parent
41c6312f46
commit
9bfdb33b19
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user