mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
Fold 'icmp eq (icmp), true' into an xor(icmp).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82386 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e895c61515
commit
85958b059d
@ -1428,6 +1428,20 @@ Constant *llvm::ConstantFoldCompareInstruction(LLVMContext &Context,
|
||||
}
|
||||
}
|
||||
|
||||
// If the comparison is a comparison between two i1's, simplify it.
|
||||
if (C1->getType() == Type::getInt1Ty(Context)) {
|
||||
switch(pred) {
|
||||
case ICmpInst::ICMP_EQ:
|
||||
if (isa<ConstantInt>(C2))
|
||||
return ConstantExpr::getXor(C1, ConstantExpr::getNot(C2));
|
||||
return ConstantExpr::getXor(ConstantExpr::getNot(C1), C2);
|
||||
case ICmpInst::ICMP_NE:
|
||||
return ConstantExpr::getXor(C1, C2);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isa<ConstantInt>(C1) && isa<ConstantInt>(C2)) {
|
||||
APInt V1 = cast<ConstantInt>(C1)->getValue();
|
||||
APInt V2 = cast<ConstantInt>(C2)->getValue();
|
||||
|
@ -27,3 +27,12 @@
|
||||
; CHECK: @I = global i1 icmp ult (i8* @X, i8* @Y) ; <i1*> [#uses=0]
|
||||
@J = global i1 xor (i1 icmp ult (i8* @X, i8* @Y), i1 true)
|
||||
; CHECK: @J = global i1 icmp uge (i8* @X, i8* @Y) ; <i1*> [#uses=0]
|
||||
|
||||
@K = global i1 icmp eq (i1 icmp ult (i8* @X, i8* @Y), i1 false)
|
||||
; CHECK: @K = global i1 icmp uge (i8* @X, i8* @Y) ; <i1*> [#uses=0]
|
||||
@L = global i1 icmp eq (i1 icmp ult (i8* @X, i8* @Y), i1 true)
|
||||
; CHECK: @L = global i1 icmp ult (i8* @X, i8* @Y) ; <i1*> [#uses=0]
|
||||
@M = global i1 icmp ne (i1 icmp ult (i8* @X, i8* @Y), i1 true)
|
||||
; CHECK: @M = global i1 icmp uge (i8* @X, i8* @Y) ; <i1*> [#uses=0]
|
||||
@N = global i1 icmp ne (i1 icmp ult (i8* @X, i8* @Y), i1 false)
|
||||
; CHECK: @N = global i1 icmp ult (i8* @X, i8* @Y) ; <i1*> [#uses=0]
|
||||
|
Loading…
Reference in New Issue
Block a user