[InstCombine] return a vector-safe true/false constant

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
This commit is contained in:
Sanjay Patel 2016-09-08 16:54:02 +00:00
parent ebb715b119
commit 1c608f4323
1 changed files with 2 additions and 2 deletions

View 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 // special case, check to see if this means that the result is always
// true or false now. // true or false now.
if (Cmp.getPredicate() == ICmpInst::ICMP_EQ) if (Cmp.getPredicate() == ICmpInst::ICMP_EQ)
return replaceInstUsesWith(Cmp, Builder->getFalse()); return replaceInstUsesWith(Cmp, ConstantInt::getFalse(Cmp.getType()));
if (Cmp.getPredicate() == ICmpInst::ICMP_NE) if (Cmp.getPredicate() == ICmpInst::ICMP_NE)
return replaceInstUsesWith(Cmp, Builder->getTrue()); return replaceInstUsesWith(Cmp, ConstantInt::getTrue(Cmp.getType()));
} else { } else {
Cmp.setOperand(1, ConstantInt::get(And->getType(), NewCst)); Cmp.setOperand(1, ConstantInt::get(And->getType(), NewCst));
APInt NewAndCst = IsShl ? C2->lshr(*C3) : C2->shl(*C3); APInt NewAndCst = IsShl ? C2->lshr(*C3) : C2->shl(*C3);