| # RUN: not llvm-mc -filetype=obj -triple=riscv32 -mattr=+relax %s 2>&1 \ |
| # RUN: | FileCheck %s -check-prefix=CHECK-RELAX |
| # RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=-relax %s 2>&1 \ |
| # RUN: | llvm-objdump -d - | FileCheck %s -check-prefix=CHECK-INSTR |
| # RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=-relax %s 2>&1 \ |
| # RUN: | llvm-objdump -r - | FileCheck %s -check-prefix=CHECK-REL |
| |
| # Check the assembler rejects hi and lo expressions with constant expressions |
| # involving labels when diff expressions are emitted as relocation pairs. |
| # Test case derived from test/MC/Mips/hilo-addressing.s |
| |
| tmp1: |
| # Emit zeros so that difference between tmp1 and tmp3 is 0x30124 bytes. |
| .fill 0x30124-8 |
| tmp2: |
| # CHECK-RELAX: :[[@LINE+1]]:{{[0-9]+}}: error: expected relocatable expression |
| lui t0, %hi(tmp3-tmp1) |
| # CHECK-RELAX: :[[@LINE+1]]:{{[0-9]+}}: error: expected relocatable expression |
| lw ra, %lo(tmp3-tmp1)(t0) |
| # CHECK-INSTR: lui t0, 48 |
| # CHECK-INSTR: lw ra, 292(t0) |
| |
| tmp3: |
| # CHECK-RELAX: :[[@LINE+1]]:{{[0-9]+}}: error: expected relocatable expression |
| lui t1, %hi(tmp2-tmp3) |
| # CHECK-RELAX: :[[@LINE+1]]:{{[0-9]+}}: error: expected relocatable expression |
| lw sp, %lo(tmp2-tmp3)(t1) |
| # CHECK-INSTR: lui t1, 0 |
| # CHECK-INSTR: lw sp, -8(t1) |
| |
| # CHECK-REL-NOT: R_RISCV |