OSDN Git Service

Fix InstCombine/2007-02-23-PhiFoldInfLoop.ll and PR1217
authorChris Lattner <sabre@nondot.org>
Sat, 24 Feb 2007 01:03:45 +0000 (01:03 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 24 Feb 2007 01:03:45 +0000 (01:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34546 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index a2011f5..23dcf0c 100644 (file)
@@ -1641,11 +1641,12 @@ Instruction *InstCombiner::FoldOpIntoPhi(Instruction &I) {
 
   // Check to see if all of the operands of the PHI are constants.  If there is
   // one non-constant value, remember the BB it is.  If there is more than one
-  // bail out.
+  // or if *it* is a PHI, bail out.
   BasicBlock *NonConstBB = 0;
   for (unsigned i = 0; i != NumPHIValues; ++i)
     if (!isa<Constant>(PN->getIncomingValue(i))) {
       if (NonConstBB) return 0;  // More than one non-const value.
+      if (isa<PHINode>(PN->getIncomingValue(i))) return 0;  // Itself a phi.
       NonConstBB = PN->getIncomingBlock(i);
       
       // If the incoming non-constant value is in I's block, we have an infinite