diff options
author | Craig Topper <craig.topper@gmail.com> | 2017-04-16 21:46:12 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2017-04-16 21:46:12 +0000 |
commit | da886c665be230c90830a15dcab7ba1c3c9a29ca (patch) | |
tree | 70e823664ef5fc3d8c427941a4f189aebcff0d3f /llvm/lib/Transforms | |
parent | dd37c67d812e0770e0f82b7541b2af439cb9baca (diff) | |
download | bcm5719-llvm-da886c665be230c90830a15dcab7ba1c3c9a29ca.tar.gz bcm5719-llvm-da886c665be230c90830a15dcab7ba1c3c9a29ca.zip |
[InstCombine][ValueTracking] When computing known bits for Srem make sure we don't compute known bits for the LHS twice.
If we already called computeKnownBits for the RHS being a constant power of 2, we've already computed everything we can and should just stop. I think previously we would still recurse if we had determined the result was negative or had not determined the sign bit at all.
llvm-svn: 300432
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp index 246fd6bdf5a..abc7d07d451 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp @@ -644,13 +644,13 @@ Value *InstCombiner::SimplifyDemandedUseBits(Value *V, APInt DemandedMask, KnownOne |= ~LowBits; assert(!(KnownZero & KnownOne) && "Bits known to be one AND zero?"); + break; } } // The sign bit is the LHS's sign bit, except when the result of the // remainder is zero. - if (DemandedMask.isNegative() && KnownZero.isNonNegative()) { - APInt LHSKnownZero(BitWidth, 0), LHSKnownOne(BitWidth, 0); + if (DemandedMask.isNegative()) { computeKnownBits(I->getOperand(0), LHSKnownZero, LHSKnownOne, Depth + 1, CxtI); // If it's known zero, our sign bit is also zero. |