* Don't forget to update Loop information!
authorChris Lattner <sabre@nondot.org>
Thu, 27 Feb 2003 21:50:19 +0000 (21:50 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 27 Feb 2003 21:50:19 +0000 (21:50 +0000)
  * 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

index 33dab597e67f224843200fdf3a6478865eae40bf..dc9df6aa3904224006bffcde05b63cb728d95506 100644 (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) {
         }
       }
     }
-
   }
 }