mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-08 13:00:50 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128777 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0b7bc77e30
commit
f5b75932b8
@ -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
Block a user