mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
[PM] Relax asserts and always try to reconstruct loop simplify form when
we can while splitting critical edges. The only code which called this and didn't require simplified loops to be preserved is polly, and the code behaves correctly there anyways. Without this change, it becomes really hard to share this code with the new pass manager where things like preserving loop simplify form don't make any sense. If anyone discovers this code behaving incorrectly, what it *should* be testing for is whether the loops it needs to be in simplified form are in fact in that form. It should always be trying to preserve that form when it exists. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226443 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
04075c619b
commit
2274f74c92
@ -291,16 +291,17 @@ BasicBlock *llvm::SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum,
|
||||
P->addBasicBlockToLoop(NewBB, *LI);
|
||||
}
|
||||
}
|
||||
|
||||
// If TIBB is in a loop and DestBB is outside of that loop, we may need
|
||||
// to update LoopSimplify form and LCSSA form.
|
||||
if (!TIL->contains(DestBB) &&
|
||||
P->mustPreserveAnalysisID(LoopSimplifyID)) {
|
||||
if (!TIL->contains(DestBB)) {
|
||||
assert(!TIL->contains(NewBB) &&
|
||||
"Split point for loop exit is contained in loop!");
|
||||
|
||||
// Update LCSSA form in the newly created exit block.
|
||||
if (PreserveLCSSA)
|
||||
if (PreserveLCSSA) {
|
||||
createPHIsForSplitLoopExit(TIBB, NewBB, DestBB);
|
||||
}
|
||||
|
||||
// The only that we can break LoopSimplify form by splitting a critical
|
||||
// edge is if after the split there exists some edge from TIL to DestBB
|
||||
@ -333,13 +334,6 @@ BasicBlock *llvm::SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum,
|
||||
createPHIsForSplitLoopExit(LoopPreds, NewExitBB, DestBB);
|
||||
}
|
||||
}
|
||||
// LCSSA form was updated above for the case where LoopSimplify is
|
||||
// available, which means that all predecessors of loop exit blocks
|
||||
// are within the loop. Without LoopSimplify form, it would be
|
||||
// necessary to insert a new phi.
|
||||
assert((!PreserveLCSSA || P->mustPreserveAnalysisID(LoopSimplifyID)) &&
|
||||
"SplitCriticalEdge doesn't know how to update LCCSA form "
|
||||
"without LoopSimplify!");
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user