For PR1065:
authorReid Spencer <rspencer@reidspencer.com>
Sat, 23 Dec 2006 18:58:04 +0000 (18:58 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Sat, 23 Dec 2006 18:58:04 +0000 (18:58 +0000)
Don't allow CmpInst instances to be processed in FoldSelectOpOp because
you can't easily swap their operands.

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

lib/Transforms/Scalar/InstructionCombining.cpp

index 205dfef84a82b48302414f6bd150e430a3dcb80e..3397530482f97852f781d69edc6775e2b3d93350 100644 (file)
@@ -6555,13 +6555,7 @@ Instruction *InstCombiner::FoldSelectOpOp(SelectInst &SI, Instruction *TI,
   }
 
   // Only handle binary, compare and shift operators here.
-  if (!isa<ShiftInst>(TI) && !isa<BinaryOperator>(TI) && !isa<CmpInst>(TI))
-    return 0;
-
-  // If the CmpInst predicates don't match, then the instructions aren't the 
-  // same and we can't continue.
-  if (isa<CmpInst>(TI) && isa<CmpInst>(FI) &&
-      (cast<CmpInst>(TI)->getPredicate() != cast<CmpInst>(FI)->getPredicate()))
+  if (!isa<ShiftInst>(TI) && !isa<BinaryOperator>(TI))
     return 0;
 
   // Figure out if the operations have any operands in common.
@@ -6603,12 +6597,13 @@ Instruction *InstCombiner::FoldSelectOpOp(SelectInst &SI, Instruction *TI,
       return BinaryOperator::create(BO->getOpcode(), MatchOp, NewSI);
     else
       return BinaryOperator::create(BO->getOpcode(), NewSI, MatchOp);
-  } else {
-    if (MatchIsOpZero)
-      return new ShiftInst(cast<ShiftInst>(TI)->getOpcode(), MatchOp, NewSI);
-    else
-      return new ShiftInst(cast<ShiftInst>(TI)->getOpcode(), NewSI, MatchOp);
   }
+
+  assert(isa<ShiftInst>(TI) && "Should only have Shift here");
+  if (MatchIsOpZero)
+    return new ShiftInst(cast<ShiftInst>(TI)->getOpcode(), MatchOp, NewSI);
+  else
+    return new ShiftInst(cast<ShiftInst>(TI)->getOpcode(), NewSI, MatchOp);
 }
 
 Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {