Enhance hasConstantValue to ignore undef values in phi nodes. This allows it
authorChris Lattner <sabre@nondot.org>
Sun, 17 Oct 2004 21:23:26 +0000 (21:23 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 17 Oct 2004 21:23:26 +0000 (21:23 +0000)
to think that PHI[4, undef] == 4.

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

lib/Transforms/Utils/Local.cpp

index fe27f308cf096310dfd840acc537f166c94c789c..b188884a4052333b6ba36229f0744ecc92460759 100644 (file)
@@ -353,7 +353,8 @@ Value *llvm::hasConstantValue(PHINode *PN) {
   //
   Value *InVal = 0;
   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
-    if (PN->getIncomingValue(i) != PN)  // Not the PHI node itself...
+    if (PN->getIncomingValue(i) != PN &&  // Not the PHI node itself...
+        !isa<UndefValue>(PN->getIncomingValue(i)))
       if (InVal && PN->getIncomingValue(i) != InVal)
         return 0;  // Not the same, bail out.
       else
@@ -363,7 +364,7 @@ Value *llvm::hasConstantValue(PHINode *PN) {
   // 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());
+  if (InVal == 0) InVal = UndefValue::get(PN->getType());
 
   // All of the incoming values are the same, return the value now.
   return InVal;