Fix a bug in the previous patch
authorChris Lattner <sabre@nondot.org>
Wed, 1 Nov 2006 04:55:47 +0000 (04:55 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 1 Nov 2006 04:55:47 +0000 (04:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31342 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 8f998fbb40e8bb9d653282cd9ac8aff1aa0e86f2..250b7602620a9ebaaf08c1ed9d6518857f89a6d5 100644 (file)
@@ -6787,13 +6787,16 @@ Instruction *InstCombiner::FoldPHIArgBinOpIntoPHI(PHINode &PN) {
   Instruction *FirstInst = cast<Instruction>(PN.getIncomingValue(0));
   assert(isa<BinaryOperator>(FirstInst) || isa<ShiftInst>(FirstInst));
   unsigned Opc = FirstInst->getOpcode();
+  const Type *LHSType = FirstInst->getOperand(0)->getType();
   
   // Scan to see if all operands are the same opcode, all have one use, and all
   // kill their operands (i.e. the operands have one use).
-  unsigned NumValues = PN.getNumIncomingValues();
-  for (unsigned i = 0; i != NumValues; ++i) {
+  for (unsigned i = 0; i != PN.getNumIncomingValues(); ++i) {
     Instruction *I = dyn_cast<Instruction>(PN.getIncomingValue(i));
-    if (!I || I->getOpcode() != Opc || !I->hasOneUse())
+    if (!I || I->getOpcode() != Opc || !I->hasOneUse() ||
+        // Verify type of the LHS matches so we don't fold setcc's of different
+        // types.
+        I->getOperand(0)->getType() != LHSType)
       return 0;
   }