Fix bug: LICM/2003-02-27-PreheaderExitNodeUpdate.ll
authorChris Lattner <sabre@nondot.org>
Fri, 28 Feb 2003 03:07:54 +0000 (03:07 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 28 Feb 2003 03:07:54 +0000 (03:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5667 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/LoopSimplify.cpp

index c5adfd25534e8fec81be269b55db311a4e91fe1e..3759f44f64ce9c0bc431056c0afc1b9abe9e3308 100644 (file)
@@ -28,6 +28,7 @@
 #include "llvm/Support/CFG.h"
 #include "Support/SetOperations.h"
 #include "Support/Statistic.h"
+#include "Support/DepthFirstIterator.h"
 
 namespace {
   Statistic<> NumInserted("preheaders", "Number of pre-header nodes inserted");
@@ -303,7 +304,10 @@ void Preheaders::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) {
   // loop of L.
   if (Loop *Parent = L->getParentLoop())
     Parent->addBasicBlockToLoop(NewBB, getAnalysis<LoopInfo>());
-  L->changeExitBlock(Exit, NewBB);   // Update exit block information
+
+  // Replace any instances of Exit with NewBB in this and any nested loops...
+  for (df_iterator<Loop*> I = df_begin(L), E = df_end(L); I != E; ++I)
+    I->changeExitBlock(Exit, NewBB);   // Update exit block information
 
   // Update dominator information...  The blocks that dominate NewBB are the
   // intersection of the dominators of predecessors, plus the block itself.