Skip to content

Commit bafff3e

Browse files
authored
[RISCV][MC] Implicit 0-offset aliases for JR/JALR (#94688)
This broadly follows how in almost all places, we accept `(<reg>)` to mean `0(<reg>)`, but I think these are the first like this for Jumps rather than Loads/Stores. These are accepted by binutils but not by LLVM: https://godbolt.org/z/GK7MGE7q7
1 parent c8992fb commit bafff3e

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfo.td

+3
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,9 @@ def : InstAlias<"ret", (JALR X0, X1, 0), 4>;
943943
def : InstAlias<"jr $rs, $offset", (JALR X0, GPR:$rs, simm12:$offset), 0>;
944944
def : InstAlias<"jalr $rs, $offset", (JALR X1, GPR:$rs, simm12:$offset), 0>;
945945
def : InstAlias<"jalr $rd, $rs, $offset", (JALR GPR:$rd, GPR:$rs, simm12:$offset), 0>;
946+
def : InstAlias<"jr (${rs})", (JALR X0, GPR:$rs, 0), 0>;
947+
def : InstAlias<"jalr (${rs})", (JALR X1, GPR:$rs, 0), 0>;
948+
def : InstAlias<"jalr $rd, (${rs})", (JALR GPR:$rd, GPR:$rs, 0), 0>;
946949

947950
def : InstAlias<"fence", (FENCE 0xF, 0xF)>; // 0xF == iorw
948951

llvm/test/MC/RISCV/rvi-aliases-valid.s

+10
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,16 @@ jalr x25, x26, 11
190190
# CHECK-S-OBJ-NOALIAS: jalr zero, 0(ra)
191191
# CHECK-S-OBJ: ret
192192
ret
193+
# CHECK-S-OBJ-NOALIAS: jalr zero, 0(s11)
194+
# CHECK-S-OBJ: jr s11
195+
jr (x27)
196+
# CHECK-S-OBJ-NOALIAS: jalr ra, 0(t3)
197+
# CHECK-S-OBJ: jalr t3
198+
jalr (x28)
199+
# CHECK-S-OBJ-NOALIAS: jalr t4, 0(t5)
200+
# CHECK-S-OBJ: jalr t4, t5
201+
jalr x29, (x30)
202+
193203
# TODO call
194204
# TODO tail
195205

0 commit comments

Comments
 (0)