From d7231ac523eb8d5c6a6b09e223e957cb99f9d446 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 5 Aug 2005 15:37:31 +0000 Subject: [PATCH] PHINode::hasConstantValue should never return the PHI itself, even if the 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 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index d9c20872f88..7de5602f087 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -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. //