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()) {
|
||||
Value *In = ICI->getOperand(0);
|
||||
|
||||
assert((Op1C->isZero() || Op1C->getValue() == KnownZeroMask) &&
|
||||
"Constant icmp not folded?");
|
||||
// If the icmp tests for a known zero bit we can constant fold it.
|
||||
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)) {
|
||||
// sext ((x & 2^n) == 0) -> (x >> n) - 1
|
||||
|
|
Loading…
Reference in New Issue