srem doesn't actually have the same resulting sign as its numerator, you could

also have a zero when numerator = denominator. Reverts parts of r126635 and
r126637.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126644 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nick Lewycky
2011-02-28 09:17:39 +00:00
parent b042f8e969
commit 3dc7e49c70
3 changed files with 5 additions and 37 deletions
-12
View File
@@ -460,18 +460,6 @@ void llvm::ComputeMaskedBits(Value *V, const APInt &Mask,
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;
case Instruction::URem: {
if (ConstantInt *Rem = dyn_cast<ConstantInt>(I->getOperand(1))) {