make various clients of ReplaceAndSimplifyAllUses tolerate
authorChris Lattner <sabre@nondot.org>
Thu, 15 Jul 2010 06:06:04 +0000 (06:06 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 15 Jul 2010 06:06:04 +0000 (06:06 +0000)
it *changing* the things it replaces, not just causing them
to drop to null.  There is no functionality change yet, but
this is required for a subsequent patch.

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

lib/Transforms/Utils/Local.cpp

index 0b48a8fce78b7dd824b2d38e60b7a7616ee12f2e..8e9113871f47be3a65bd07b64cc661af0719e442 100644 (file)
@@ -306,7 +306,7 @@ bool llvm::SimplifyInstructionsInBlock(BasicBlock *BB, const TargetData *TD) {
       WeakVH BIHandle(BI);
       ReplaceAndSimplifyAllUses(Inst, V, TD);
       MadeChange = true;
-      if (BIHandle == 0)
+      if (BIHandle != BI)
         BI = BB->begin();
       continue;
     }
@@ -354,12 +354,13 @@ void llvm::RemovePredecessorAndSimplify(BasicBlock *BB, BasicBlock *Pred,
     // value into all of its uses.
     assert(PNV != PN && "hasConstantValue broken");
     
+    Value *OldPhiIt = PhiIt;
     ReplaceAndSimplifyAllUses(PN, PNV, TD);
     
     // If recursive simplification ended up deleting the next PHI node we would
     // iterate to, then our iterator is invalid, restart scanning from the top
     // of the block.
-    if (PhiIt == 0) PhiIt = &BB->front();
+    if (PhiIt != OldPhiIt) PhiIt = &BB->front();
   }
 }