[PATCH] D44971: [RISCV] Override fixupNeedsRelaxationAdvanced to avoid MC relaxation always promote to 32-bit form when -mrelax enabled
Sameer AbuAsal via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 28 11:34:50 PDT 2018
sabuasal added inline comments.
================
Comment at: test/MC/RISCV/relocations.s:93
c.jal foo
+# RELOC: R_RISCV_RVC_JUMP
----------------
Hi Shiva,
I noticed that gcc-as will relax jumps to unresolved symbols. only generates rvc-jump for resolved ones.
>echo "c.jal foo" | riscv32-unknown-linux-gnu-as -march=rv32imc -o ./a.out && riscv32-unknown-linux-gnu-objdump -M no-aliases -dr ./a.out
>00000000 <.text>:
> 0: 000000ef jal ra,0x0
> 0: R_RISCV_JAL foo
>echo "foo: nop; jal foo" | riscv32-unknown-linux-gnu-as -march rv32imc -o ./a.out && riscv32-unknown-linux-gnu-> objdump -d -r -M no-aliases ./a.out
> 0: 0001 c.addi zero,0
> 2: 3ffd c.jal 0 <foo>
> 2: R_RISCV_RVC_JUMP foo
We can still maintain this behavior by checking the "Fixup" kind and "resolved" in fixupNeedsRelaxationAdvanced. However, this is a better code size optimization I think if the c.jal target appears to be within reach during linking.
@asb
What do you think?
Repository:
rL LLVM
https://reviews.llvm.org/D44971
More information about the llvm-commits
mailing list