mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-19 23:29:20 +00:00
Fold ((1 << a) & 1) to (a == 0).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53276 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6fa6a32e4e
commit
d1f77bf931
@ -3473,6 +3473,18 @@ Instruction *InstCombiner::visitAnd(BinaryOperator &I) {
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case Instruction::Shl:
|
||||
case Instruction::LShr:
|
||||
// (1 << x) & 1 --> zext(x == 0)
|
||||
// (1 >> x) & 1 --> zext(x == 0)
|
||||
if (AndRHSMask.getLimitedValue() == 1 && Op0LHS == AndRHS) {
|
||||
Instruction *NewICmp = new ICmpInst(ICmpInst::ICMP_EQ, Op0RHS,
|
||||
Constant::getNullValue(I.getType()));
|
||||
InsertNewInstBefore(NewICmp, I);
|
||||
return new ZExtInst(NewICmp, I.getType());
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (ConstantInt *Op0CI = dyn_cast<ConstantInt>(Op0I->getOperand(1)))
|
||||
|
10
test/Transforms/InstCombine/2008-07-08-ShiftOneAndOne.ll
Normal file
10
test/Transforms/InstCombine/2008-07-08-ShiftOneAndOne.ll
Normal file
@ -0,0 +1,10 @@
|
||||
; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {icmp ne i32 \%a}
|
||||
; PR2330
|
||||
|
||||
define i1 @foo(i32 %a) nounwind {
|
||||
entry:
|
||||
%tmp15 = shl i32 1, %a ; <i32> [#uses=1]
|
||||
%tmp237 = and i32 %tmp15, 1 ; <i32> [#uses=1]
|
||||
%toBool = icmp eq i32 %tmp237, 0 ; <i1> [#uses=1]
|
||||
ret i1 %toBool
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user