diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-04-23 00:38:06 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-04-23 00:38:06 +0000 |
commit | f30752cbcc9a29bc10f1d811bdfe2c78f267e51b (patch) | |
tree | f799fd679e1d4be0591595353eff125ceac96eb8 /lib/Transforms/Scalar/InstructionCombining.cpp | |
parent | a5ddb59a1319ccd23844c74809a64bc4d88f59d1 (diff) |
Don't do: "(X & 4) >> 1 == 2 --> (X & 4) == 4" if there are more than one uses of the shift result.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50118 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/InstructionCombining.cpp')
-rw-r--r-- | lib/Transforms/Scalar/InstructionCombining.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 555942ddc1..c2019389ba 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -6065,13 +6065,14 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI, // Otherwise, check to see if the bits shifted out are known to be zero. // If so, we can compare against the unshifted value: // (X & 4) >> 1 == 2 --> (X & 4) == 4. - if (MaskedValueIsZero(LHSI->getOperand(0), + if (LHSI->hasOneUse() && + MaskedValueIsZero(LHSI->getOperand(0), APInt::getLowBitsSet(Comp.getBitWidth(), ShAmtVal))) { return new ICmpInst(ICI.getPredicate(), LHSI->getOperand(0), ConstantExpr::getShl(RHS, ShAmt)); } - if (LHSI->hasOneUse() || RHSV == 0) { + if (LHSI->hasOneUse()) { // Otherwise strength reduce the shift into an and. APInt Val(APInt::getHighBitsSet(TypeBits, TypeBits - ShAmtVal)); Constant *Mask = ConstantInt::get(Val); |