From 53edb1a1601a13fc12666c2d7efdf0f3a684f2b4 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 21 May 2025 22:08:55 -0700 Subject: [PATCH] [test] Improve linker-relaxable fixups tests The behavior will change once the assembler improves (#140692) --- .../CodeGen/RISCV/option-relax-relocation.ll | 12 +++++++-- llvm/test/MC/RISCV/fixups-binary-expression.s | 22 +++++++++++----- llvm/test/MC/RISCV/long-conditional-jump.s | 3 ++- llvm/test/MC/RISCV/rv32-relaxation.s | 26 ++++++++++--------- llvm/test/MC/RISCV/rv64-relaxation.s | 22 +++++++++------- 5 files changed, 55 insertions(+), 30 deletions(-) diff --git a/llvm/test/CodeGen/RISCV/option-relax-relocation.ll b/llvm/test/CodeGen/RISCV/option-relax-relocation.ll index 3dc5aa64bb36..64e81048a955 100644 --- a/llvm/test/CodeGen/RISCV/option-relax-relocation.ll +++ b/llvm/test/CodeGen/RISCV/option-relax-relocation.ll @@ -2,7 +2,7 @@ ;; after linker relaxation. See https://github.com/ClangBuiltLinux/linux/issues/1965 ; RUN: llc -mtriple=riscv64 -mattr=-relax -filetype=obj < %s \ -; RUN: | llvm-objdump -d -r - | FileCheck %s +; RUN: | llvm-objdump -d -r - | FileCheck %s --check-prefixes=CHECK,NORELAX ; RUN: llc -mtriple=riscv64 -mattr=+relax -filetype=obj < %s \ ; RUN: | llvm-objdump -d -r - | FileCheck %s --check-prefixes=CHECK,RELAX @@ -12,14 +12,22 @@ ; CHECK-NEXT: R_RISCV_CALL_PLT f ; RELAX-NEXT: R_RISCV_RELAX *ABS* ; CHECK-NEXT: jalr ra +; CHECK-NEXT: j {{.*}} +; RELAX-NEXT: R_RISCV_JAL .LBB0_{{.*}} +; CHECK-NEXT: j {{.*}} +; RELAX-NEXT: R_RISCV_JAL .L0 +; NORELAX-NEXT: li a0, 0x0 +; RELAX-EMPTY: define dso_local noundef signext i32 @main() local_unnamed_addr #0 { entry: - callbr void asm sideeffect ".option push\0A.option norvc\0A.option norelax\0Aj $0\0A.option pop\0A", "!i"() #2 + callbr void asm sideeffect ".option push\0A.option norelax\0Aj $0\0A.option pop\0A", "!i"() to label %asm.fallthrough [label %label] asm.fallthrough: ; preds = %entry tail call void @f() + callbr void asm sideeffect ".option push\0A.option norelax\0Aj $0\0A.option pop\0A", "!i"() + to label %asm.fallthrough [label %label] br label %label label: ; preds = %asm.fallthrough, %entry diff --git a/llvm/test/MC/RISCV/fixups-binary-expression.s b/llvm/test/MC/RISCV/fixups-binary-expression.s index 457d44968fd6..3d1f72ffd46b 100644 --- a/llvm/test/MC/RISCV/fixups-binary-expression.s +++ b/llvm/test/MC/RISCV/fixups-binary-expression.s @@ -1,5 +1,5 @@ # RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+c < %s \ -# RUN: | llvm-objdump -M no-aliases -d - \ +# RUN: | llvm-objdump -M no-aliases -dr - \ # RUN: | FileCheck -check-prefix=CHECK-INSTR %s # RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+c,+relax < %s \ # RUN: | llvm-readobj -r - | FileCheck -check-prefix=CHECK-RELOC %s @@ -8,18 +8,28 @@ .LBB1: +## This is linker-relaxable to avoid resolving the following fixups +call relax + jal zero, .LBB0+16 # CHECK-INSTR: jal zero, 0x10 # CHECK-RELOC: R_RISCV_JAL beq a0, a1, .LBB1+32 # CHECK-INSTR: beq a0, a1, 0x20 -# CHECK-RELOC: R_RISCV_BRANCH +# CHECK-RELOC-NEXT: R_RISCV_BRANCH c.j .+32 -# CHECK-INSTR: c.j 0x28 -# CHECK-RELOC: R_RISCV_RVC_JUMP +# CHECK-INSTR: c.j 0x30 +# CHECK-RELOC-NEXT: R_RISCV_RVC_JUMP + +c.j .LBB2+4 +# CHECK-INSTR: c.j 0x22 +# CHECK-RELOC-NEXT: R_RISCV_RVC_JUMP c.beqz a0, .-2 -# CHECK-INSTR: c.beqz a0, 0x8 -# CHECK-RELOC: R_RISCV_RVC_BRANCH +# CHECK-INSTR: c.beqz a0, 0x12 +# CHECK-RELOC-NEXT: R_RISCV_RVC_BRANCH + +call relax +.LBB2: diff --git a/llvm/test/MC/RISCV/long-conditional-jump.s b/llvm/test/MC/RISCV/long-conditional-jump.s index 6c068e86ad48..c48cf4f04541 100644 --- a/llvm/test/MC/RISCV/long-conditional-jump.s +++ b/llvm/test/MC/RISCV/long-conditional-jump.s @@ -25,7 +25,8 @@ test: # CHECK-INST-C-RELAX-NEXT: jal zero, {{.*}} # CHECK-INST-C-RELAX-NEXT: R_RISCV_JAL .L1 bne a0, a1, .L1 -.fill 1300, 4, 0 + call relax +.fill 1300-2, 4, 0 .L1: ret # CHECK-INST: bne a0, a1, 0x1464 diff --git a/llvm/test/MC/RISCV/rv32-relaxation.s b/llvm/test/MC/RISCV/rv32-relaxation.s index 1a5da352aa2b..b43be47471f5 100644 --- a/llvm/test/MC/RISCV/rv32-relaxation.s +++ b/llvm/test/MC/RISCV/rv32-relaxation.s @@ -15,10 +15,11 @@ FAR_BRANCH_NEGATIVE: NEAR_NEGATIVE: c.nop + call relax start: c.bnez a0, NEAR -#INSTR: c.bnez a0, 0x91e +#INSTR: c.bnez a0, 0x92e #RELAX-INSTR: c.bnez a0, 0 #RELAX-RELOC: R_RISCV_RVC_BRANCH c.bnez a0, NEAR_NEGATIVE @@ -26,7 +27,7 @@ start: #RELAX-INSTR: c.bnez a0, 0 #RELAX-RELOC: R_RISCV_RVC_BRANCH c.bnez a0, FAR_BRANCH -#INSTR-NEXT: bne a0, zero, 0xa20 +#INSTR-NEXT: bne a0, zero, 0xa30 #RELAX-INSTR-NEXT: bne a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.bnez a0, FAR_BRANCH_NEGATIVE @@ -34,7 +35,7 @@ start: #RELAX-INSTR-NEXT: bne a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.bnez a0, FAR_JUMP -#INSTR-NEXT: bne a0, zero, 0x11f2 +#INSTR-NEXT: bne a0, zero, 0x1202 #RELAX-INSTR-NEXT: bne a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.bnez a0, FAR_JUMP_NEGATIVE @@ -43,7 +44,7 @@ start: #RELAX-RELOC: R_RISCV_BRANCH c.beqz a0, NEAR -#INSTR-NEXT: c.beqz a0, 0x91e +#INSTR-NEXT: c.beqz a0, 0x92e #RELAX-INSTR-NEXT: c.beqz a0, 0 #RELAX-RELOC: R_RISCV_RVC_BRANCH c.beqz a0, NEAR_NEGATIVE @@ -51,7 +52,7 @@ start: #RELAX-INSTR-NEXT: c.beqz a0, 0 #RELAX-RELOC: R_RISCV_RVC_BRANCH c.beqz a0, FAR_BRANCH -#INSTR-NEXT: beq a0, zero, 0xa20 +#INSTR-NEXT: beq a0, zero, 0xa30 #RELAX-INSTR-NEXT: beq a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.beqz a0, FAR_BRANCH_NEGATIVE @@ -59,7 +60,7 @@ start: #RELAX-INSTR-NEXT: beq a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.beqz a0, FAR_JUMP -#INSTR-NEXT: beq a0, zero, 0x11f2 +#INSTR-NEXT: beq a0, zero, 0x1202 #RELAX-INSTR-NEXT: beq a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.beqz a0, FAR_JUMP_NEGATIVE @@ -68,7 +69,7 @@ start: #RELAX-RELOC: R_RISCV_BRANCH c.j NEAR -#INSTR-NEXT: c.j 0x91e +#INSTR-NEXT: c.j 0x92e #RELAX-INSTR-NEXT: c.j 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.j NEAR_NEGATIVE @@ -76,7 +77,7 @@ start: #RELAX-INSTR-NEXT: c.j 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.j FAR_BRANCH -#INSTR-NEXT: c.j 0xa20 +#INSTR-NEXT: c.j 0xa30 #RELAX-INSTR-NEXT: c.j 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.j FAR_BRANCH_NEGATIVE @@ -84,7 +85,7 @@ start: #RELAX-INSTR-NEXT: c.j 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.j FAR_JUMP -#INSTR-NEXT: jal zero, 0x11f2 +#INSTR-NEXT: jal zero, 0x1202 #RELAX-INSTR-NEXT: jal zero, 0 #RELAX-RELOC: R_RISCV_JAL c.j FAR_JUMP_NEGATIVE @@ -93,7 +94,7 @@ start: #RELAX-RELOC: R_RISCV_JAL c.jal NEAR -#INSTR: c.jal 0x91e +#INSTR: c.jal 0x92e #RELAX-INSTR: c.jal 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.jal NEAR_NEGATIVE @@ -101,7 +102,7 @@ start: #RELAX-INSTR: c.jal 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.jal FAR_BRANCH -#INSTR-NEXT: c.jal 0xa20 +#INSTR-NEXT: c.jal 0xa30 #RELAX-INSTR-NEXT: c.jal 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.jal FAR_BRANCH_NEGATIVE @@ -109,7 +110,7 @@ start: #RELAX-INSTR-NEXT: c.jal 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.jal FAR_JUMP -#INSTR-NEXT: jal ra, 0x11f2 +#INSTR-NEXT: jal ra, 0x1202 #RELAX-INSTR-NEXT: jal ra, 0 #RELAX-RELOC: R_RISCV_JAL c.jal FAR_JUMP_NEGATIVE @@ -117,6 +118,7 @@ start: #RELAX-INSTR-NEXT: jal ra, 0 #RELAX-RELOC: R_RISCV_JAL + call relax NEAR: c.nop .space 256 diff --git a/llvm/test/MC/RISCV/rv64-relaxation.s b/llvm/test/MC/RISCV/rv64-relaxation.s index e71cf20a6413..a949f6cf4842 100644 --- a/llvm/test/MC/RISCV/rv64-relaxation.s +++ b/llvm/test/MC/RISCV/rv64-relaxation.s @@ -16,9 +16,11 @@ FAR_BRANCH_NEGATIVE: NEAR_NEGATIVE: c.nop + call relax + start: c.bnez a0, NEAR -#INSTR: c.bnez a0, 0x90e +#INSTR: c.bnez a0, 0x92e #RELAX-INSTR: c.bnez a0, 0 #RELAX-RELOC: R_RISCV_RVC_BRANCH c.bnez a0, NEAR_NEGATIVE @@ -26,7 +28,7 @@ start: #RELAX-INSTR: c.bnez a0, 0 #RELAX-RELOC: R_RISCV_RVC_BRANCH c.bnez a0, FAR_BRANCH -#INSTR-NEXT: bne a0, zero, 0xa10 +#INSTR-NEXT: bne a0, zero, 0xa30 #RELAX-INSTR-NEXT: bne a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.bnez a0, FAR_BRANCH_NEGATIVE @@ -34,7 +36,7 @@ start: #RELAX-INSTR-NEXT: bne a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.bnez a0, FAR_JUMP -#INSTR-NEXT: bne a0, zero, 0x11e2 +#INSTR-NEXT: bne a0, zero, 0x1202 #RELAX-INSTR-NEXT: bne a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.bnez a0, FAR_JUMP_NEGATIVE @@ -43,7 +45,7 @@ start: #RELAX-RELOC: R_RISCV_BRANCH c.beqz a0, NEAR -#INSTR-NEXT: c.beqz a0, 0x90e +#INSTR-NEXT: c.beqz a0, 0x92e #RELAX-INSTR-NEXT: c.beqz a0, 0 #RELAX-RELOC: R_RISCV_RVC_BRANCH c.beqz a0, NEAR_NEGATIVE @@ -51,7 +53,7 @@ start: #RELAX-INSTR-NEXT: c.beqz a0, 0 #RELAX-RELOC: R_RISCV_RVC_BRANCH c.beqz a0, FAR_BRANCH -#INSTR-NEXT: beq a0, zero, 0xa10 +#INSTR-NEXT: beq a0, zero, 0xa30 #RELAX-INSTR-NEXT: beq a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.beqz a0, FAR_BRANCH_NEGATIVE @@ -59,7 +61,7 @@ start: #RELAX-INSTR-NEXT: beq a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.beqz a0, FAR_JUMP -#INSTR-NEXT: beq a0, zero, 0x11e2 +#INSTR-NEXT: beq a0, zero, 0x1202 #RELAX-INSTR-NEXT: beq a0, zero, 0 #RELAX-RELOC: R_RISCV_BRANCH c.beqz a0, FAR_JUMP_NEGATIVE @@ -68,7 +70,7 @@ start: #RELAX-RELOC: R_RISCV_BRANCH c.j NEAR -#INSTR-NEXT: c.j 0x90e +#INSTR-NEXT: c.j 0x92e #RELAX-INSTR-NEXT: c.j 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.j NEAR_NEGATIVE @@ -76,7 +78,7 @@ start: #RELAX-INSTR-NEXT: c.j 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.j FAR_BRANCH -#INSTR-NEXT: c.j 0xa10 +#INSTR-NEXT: c.j 0xa30 #RELAX-INSTR-NEXT: c.j 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.j FAR_BRANCH_NEGATIVE @@ -84,7 +86,7 @@ start: #RELAX-INSTR-NEXT: c.j 0 #RELAX-RELOC: R_RISCV_RVC_JUMP c.j FAR_JUMP -#INSTR-NEXT: jal zero, 0x11e2 +#INSTR-NEXT: jal zero, 0x1202 #RELAX-INSTR-NEXT: jal zero, 0 #RELAX-RELOC: R_RISCV_JAL c.j FAR_JUMP_NEGATIVE @@ -92,6 +94,8 @@ start: #RELAX-INSTR-NEXT: jal zero, 0 #RELAX-RELOC: R_RISCV_JAL + .space 16 + call relax NEAR: c.nop