forked from OSchip/llvm-project
[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:
parent
ebb715b119
commit
1c608f4323
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue