From 69269ac203156ae8512c9513b75e5c7217c9ac4e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 27 Feb 2003 21:50:19 +0000 Subject: [PATCH] * 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5655 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/LoopSimplify.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/Transforms/Utils/LoopSimplify.cpp b/lib/Transforms/Utils/LoopSimplify.cpp index 33dab597e67..dc9df6aa390 100644 --- a/lib/Transforms/Utils/LoopSimplify.cpp +++ b/lib/Transforms/Utils/LoopSimplify.cpp @@ -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()); + // 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) { } } } - } } -- 2.34.1