[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp

Chris Lattner lattner at cs.uiuc.edu
Thu Dec 18 23:59:02 PST 2003


Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.144 -> 1.145

---
Log message:

Factor code out into the Utils library


---
Diffs of the changes:  (+3 -23)

Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.144 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.145
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.144	Sat Dec  6 19:24:23 2003
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp	Thu Dec 18 23:58:40 2003
@@ -1906,29 +1906,9 @@
 // PHINode simplification
 //
 Instruction *InstCombiner::visitPHINode(PHINode &PN) {
-  // If the PHI node only has one incoming value, eliminate the PHI node...
-  if (PN.getNumIncomingValues() == 1)
-    return ReplaceInstUsesWith(PN, PN.getIncomingValue(0));
-  
-  // Otherwise if all of the incoming values are the same for the PHI, replace
-  // the PHI node with the incoming value.
-  //
-  Value *InVal = 0;
-  for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
-    if (PN.getIncomingValue(i) != &PN)  // Not the PHI node itself...
-      if (InVal && PN.getIncomingValue(i) != InVal)
-        return 0;  // Not the same, bail out.
-      else
-        InVal = PN.getIncomingValue(i);
-
-  // The only case that could cause InVal to be null is if we have a PHI node
-  // that only has entries for itself.  In this case, there is no entry into the
-  // loop, so kill the PHI.
-  //
-  if (InVal == 0) InVal = Constant::getNullValue(PN.getType());
-
-  // All of the incoming values are the same, replace the PHI node now.
-  return ReplaceInstUsesWith(PN, InVal);
+  if (Value *V = hasConstantValue(&PN))
+    return ReplaceInstUsesWith(PN, V);
+  return 0;
 }
 
 





More information about the llvm-commits mailing list