Fix a fixme in CondPropagate.cpp by moving a PhiNode optimization into
[oota-llvm.git] / lib / VMCore / BasicBlock.cpp
index 98d12d8f1381368a497887dec4fe6037a4942545..407080cf68b98ed68485e963f4a61fcaae3fdaef 100644 (file)
@@ -189,8 +189,16 @@ void BasicBlock::removePredecessor(BasicBlock *Pred,
     // Okay, now we know that we need to remove predecessor #pred_idx from all
     // PHI nodes.  Iterate over each PHI node fixing them up
     PHINode *PN;
-    for (iterator II = begin(); (PN = dyn_cast<PHINode>(II)); ++II)
+    for (iterator II = begin(); (PN = dyn_cast<PHINode>(II)); ++II) {
       PN->removeIncomingValue(Pred, false);
+      // If all incoming values to the Phi are the same, we can replace the Phi
+      // with that value.
+      if (Value *PNV = PN->hasConstantValue())
+        if (!isa<Instruction>(PNV)) {
+          PN->replaceAllUsesWith(PNV);
+          PN->eraseFromParent();
+        }
+    }
   }
 }