forked from OSchip/llvm-project
Since we have moved unified assembly, switch to ADR instruction instead of a the difficult-to-read .set + add syntax to materialize pc-relative address.
Turns out this also fixed a poor code selection on Thumb1. I have no idea why we were using a mov + add to do the same thing as ADR before. llvm-svn: 76889
This commit is contained in:
parent
5bf72e20eb
commit
95a73e2eab
|
@ -552,22 +552,11 @@ let usesCustomDAGSchedInserter = 1 in // Expanded by the scheduler.
|
|||
|
||||
// tLEApcrel - Load a pc-relative address into a register without offending the
|
||||
// assembler.
|
||||
let Defs = [CPSR] in {
|
||||
def tLEApcrel : T1Ix2<(outs tGPR:$dst), (ins i32imm:$label),
|
||||
!strconcat(!strconcat(".set ${:private}PCRELV${:uid}, ($label-(",
|
||||
"${:private}PCRELL${:uid}+4))\n"),
|
||||
!strconcat("\tmovs $dst, #${:private}PCRELV${:uid}\n",
|
||||
"${:private}PCRELL${:uid}:\n\tadd $dst, pc")),
|
||||
[]>;
|
||||
def tLEApcrel : T1I<(outs tGPR:$dst), (ins i32imm:$label),
|
||||
"adr $dst, #$label", []>;
|
||||
|
||||
def tLEApcrelJT : T1Ix2<(outs tGPR:$dst), (ins i32imm:$label, i32imm:$id),
|
||||
!strconcat(!strconcat(".set ${:private}PCRELV${:uid},"
|
||||
" (${label}_${id:no_hash}-(",
|
||||
"${:private}PCRELL${:uid}+4))\n"),
|
||||
!strconcat("\tmovs $dst, #${:private}PCRELV${:uid}\n",
|
||||
"${:private}PCRELL${:uid}:\n\tadd $dst, pc")),
|
||||
[]>;
|
||||
}
|
||||
def tLEApcrelJT : T1I<(outs tGPR:$dst), (ins i32imm:$label, i32imm:$id),
|
||||
"adr $dst, #${label}_${id:no_hash}", []>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// TLS Instructions
|
||||
|
|
|
@ -450,20 +450,11 @@ def t2PICADD : T2XI<(outs GPR:$dst), (ins GPR:$lhs, pclabel:$cp),
|
|||
// LEApcrel - Load a pc-relative address into a register without offending the
|
||||
// assembler.
|
||||
def t2LEApcrel : T2XI<(outs GPR:$dst), (ins i32imm:$label, pred:$p),
|
||||
!strconcat(!strconcat(".set ${:private}PCRELV${:uid}, ($label-(",
|
||||
"${:private}PCRELL${:uid}+8))\n"),
|
||||
!strconcat("${:private}PCRELL${:uid}:\n\t",
|
||||
"add$p $dst, pc, #${:private}PCRELV${:uid}")),
|
||||
[]>;
|
||||
"adr$p $dst, #$label", []>;
|
||||
|
||||
def t2LEApcrelJT : T2XI<(outs GPR:$dst),
|
||||
(ins i32imm:$label, i32imm:$id, pred:$p),
|
||||
!strconcat(!strconcat(".set ${:private}PCRELV${:uid},"
|
||||
" (${label}_${id:no_hash}-(",
|
||||
"${:private}PCRELL${:uid}+8))\n"),
|
||||
!strconcat("${:private}PCRELL${:uid}:\n\t",
|
||||
"add$p $dst, pc, #${:private}PCRELV${:uid}")),
|
||||
[]>;
|
||||
(ins i32imm:$label, i32imm:$id, pred:$p),
|
||||
"adr$p $dst, #${label}_${id:no_hash}", []>;
|
||||
|
||||
// ADD rd, sp, #so_imm
|
||||
def t2ADDrSPi : T2XI<(outs GPR:$dst), (ins GPR:$sp, t2_so_imm:$imm),
|
||||
|
|
Loading…
Reference in New Issue