Fix bug: test/Regression/Transforms/SCCP/2002-05-21-InvalidSimplify.ll
authorChris Lattner <sabre@nondot.org>
Wed, 22 May 2002 16:07:20 +0000 (16:07 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 22 May 2002 16:07:20 +0000 (16:07 +0000)
Improperly handling edges... by not marking them alive properly

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2707 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/SCCP.cpp

index 24d383b280861606bf1be3e3163c92f48a33abf1..591c22e231cd9144ff5633da0e1f19a5817fc078 100644 (file)
@@ -176,16 +176,6 @@ private:
     DEBUG_SCCP(cerr << "Marking BB Executable: " << BB);
     BBExecutable.insert(BB);   // Basic block is executable!
     BBWorkList.push_back(BB);  // Add the block to the work list!
-
-    // Visit all of the PHI nodes that merge values from this block...  Because
-    // this block is newly executable, PHI nodes that used to be constant now
-    // may not be.  Note that we only mark PHI nodes that live in blocks that
-    // can execute!
-    //
-    for (Value::use_iterator I = BB->use_begin(), E = BB->use_end(); I != E;++I)
-      if (PHINode *PN = dyn_cast<PHINode>(*I))
-        if (BBExecutable.count(PN->getParent()))
-          visitPHINode(PN);
   }
 
 
@@ -487,8 +477,18 @@ void SCCP::visitTerminatorInst(TerminatorInst *TI) {
 
   // Mark all feasible successors executable...
   for (unsigned i = 0, e = SuccFeasible.size(); i != e; ++i)
-    if (SuccFeasible[i])
-      markExecutable(TI->getSuccessor(i));
+    if (SuccFeasible[i]) {
+      BasicBlock *Succ = TI->getSuccessor(i);
+      markExecutable(Succ);
+
+      // Visit all of the PHI nodes that merge values from this block...
+      // Because this edge may be new executable, and PHI nodes that used to be
+      // constant now may not be.
+      //
+      for (BasicBlock::iterator I = Succ->begin();
+           PHINode *PN = dyn_cast<PHINode>(*I); ++I)
+        visitPHINode(PN);
+    }
 }
 
 void SCCP::visitUnaryOperator(Instruction *I) {