mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-19 04:29:21 +00:00
Canonicalize inner loops before outer loops. Inner loop canonicalization
can provide work for the outer loop to canonicalize. This fixes a case that breaks unswitching. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26189 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dea7245997
commit
0ab9f966de
@ -115,7 +115,11 @@ bool LoopSimplify::runOnFunction(Function &F) {
|
||||
///
|
||||
bool LoopSimplify::ProcessLoop(Loop *L) {
|
||||
bool Changed = false;
|
||||
|
||||
// Canonicalize inner loops before outer loops. Inner loop canonicalization
|
||||
// can provide work for the outer loop to canonicalize.
|
||||
for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I)
|
||||
Changed |= ProcessLoop(*I);
|
||||
|
||||
// Check to see that no blocks (other than the header) in the loop have
|
||||
// predecessors that are not in the loop. This is not valid for natural
|
||||
// loops, but can occur if the blocks are unreachable. Since they are
|
||||
@ -205,9 +209,6 @@ bool LoopSimplify::ProcessLoop(Loop *L) {
|
||||
PN->eraseFromParent();
|
||||
}
|
||||
|
||||
for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I)
|
||||
Changed |= ProcessLoop(*I);
|
||||
|
||||
return Changed;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user