OSDN Git Service

improve PHINode::hasConstantValue() to detect recursive cases like %phi = phi(%phi...
authorNuno Lopes <nunoplopes@sapo.pt>
Tue, 3 Jul 2012 17:10:28 +0000 (17:10 +0000)
committerNuno Lopes <nunoplopes@sapo.pt>
Tue, 3 Jul 2012 17:10:28 +0000 (17:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159666 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Instructions.cpp

index 3839945..5aef459 100644 (file)
@@ -161,8 +161,12 @@ Value *PHINode::hasConstantValue() const {
   // Exploit the fact that phi nodes always have at least one entry.
   Value *ConstantValue = getIncomingValue(0);
   for (unsigned i = 1, e = getNumIncomingValues(); i != e; ++i)
-    if (getIncomingValue(i) != ConstantValue)
-      return 0; // Incoming values not all the same.
+    if (getIncomingValue(i) != ConstantValue && getIncomingValue(i) != this) {
+      if (ConstantValue != this)
+        return 0; // Incoming values not all the same.
+       // The case where the first value is this PHI.
+      ConstantValue = getIncomingValue(i);
+    }
   return ConstantValue;
 }