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:
Chris Lattner 2006-02-14 23:06:02 +00:00
parent dea7245997
commit 0ab9f966de

View File

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