* Don't forget to update Loop information!

* Remove bogus assertion: there may be a single outside predecessor and
    still need a new loop-preheader if the predecessor has multiple
    successors.  See bug: LICM/2003-02-27-PreheaderProblem.ll

llvm-svn: 5655
This commit is contained in:
Chris Lattner 2003-02-27 21:50:19 +00:00
parent 209a688b55
commit 4e2fbfb4c3
1 changed files with 5 additions and 3 deletions

View File

@ -179,8 +179,6 @@ void Preheaders::InsertPreheaderForLoop(Loop *L) {
if (!L->contains(*PI)) // Coming in from outside the loop?
OutsideBlocks.push_back(*PI); // Keep track of it...
assert(OutsideBlocks.size() != 1 && "Loop already has a preheader!");
// Split out the loop pre-header
BasicBlock *NewBB =
SplitBlockPredecessors(Header, ".preheader", OutsideBlocks);
@ -281,6 +279,11 @@ void Preheaders::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) {
BasicBlock *NewBB =
SplitBlockPredecessors(Exit, ".loopexit", LoopBlocks);
// Update Loop Information - we know that the new block will be in the parent
// loop of L.
if (Loop *Parent = L->getParentLoop())
Parent->addBasicBlockToLoop(NewBB, getAnalysis<LoopInfo>());
// Update dominator information... The blocks that dominate NewBB are the
// intersection of the dominators of predecessors, plus the block itself.
// The newly created basic block does not dominate anything except itself.
@ -363,6 +366,5 @@ void Preheaders::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) {
}
}
}
}
}