Files
TheRock/compiler/amd-llvm/llvm/test/MC/RISCV/rvi-pseudos.s
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

238 lines
7.5 KiB
ArmAsm

# RUN: llvm-mc %s -triple=riscv32 \
# RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-NOPIC,CHECK-RV32
# RUN: llvm-mc %s -triple=riscv64 \
# RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-NOPIC,CHECK-RV64
# RUN: llvm-mc %s -triple=riscv32 -position-independent \
# RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-PIC,CHECK-RV32,CHECK-PIC-RV32
# RUN: llvm-mc %s -triple=riscv64 -position-independent \
# RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-PIC,CHECK-RV64,CHECK-PIC-RV64
# CHECK: .Lpcrel_hi0:
# CHECK: auipc a0, %pcrel_hi(a_symbol)
# CHECK: addi a0, a0, %pcrel_lo(.Lpcrel_hi0)
lla a0, a_symbol
# CHECK: .Lpcrel_hi1:
# CHECK: auipc a1, %pcrel_hi(another_symbol)
# CHECK: addi a1, a1, %pcrel_lo(.Lpcrel_hi1)
lla a1, another_symbol
# Check that we can load the address of symbols that are spelled like a register
# CHECK: .Lpcrel_hi2:
# CHECK: auipc a2, %pcrel_hi(zero)
# CHECK: addi a2, a2, %pcrel_lo(.Lpcrel_hi2)
lla a2, zero
# CHECK: .Lpcrel_hi3:
# CHECK: auipc a3, %pcrel_hi(ra)
# CHECK: addi a3, a3, %pcrel_lo(.Lpcrel_hi3)
lla a3, ra
# CHECK: .Lpcrel_hi4:
# CHECK: auipc a4, %pcrel_hi(f1)
# CHECK: addi a4, a4, %pcrel_lo(.Lpcrel_hi4)
lla a4, f1
# CHECK: .Lpcrel_hi5:
# CHECK: auipc a5, %pcrel_hi(a_symbol+2040)
# CHECK: addi a5, a5, %pcrel_lo(.Lpcrel_hi5)
lla a5, a_symbol + (0xFF << 3)
# CHECK: .Lpcrel_hi6:
# CHECK: auipc a0, %got_pcrel_hi(a_symbol)
# CHECK-RV32: lw a0, %pcrel_lo(.Lpcrel_hi6)(a0)
# CHECK-RV64: ld a0, %pcrel_lo(.Lpcrel_hi6)(a0)
lga a0, a_symbol
# CHECK: .Lpcrel_hi7:
# CHECK: auipc a1, %got_pcrel_hi(another_symbol)
# CHECK-RV32: lw a1, %pcrel_lo(.Lpcrel_hi7)(a1)
# CHECK-RV64: ld a1, %pcrel_lo(.Lpcrel_hi7)(a1)
lga a1, another_symbol
# CHECK: .Lpcrel_hi8:
# CHECK: auipc a2, %got_pcrel_hi(zero)
# CHECK-RV32: lw a2, %pcrel_lo(.Lpcrel_hi8)(a2)
# CHECK-RV64: ld a2, %pcrel_lo(.Lpcrel_hi8)(a2)
lga a2, zero
# CHECK: .Lpcrel_hi9:
# CHECK: auipc a3, %got_pcrel_hi(ra)
# CHECK-RV32: lw a3, %pcrel_lo(.Lpcrel_hi9)(a3)
# CHECK-RV64: ld a3, %pcrel_lo(.Lpcrel_hi9)(a3)
lga a3, ra
# CHECK: .Lpcrel_hi10:
# CHECK: auipc a4, %got_pcrel_hi(f1)
# CHECK-RV32: lw a4, %pcrel_lo(.Lpcrel_hi10)(a4)
# CHECK-RV64: ld a4, %pcrel_lo(.Lpcrel_hi10)(a4)
lga a4, f1
# CHECK: .Lpcrel_hi11:
# CHECK: auipc a5, %got_pcrel_hi(a_symbol+2040)
# CHECK-RV32: lw a5, %pcrel_lo(.Lpcrel_hi11)(a5)
# CHECK-RV64: ld a5, %pcrel_lo(.Lpcrel_hi11)(a5)
lga a5, a_symbol + (0xFF << 3)
# CHECK: .Lpcrel_hi12:
# CHECK-NOPIC: auipc a0, %pcrel_hi(a_symbol)
# CHECK-NOPIC: addi a0, a0, %pcrel_lo(.Lpcrel_hi12)
# CHECK-PIC: auipc a0, %got_pcrel_hi(a_symbol)
# CHECK-PIC-RV32: lw a0, %pcrel_lo(.Lpcrel_hi12)(a0)
# CHECK-PIC-RV64: ld a0, %pcrel_lo(.Lpcrel_hi12)(a0)
la a0, a_symbol
# CHECK: .Lpcrel_hi13:
# CHECK-NOPIC: auipc a1, %pcrel_hi(another_symbol)
# CHECK-NOPIC: addi a1, a1, %pcrel_lo(.Lpcrel_hi13)
# CHECK-PIC: auipc a1, %got_pcrel_hi(another_symbol)
# CHECK-PIC-RV32: lw a1, %pcrel_lo(.Lpcrel_hi13)(a1)
# CHECK-PIC-RV64: ld a1, %pcrel_lo(.Lpcrel_hi13)(a1)
la a1, another_symbol
# Check that we can load the address of symbols that are spelled like a register
# CHECK: .Lpcrel_hi14:
# CHECK-NOPIC: auipc a2, %pcrel_hi(zero)
# CHECK-NOPIC: addi a2, a2, %pcrel_lo(.Lpcrel_hi14)
# CHECK-PIC: auipc a2, %got_pcrel_hi(zero)
# CHECK-PIC-RV32: lw a2, %pcrel_lo(.Lpcrel_hi14)(a2)
# CHECK-PIC-RV64: ld a2, %pcrel_lo(.Lpcrel_hi14)(a2)
la a2, zero
# CHECK: .Lpcrel_hi15:
# CHECK-NOPIC: auipc a3, %pcrel_hi(ra)
# CHECK-NOPIC: addi a3, a3, %pcrel_lo(.Lpcrel_hi15)
# CHECK-PIC: auipc a3, %got_pcrel_hi(ra)
# CHECK-PIC-RV32: lw a3, %pcrel_lo(.Lpcrel_hi15)(a3)
# CHECK-PIC-RV64: ld a3, %pcrel_lo(.Lpcrel_hi15)(a3)
la a3, ra
# CHECK: .Lpcrel_hi16:
# CHECK-NOPIC: auipc a4, %pcrel_hi(f1)
# CHECK-NOPIC: addi a4, a4, %pcrel_lo(.Lpcrel_hi16)
# CHECK-PIC: auipc a4, %got_pcrel_hi(f1)
# CHECK-PIC-RV32: lw a4, %pcrel_lo(.Lpcrel_hi16)(a4)
# CHECK-PIC-RV64: ld a4, %pcrel_lo(.Lpcrel_hi16)(a4)
la a4, f1
# CHECK: .Lpcrel_hi17:
# CHECK: auipc a0, %tls_ie_pcrel_hi(a_symbol)
# CHECK-RV32: lw a0, %pcrel_lo(.Lpcrel_hi17)(a0)
# CHECK-RV64: ld a0, %pcrel_lo(.Lpcrel_hi17)(a0)
la.tls.ie a0, a_symbol
# CHECK: .Lpcrel_hi18:
# CHECK: auipc a1, %tls_ie_pcrel_hi(another_symbol)
# CHECK-RV32: lw a1, %pcrel_lo(.Lpcrel_hi18)(a1)
# CHECK-RV64: ld a1, %pcrel_lo(.Lpcrel_hi18)(a1)
la.tls.ie a1, another_symbol
# Check that we can load the address of symbols that are spelled like a register
# CHECK: .Lpcrel_hi19:
# CHECK: auipc a2, %tls_ie_pcrel_hi(zero)
# CHECK-RV32: lw a2, %pcrel_lo(.Lpcrel_hi19)(a2)
# CHECK-RV64: ld a2, %pcrel_lo(.Lpcrel_hi19)(a2)
la.tls.ie a2, zero
# CHECK: .Lpcrel_hi20:
# CHECK: auipc a3, %tls_ie_pcrel_hi(ra)
# CHECK-RV32: lw a3, %pcrel_lo(.Lpcrel_hi20)(a3)
# CHECK-RV64: ld a3, %pcrel_lo(.Lpcrel_hi20)(a3)
la.tls.ie a3, ra
# CHECK: .Lpcrel_hi21:
# CHECK: auipc a4, %tls_ie_pcrel_hi(f1)
# CHECK-RV32: lw a4, %pcrel_lo(.Lpcrel_hi21)(a4)
# CHECK-RV64: ld a4, %pcrel_lo(.Lpcrel_hi21)(a4)
la.tls.ie a4, f1
# CHECK: .Lpcrel_hi22:
# CHECK: auipc a0, %tls_gd_pcrel_hi(a_symbol)
# CHECK: addi a0, a0, %pcrel_lo(.Lpcrel_hi22)
la.tls.gd a0, a_symbol
# CHECK: .Lpcrel_hi23:
# CHECK: auipc a1, %tls_gd_pcrel_hi(another_symbol)
# CHECK: addi a1, a1, %pcrel_lo(.Lpcrel_hi23)
la.tls.gd a1, another_symbol
# Check that we can load the address of symbols that are spelled like a register
# CHECK: .Lpcrel_hi24:
# CHECK: auipc a2, %tls_gd_pcrel_hi(zero)
# CHECK: addi a2, a2, %pcrel_lo(.Lpcrel_hi24)
la.tls.gd a2, zero
# CHECK: .Lpcrel_hi25:
# CHECK: auipc a3, %tls_gd_pcrel_hi(ra)
# CHECK: addi a3, a3, %pcrel_lo(.Lpcrel_hi25)
la.tls.gd a3, ra
# CHECK: .Lpcrel_hi26:
# CHECK: auipc a4, %tls_gd_pcrel_hi(f1)
# CHECK: addi a4, a4, %pcrel_lo(.Lpcrel_hi26)
la.tls.gd a4, f1
# CHECK: .Lpcrel_hi27:
# CHECK: auipc a0, %pcrel_hi(a_symbol)
# CHECK: lb a0, %pcrel_lo(.Lpcrel_hi27)(a0)
lb a0, a_symbol
# CHECK: .Lpcrel_hi28:
# CHECK: auipc a1, %pcrel_hi(a_symbol)
# CHECK: lh a1, %pcrel_lo(.Lpcrel_hi28)(a1)
lh a1, a_symbol
# CHECK: .Lpcrel_hi29:
# CHECK: auipc a2, %pcrel_hi(a_symbol)
# CHECK: lhu a2, %pcrel_lo(.Lpcrel_hi29)(a2)
lhu a2, a_symbol
# CHECK: .Lpcrel_hi30:
# CHECK: auipc a3, %pcrel_hi(a_symbol)
# CHECK: lw a3, %pcrel_lo(.Lpcrel_hi30)(a3)
lw a3, a_symbol
# CHECK: .Lpcrel_hi31:
# CHECK: auipc a4, %pcrel_hi(a_symbol)
# CHECK: sb a3, %pcrel_lo(.Lpcrel_hi31)(a4)
sb a3, a_symbol, a4
# CHECK: .Lpcrel_hi32:
# CHECK: auipc a4, %pcrel_hi(a_symbol)
# CHECK: sh a3, %pcrel_lo(.Lpcrel_hi32)(a4)
sh a3, a_symbol, a4
# CHECK: .Lpcrel_hi33:
# CHECK: auipc a4, %pcrel_hi(a_symbol)
# CHECK: sw a3, %pcrel_lo(.Lpcrel_hi33)(a4)
sw a3, a_symbol, a4
# Check that we can load the address of symbols that are spelled like a register
# CHECK: .Lpcrel_hi34:
# CHECK: auipc a2, %pcrel_hi(zero)
# CHECK: lw a2, %pcrel_lo(.Lpcrel_hi34)(a2)
lw a2, zero
# CHECK: .Lpcrel_hi35:
# CHECK: auipc a4, %pcrel_hi(zero)
# CHECK: sw a3, %pcrel_lo(.Lpcrel_hi35)(a4)
sw a3, zero, a4
## Check that a complex expression can be simplified and matched.
# CHECK: .Lpcrel_hi36:
# CHECK: auipc a5, %pcrel_hi(255+a_symbol-4)
# CHECK: addi a5, a5, %pcrel_lo(.Lpcrel_hi36)
lla a5, (0xFF + a_symbol) - 4
## Check that we don't double-parse a top-level minus.
# CHECK: .Lpcrel_hi37:
# CHECK: auipc a5, %pcrel_hi(a_symbol-4)
# CHECK: addi a5, a5, %pcrel_lo(.Lpcrel_hi37)
lla a5, a_symbol - 4
## Check that subtraction associativity is respected
# CHECK-LABEL: .Lpcrel_hi38:
# CHECK-NEXT: auipc sp, %pcrel_hi(top-256-16)
# CHECK-NEXT: addi sp, sp, %pcrel_lo(.Lpcrel_hi38)
lla sp, top - 0x100 - 0x10