forked from OSchip/llvm-project
Teach ValueTracking to look at the dividend when determining the sign bit of an
srem instruction. llvm-svn: 126637
This commit is contained in:
parent
75a800d3bf
commit
29dbbd12c1
|
@ -460,6 +460,18 @@ void llvm::ComputeMaskedBits(Value *V, const APInt &Mask,
|
||||||
assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
|
assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Mask.isNegative()) { // We're looking for the sign bit.
|
||||||
|
APInt Mask2 = APInt::getSignBit(BitWidth);
|
||||||
|
KnownZero2 = 0;
|
||||||
|
KnownOne2 = 0;
|
||||||
|
ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero2, KnownOne2, TD,
|
||||||
|
Depth+1);
|
||||||
|
if (KnownOne2[BitWidth-1])
|
||||||
|
KnownOne |= Mask2;
|
||||||
|
if (KnownZero2[BitWidth-1])
|
||||||
|
KnownZero |= Mask2;
|
||||||
|
assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Instruction::URem: {
|
case Instruction::URem: {
|
||||||
if (ConstantInt *Rem = dyn_cast<ConstantInt>(I->getOperand(1))) {
|
if (ConstantInt *Rem = dyn_cast<ConstantInt>(I->getOperand(1))) {
|
||||||
|
|
Loading…
Reference in New Issue