[InstCombine] return a vector-safe true/false constant
authorSanjay Patel <spatel@rotateright.com>
Thu, 8 Sep 2016 16:54:02 +0000 (16:54 +0000)
committerSanjay Patel <spatel@rotateright.com>
Thu, 8 Sep 2016 16:54:02 +0000 (16:54 +0000)
I introduced this potential bug by missing this diff in:
https://reviews.llvm.org/rL280873

...however, I'm not sure how to reach this code path with a regression test.
We may be able to remove this code and assume that the transform to a constant
is always handled by InstSimplify?

llvm-svn: 280964

llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp

index 527ca03..c8e0b33 100644 (file)
@@ -1431,9 +1431,9 @@ Instruction *InstCombiner::foldICmpAndShift(ICmpInst &Cmp, BinaryOperator *And,
         // special case, check to see if this means that the result is always
         // true or false now.
         if (Cmp.getPredicate() == ICmpInst::ICMP_EQ)
-          return replaceInstUsesWith(Cmp, Builder->getFalse());
+          return replaceInstUsesWith(Cmp, ConstantInt::getFalse(Cmp.getType()));
         if (Cmp.getPredicate() == ICmpInst::ICMP_NE)
-          return replaceInstUsesWith(Cmp, Builder->getTrue());
+          return replaceInstUsesWith(Cmp, ConstantInt::getTrue(Cmp.getType()));
       } else {
         Cmp.setOperand(1, ConstantInt::get(And->getType(), NewCst));
         APInt NewAndCst = IsShl ? C2->lshr(*C3) : C2->shl(*C3);