Skip to content

Commit 07d1996

Browse files
committed
[VE] Support register aliases in llvm-mc
Support register aliases in MC layer to compile existing assembly files with clang and integrated assembler. Reviewed By: simoll Differential Revision: https://reviews.llvm.org/D90383
1 parent 1ce5f8b commit 07d1996

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

llvm/lib/Target/VE/VERegisterInfo.td

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,21 @@ foreach I = 0-63 in
112112
DwarfRegNum<[I]>;
113113

114114
// Generic integer registers - 64 bits wide
115-
let SubRegIndices = [sub_i32, sub_f32], CoveredBySubRegs = 1 in
116-
foreach I = 0-63 in
117-
def SX#I : VEReg<I, "s"#I, [!cast<VEReg>("SW"#I), !cast<VEReg>("SF"#I)],
118-
["s"#I]>, DwarfRegNum<[I]>;
115+
let SubRegIndices = [sub_i32, sub_f32], CoveredBySubRegs = 1 in {
116+
// Several registers have specific names, so add them to one of aliases.
117+
def SX8 : VEReg<8, "s8", [SW8, SF8], ["s8", "sl"]>, DwarfRegNum<[8]>;
118+
def SX9 : VEReg<9, "s9", [SW9, SF9], ["s9", "fp"]>, DwarfRegNum<[9]>;
119+
def SX10 : VEReg<10, "s10", [SW10, SF10], ["s10", "lr"]>, DwarfRegNum<[10]>;
120+
def SX11 : VEReg<11, "s11", [SW11, SF11], ["s11", "sp"]>, DwarfRegNum<[11]>;
121+
def SX14 : VEReg<14, "s14", [SW14, SF14], ["s14", "tp"]>, DwarfRegNum<[14]>;
122+
def SX15 : VEReg<15, "s15", [SW15, SF15], ["s15", "got"]>, DwarfRegNum<[15]>;
123+
def SX16 : VEReg<16, "s16", [SW16, SF16], ["s16", "plt"]>, DwarfRegNum<[16]>;
124+
125+
// Other generic registers.
126+
foreach I = { 0-7, 12-13, 17-63 } in
127+
def SX#I : VEReg<I, "s"#I, [!cast<VEReg>("SW"#I), !cast<VEReg>("SF"#I)],
128+
["s"#I]>, DwarfRegNum<[I]>;
129+
}
119130

120131
// Aliases of the S* registers used to hold 128-bit for values (long doubles).
121132
// Following foreach represents something like:

llvm/test/MC/VE/register.s

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# RUN: llvm-mc -triple=ve %s -o - | FileCheck %s
2+
# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
3+
# RUN: | FileCheck %s --check-prefixes=CHECK-INST
4+
5+
### Test registers with specific names like "%sp"
6+
7+
subu.l %fp, %sp, %s0
8+
brge.l.t %sp, %sl, 1f
9+
ld %s63, 0x18(,%tp)
10+
1:
11+
or %got, 0, %plt
12+
b.l (,%lr)
13+
14+
15+
# CHECK: subu.l %s9, %s11, %s0
16+
# CHECK-NEXT: brge.l.t %s11, %s8, .Ltmp0
17+
# CHECK-NEXT: ld %s63, 24(, %s14)
18+
# CHECK-NEXT: .Ltmp0:
19+
# CHECK-NEXT: or %s15, 0, %s16
20+
# CHECK-NEXT: b.l (, %s10)
21+
22+
# CHECK-INST: subu.l %s9, %s11, %s0
23+
# CHECK-INST-NEXT: brge.l.t %s11, %s8, 16
24+
# CHECK-INST-NEXT: ld %s63, 24(, %s14)
25+
# CHECK-INST-NEXT: or %s15, 0, %s16
26+
# CHECK-INST-NEXT: b.l (, %s10)

0 commit comments

Comments
 (0)