While SimplifyDemandedBits constant folds this, we can't rely on it here.
It's possible to craft an input that hits the recursion limits in a way that SimplifyDemandedBits doesn't simplify the icmp but ComputeMaskedBits can infer which bits are zero. No test case as it depends on too many other things. Fixes PR9609. llvm-svn: 128777
This commit is contained in:
parent
1473c9a7c4
commit
50a281a871
|
@ -913,8 +913,13 @@ Instruction *InstCombiner::transformSExtICmp(ICmpInst *ICI, Instruction &CI) {
|
||||||
if (KnownZeroMask.isPowerOf2()) {
|
if (KnownZeroMask.isPowerOf2()) {
|
||||||
Value *In = ICI->getOperand(0);
|
Value *In = ICI->getOperand(0);
|
||||||
|
|
||||||
assert((Op1C->isZero() || Op1C->getValue() == KnownZeroMask) &&
|
// If the icmp tests for a known zero bit we can constant fold it.
|
||||||
"Constant icmp not folded?");
|
if (!Op1C->isZero() && Op1C->getValue() != KnownZeroMask) {
|
||||||
|
Value *V = Pred == ICmpInst::ICMP_NE ?
|
||||||
|
ConstantInt::getAllOnesValue(CI.getType()) :
|
||||||
|
ConstantInt::getNullValue(CI.getType());
|
||||||
|
return ReplaceInstUsesWith(CI, V);
|
||||||
|
}
|
||||||
|
|
||||||
if (!Op1C->isZero() == (Pred == ICmpInst::ICMP_NE)) {
|
if (!Op1C->isZero() == (Pred == ICmpInst::ICMP_NE)) {
|
||||||
// sext ((x & 2^n) == 0) -> (x >> n) - 1
|
// sext ((x & 2^n) == 0) -> (x >> n) - 1
|
||||||
|
|
Loading…
Reference in New Issue