mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-07 01:38:26 +00:00
Make ARM add rN, sp, #imm instructions rematerializable. That's how the address of locals is calculated, so this should
help relieve register pressure a bit. Recalculating the local address is almost always going to be better than spilling. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112503 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
753f3265da
commit
663e339e20
@ -452,11 +452,15 @@ include "ARMInstrFormats.td"
|
||||
/// binop that produces a value.
|
||||
multiclass AsI1_bin_irs<bits<4> opcod, string opc, PatFrag opnode,
|
||||
bit Commutable = 0> {
|
||||
// The register-immediate version is re-materializable. This is useful
|
||||
// in particular for taking the address of a local.
|
||||
let isReMaterializable = 1 in {
|
||||
def ri : AsI1<opcod, (outs GPR:$dst), (ins GPR:$a, so_imm:$b), DPFrm,
|
||||
IIC_iALUi, opc, "\t$dst, $a, $b",
|
||||
[(set GPR:$dst, (opnode GPR:$a, so_imm:$b))]> {
|
||||
let Inst{25} = 1;
|
||||
}
|
||||
}
|
||||
def rr : AsI1<opcod, (outs GPR:$dst), (ins GPR:$a, GPR:$b), DPFrm,
|
||||
IIC_iALUr, opc, "\t$dst, $a, $b",
|
||||
[(set GPR:$dst, (opnode GPR:$a, GPR:$b))]> {
|
||||
|
@ -221,9 +221,13 @@ def tADDrPCi : T1I<(outs tGPR:$dst), (ins t_imm_s4:$rhs), IIC_iALUi,
|
||||
T1Encoding<{1,0,1,0,0,?}>; // A6.2 & A8.6.10
|
||||
|
||||
// ADD rd, sp, #imm8
|
||||
// This is rematerializable, which is particularly useful for taking the
|
||||
// address of locals.
|
||||
let isReMaterializable = 1 in {
|
||||
def tADDrSPi : T1I<(outs tGPR:$dst), (ins GPR:$sp, t_imm_s4:$rhs), IIC_iALUi,
|
||||
"add\t$dst, $sp, $rhs", []>,
|
||||
T1Encoding<{1,0,1,0,1,?}>; // A6.2 & A8.6.8
|
||||
}
|
||||
|
||||
// ADD sp, sp, #imm7
|
||||
def tADDspi : TIt<(outs GPR:$dst), (ins GPR:$lhs, t_imm_s4:$rhs), IIC_iALUi,
|
||||
|
@ -382,6 +382,9 @@ multiclass T2I_bin_s_irs<bits<4> opcod, string opc, PatFrag opnode,
|
||||
multiclass T2I_bin_ii12rs<bits<3> op23_21, string opc, PatFrag opnode,
|
||||
bit Commutable = 0> {
|
||||
// shifted imm
|
||||
// The register-immediate version is re-materializable. This is useful
|
||||
// in particular for taking the address of a local.
|
||||
let isReMaterializable = 1 in {
|
||||
def ri : T2sI<(outs rGPR:$dst), (ins GPR:$lhs, t2_so_imm:$rhs), IIC_iALUi,
|
||||
opc, ".w\t$dst, $lhs, $rhs",
|
||||
[(set rGPR:$dst, (opnode GPR:$lhs, t2_so_imm:$rhs))]> {
|
||||
@ -392,6 +395,7 @@ multiclass T2I_bin_ii12rs<bits<3> op23_21, string opc, PatFrag opnode,
|
||||
let Inst{20} = 0; // The S bit.
|
||||
let Inst{15} = 0;
|
||||
}
|
||||
}
|
||||
// 12-bit imm
|
||||
def ri12 : T2I<(outs rGPR:$dst), (ins GPR:$lhs, imm0_4095:$rhs), IIC_iALUi,
|
||||
!strconcat(opc, "w"), "\t$dst, $lhs, $rhs",
|
||||
|
Loading…
x
Reference in New Issue
Block a user