mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Fix another case where we were preferring instructions with large
immediates instead of 8 bits ones. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116410 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e98fbba91f
commit
6d8628061b
@ -1052,33 +1052,37 @@ def ADD32rr_DB : I<0, Pseudo, (outs GR32:$dst), (ins GR32:$src1, GR32:$src2),
|
||||
def ADD64rr_DB : I<0, Pseudo, (outs GR64:$dst), (ins GR64:$src1, GR64:$src2),
|
||||
"", // orq/addq REG, REG
|
||||
[(set GR64:$dst, (or_is_add GR64:$src1, GR64:$src2))]>;
|
||||
|
||||
|
||||
def ADD16ri_DB : I<0, Pseudo, (outs GR16:$dst), (ins GR16:$src1, i16imm:$src2),
|
||||
"", // orw/addw REG, imm
|
||||
[(set GR16:$dst, (or_is_add GR16:$src1, imm:$src2))]>;
|
||||
def ADD32ri_DB : I<0, Pseudo, (outs GR32:$dst), (ins GR32:$src1, i32imm:$src2),
|
||||
"", // orl/addl REG, imm
|
||||
[(set GR32:$dst, (or_is_add GR32:$src1, imm:$src2))]>;
|
||||
def ADD64ri32_DB : I<0, Pseudo,
|
||||
(outs GR64:$dst), (ins GR64:$src1, i64i32imm:$src2),
|
||||
"", // orq/addq REG, imm
|
||||
[(set GR64:$dst, (or_is_add GR64:$src1,
|
||||
i64immSExt32:$src2))]>;
|
||||
|
||||
|
||||
// NOTE: These are order specific, we want the ri8 forms to be listed
|
||||
// first so that they are slightly preferred to the ri forms.
|
||||
|
||||
def ADD16ri8_DB : I<0, Pseudo,
|
||||
(outs GR16:$dst), (ins GR16:$src1, i16i8imm:$src2),
|
||||
"", // orw/addw REG, imm8
|
||||
[(set GR16:$dst,(or_is_add GR16:$src1,i16immSExt8:$src2))]>;
|
||||
def ADD16ri_DB : I<0, Pseudo, (outs GR16:$dst), (ins GR16:$src1, i16imm:$src2),
|
||||
"", // orw/addw REG, imm
|
||||
[(set GR16:$dst, (or_is_add GR16:$src1, imm:$src2))]>;
|
||||
|
||||
def ADD32ri8_DB : I<0, Pseudo,
|
||||
(outs GR32:$dst), (ins GR32:$src1, i32i8imm:$src2),
|
||||
"", // orl/addl REG, imm8
|
||||
[(set GR32:$dst,(or_is_add GR32:$src1,i32immSExt8:$src2))]>;
|
||||
def ADD32ri_DB : I<0, Pseudo, (outs GR32:$dst), (ins GR32:$src1, i32imm:$src2),
|
||||
"", // orl/addl REG, imm
|
||||
[(set GR32:$dst, (or_is_add GR32:$src1, imm:$src2))]>;
|
||||
|
||||
|
||||
def ADD64ri8_DB : I<0, Pseudo,
|
||||
(outs GR64:$dst), (ins GR64:$src1, i64i8imm:$src2),
|
||||
"", // orq/addq REG, imm8
|
||||
[(set GR64:$dst, (or_is_add GR64:$src1,
|
||||
i64immSExt8:$src2))]>;
|
||||
def ADD64ri32_DB : I<0, Pseudo,
|
||||
(outs GR64:$dst), (ins GR64:$src1, i64i32imm:$src2),
|
||||
"", // orq/addq REG, imm
|
||||
[(set GR64:$dst, (or_is_add GR64:$src1,
|
||||
i64immSExt32:$src2))]>;
|
||||
}
|
||||
} // AddedComplexity
|
||||
|
||||
|
@ -8,3 +8,12 @@ define i64 @bra(i32 %zed) nounwind {
|
||||
%t2 = and i64 %t1, 4294967232
|
||||
ret i64 %t2
|
||||
}
|
||||
|
||||
; CHECK: orq $2, %rdi # encoding: [0x48,0x83,0xcf,0x02]
|
||||
|
||||
define void @foo(i64 %zed, i64* %x) nounwind {
|
||||
%t1 = and i64 %zed, -4
|
||||
%t2 = or i64 %t1, 2
|
||||
store i64 %t2, i64* %x, align 8
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user