PHINode::hasConstantValue should never return the PHI itself, even if the
authorChris Lattner <sabre@nondot.org>
Fri, 5 Aug 2005 15:37:31 +0000 (15:37 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 5 Aug 2005 15:37:31 +0000 (15:37 +0000)
PHI is its only operand.

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

lib/VMCore/Instructions.cpp

index d9c20872f88dd55f64140e515b62ffdfb8df60fb..7de5602f0876534c71c8980d1a5acecbac0904ae 100644 (file)
@@ -138,8 +138,11 @@ void PHINode::resizeOperands(unsigned NumOps) {
 Value *PHINode::hasConstantValue(bool AllowNonDominatingInstruction) const {
   // If the PHI node only has one incoming value, eliminate the PHI node...
   if (getNumIncomingValues() == 1)
-    return getIncomingValue(0);
-  
+    if (getIncomingValue(0) != this)   // not  X = phi X
+      return getIncomingValue(0);
+    else
+      return UndefValue::get(getType());  // Self cycle is dead.
+      
   // Otherwise if all of the incoming values are the same for the PHI, replace
   // the PHI node with the incoming value.
   //