
In #67707, the minimum function alignment on RISC-V was set to 4. When RVC (compressed instructions) is enabled, the minimum alignment can be reduced to 2. This patch implements this by delegating the choice of minimum alignment to a new `MCPlusBuilder::getMinFunctionAlignment` function. This way, the target-dependent code in `BinaryFunction` is minimized.
39 lines
1.0 KiB
ArmAsm
39 lines
1.0 KiB
ArmAsm
## Test that BOLT uses a minimum function alignment of 4 (or 2 for RVC) bytes.
|
|
|
|
# RUN: llvm-mc -triple=riscv64 -filetype=obj -o %t.o %s
|
|
# RUN: ld.lld -q -o %t %t.o
|
|
# RUN: llvm-bolt --align-functions=1 --use-old-text=0 -o %t.bolt %t
|
|
# RUN: llvm-nm -n %t.bolt | FileCheck %s
|
|
|
|
# RUN: llvm-mc -triple=riscv64 -mattr=+c -filetype=obj -o %t-c.o %s
|
|
# RUN: ld.lld -q -o %t-c %t-c.o
|
|
# RUN: llvm-bolt --align-functions=1 --use-old-text=0 -o %t-c.bolt %t-c
|
|
# RUN: llvm-nm -n %t-c.bolt | FileCheck --check-prefix=CHECK-C %s
|
|
|
|
# CHECK: {{[048c]}} T _start
|
|
# CHECK-NEXT: {{[048c]}} T dummy
|
|
|
|
# CHECK-C: {{[02468ace]}} T _start
|
|
# CHECK-C-NEXT: {{[02468ace]}} T dummy
|
|
|
|
.text
|
|
|
|
# Make sure input binary is only 1 byte aligned. BOLT should increase the
|
|
# alignment to 2 or 4 bytes.
|
|
.byte 0
|
|
.balign 1
|
|
|
|
.globl _start
|
|
.type _start, @function
|
|
_start:
|
|
# Dummy reloc to force relocation mode.
|
|
.reloc 0, R_RISCV_NONE
|
|
ret
|
|
.size _start, .-_start
|
|
|
|
.globl dummy
|
|
.type dummy, @function
|
|
dummy:
|
|
ret
|
|
.size dummy, .-dummy
|