mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-19 19:31:50 +00:00
ConstantFoldInstOperands doesn't like compares, hand it off to instsimplify instead.
Fixes PR10040. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132254 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d7c1086201
commit
2c5cc68874
@ -298,6 +298,16 @@ static Value *SimplifyWithOpReplaced(Value *V, Value *Op, Value *RepOp,
|
||||
return SimplifyBinOp(B->getOpcode(), B->getOperand(0), RepOp, TD);
|
||||
}
|
||||
|
||||
// Same for CmpInsts.
|
||||
if (CmpInst *C = dyn_cast<CmpInst>(I)) {
|
||||
if (C->getOperand(0) == Op)
|
||||
return SimplifyCmpInst(C->getPredicate(), RepOp, C->getOperand(1), TD);
|
||||
if (C->getOperand(1) == Op)
|
||||
return SimplifyCmpInst(C->getPredicate(), C->getOperand(0), RepOp, TD);
|
||||
}
|
||||
|
||||
// TODO: We could hand off more cases to instsimplify here.
|
||||
|
||||
// If all operands are constant after substituting Op for RepOp then we can
|
||||
// constant fold the instruction.
|
||||
if (Constant *CRepOp = dyn_cast<Constant>(RepOp)) {
|
||||
|
@ -789,3 +789,13 @@ define i32 @test59(i32 %x, i32 %y) nounwind {
|
||||
; CHECK-NEXT: and i32 %x, %y
|
||||
; CHECK-NEXT: ret
|
||||
}
|
||||
|
||||
define i1 @test60(i32 %x, i1* %y) nounwind {
|
||||
%cmp = icmp eq i32 %x, 0
|
||||
%load = load i1* %y, align 1
|
||||
%cmp1 = icmp slt i32 %x, 1
|
||||
%sel = select i1 %cmp, i1 %load, i1 %cmp1
|
||||
ret i1 %sel
|
||||
; CHECK: @test60
|
||||
; CHECK: select
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user