mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
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
This commit is contained in:
parent
a5ddb59a13
commit
f30752cbcc
@ -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);
|
||||
|
29
test/Transforms/InstCombine/shl-icmp.ll
Normal file
29
test/Transforms/InstCombine/shl-icmp.ll
Normal file
@ -0,0 +1,29 @@
|
||||
; RUN: llvm-as < %s | opt -instcombine -stats -disable-output |& \
|
||||
; RUN: grep {Number of insts combined} | grep 5
|
||||
|
||||
define i8 @t1(i8 zeroext %x, i8 zeroext %y) zeroext nounwind {
|
||||
entry:
|
||||
%tmp1 = lshr i8 %x, 7
|
||||
%cond1 = icmp ne i8 %tmp1, 0
|
||||
br i1 %cond1, label %bb1, label %bb2
|
||||
|
||||
bb1:
|
||||
ret i8 %tmp1
|
||||
|
||||
bb2:
|
||||
%tmp2 = add i8 %tmp1, %y
|
||||
ret i8 %tmp2
|
||||
}
|
||||
|
||||
define i8 @t2(i8 zeroext %x) zeroext nounwind {
|
||||
entry:
|
||||
%tmp1 = lshr i8 %x, 7
|
||||
%cond1 = icmp ne i8 %tmp1, 0
|
||||
br i1 %cond1, label %bb1, label %bb2
|
||||
|
||||
bb1:
|
||||
ret i8 0
|
||||
|
||||
bb2:
|
||||
ret i8 1
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user