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
146 lines
4.2 KiB
ArmAsm
146 lines
4.2 KiB
ArmAsm
# REQUIRES: loongarch
|
|
# RUN: rm -rf %t && split-file %s %t && cd %t
|
|
|
|
# RUN: llvm-mc --filetype=obj --triple=loongarch64 a.s -o a.o
|
|
# RUN: llvm-mc --filetype=obj --triple=loongarch64 unpaired.s -o unpaired.o
|
|
# RUN: llvm-mc --filetype=obj --triple=loongarch64 lone-ldr.s -o lone-ldr.o
|
|
|
|
# RUN: ld.lld a.o -T within-range.t -o a
|
|
# RUN: llvm-objdump -d --no-show-raw-insn a | FileCheck %s
|
|
|
|
## This test verifies the encoding when the register $a0 is used.
|
|
# CHECK: pcalau12i $a0, 0
|
|
# CHECK-NEXT: addi.d $a0, $a0, -2048
|
|
|
|
## PCALAU12I contains a nonzero addend, no relaxations should be applied.
|
|
# CHECK-NEXT: pcalau12i $a1, 2
|
|
# CHECK-NEXT: ld.d $a1, $a1, -2048
|
|
|
|
## LD contains a nonzero addend, no relaxations should be applied.
|
|
# CHECK-NEXT: pcalau12i $a2, 2
|
|
# CHECK-NEXT: ld.d $a2, $a2, -2040
|
|
|
|
## PCALAU12I and LD use different registers, no relaxations should be applied.
|
|
# CHECK-NEXT: pcalau12i $a3, 2
|
|
# CHECK-NEXT: ld.d $a4, $a3, -2048
|
|
|
|
## PCALAU12I and LD use different registers, no relaxations should be applied.
|
|
# CHECK-NEXT: pcalau12i $a5, 2
|
|
# CHECK-NEXT: ld.d $a5, $a6, -2048
|
|
|
|
# RUN: ld.lld a.o -T underflow-range.t -o a-underflow
|
|
# RUN: llvm-objdump -d --no-show-raw-insn a-underflow | FileCheck --check-prefix=OUTRANGE %s
|
|
|
|
# RUN: ld.lld a.o -T overflow-range.t -o a-overflow
|
|
# RUN: llvm-objdump -d --no-show-raw-insn a-overflow | FileCheck --check-prefix=OUTRANGE %s
|
|
|
|
# OUTRANGE: pcalau12i $a0, 1
|
|
# OUTRANGE-NEXT: ld.d $a0, $a0, 0
|
|
|
|
## Relocations do not appear in pairs, no relaxations should be applied.
|
|
# RUN: ld.lld unpaired.o -T within-range.t -o unpaired
|
|
# RUN: llvm-objdump --no-show-raw-insn -d unpaired | FileCheck --check-prefix=UNPAIRED %s
|
|
|
|
# UNPAIRED: pcalau12i $a0, 2
|
|
# UNPAIRED-NEXT: b 8
|
|
# UNPAIRED-NEXT: pcalau12i $a0, 2
|
|
# UNPAIRED: ld.d $a0, $a0, -2048
|
|
|
|
## Relocations do not appear in pairs, no relaxations should be applied.
|
|
# RUN: ld.lld lone-ldr.o -T within-range.t -o lone-ldr
|
|
# RUN: llvm-objdump --no-show-raw-insn -d lone-ldr | FileCheck --check-prefix=LONE-LDR %s
|
|
|
|
# LONE-LDR: ld.d $a0, $a0, -2048
|
|
|
|
## 32-bit code is mostly the same. We only test a few variants.
|
|
# RUN: llvm-mc --filetype=obj --triple=loongarch32 a.32.s -o a.32.o
|
|
# RUN: ld.lld a.32.o -T within-range.t -o a32
|
|
# RUN: llvm-objdump -d --no-show-raw-insn a32 | FileCheck --check-prefix=CHECK32 %s
|
|
|
|
## This test verifies the encoding when the register $a0 is used.
|
|
# CHECK32: pcalau12i $a0, 0
|
|
# CHECK32-NEXT: addi.w $a0, $a0, -2048
|
|
|
|
|
|
## This linker script ensures that .rodata and .text are sufficiently close to
|
|
## each other so that the pcalau12i + ld pair can be relaxed to pcalau12i + add.
|
|
#--- within-range.t
|
|
SECTIONS {
|
|
.rodata 0x1800: { *(.rodata) }
|
|
.text 0x2800: { *(.text) }
|
|
.got 0x3800: { *(.got) }
|
|
}
|
|
|
|
## This linker script ensures that .rodata and .text are sufficiently far apart
|
|
## so that the pcalau12i + ld pair cannot be relaxed to pcalau12i + add.
|
|
#--- underflow-range.t
|
|
SECTIONS {
|
|
.rodata 0x800-4: { *(.rodata) }
|
|
.got 0x80002000: { *(.got) }
|
|
.text 0x80001000: { *(.text) } /* (0x800-4)+2GB+0x800+4 */
|
|
}
|
|
|
|
#--- overflow-range.t
|
|
SECTIONS {
|
|
.text 0x1000: { *(.text) }
|
|
.got 0x2000: { *(.got) }
|
|
.rodata 0x80000800 : { *(.rodata) } /* 0x1000+2GB-0x800 */
|
|
}
|
|
|
|
#--- a.s
|
|
## Symbol 'x' is nonpreemptible, the optimization should be applied.
|
|
.rodata
|
|
.hidden x
|
|
x:
|
|
.word 10
|
|
|
|
.text
|
|
.global _start
|
|
_start:
|
|
pcalau12i $a0, %got_pc_hi20(x)
|
|
ld.d $a0, $a0, %got_pc_lo12(x)
|
|
pcalau12i $a1, %got_pc_hi20(x+1)
|
|
ld.d $a1, $a1, %got_pc_lo12(x)
|
|
pcalau12i $a2, %got_pc_hi20(x)
|
|
ld.d $a2, $a2, %got_pc_lo12(x+8)
|
|
pcalau12i $a3, %got_pc_hi20(x)
|
|
ld.d $a4, $a3, %got_pc_lo12(x)
|
|
pcalau12i $a5, %got_pc_hi20(x)
|
|
ld.d $a5, $a6, %got_pc_lo12(x)
|
|
|
|
#--- unpaired.s
|
|
.text
|
|
.hidden x
|
|
x:
|
|
nop
|
|
.global _start
|
|
_start:
|
|
pcalau12i $a0, %got_pc_hi20(x)
|
|
b L
|
|
pcalau12i $a0, %got_pc_hi20(x)
|
|
L:
|
|
ld.d $a0, $a0, %got_pc_lo12(x)
|
|
|
|
#--- lone-ldr.s
|
|
.text
|
|
.hidden x
|
|
x:
|
|
nop
|
|
.global _start
|
|
_start:
|
|
ld.d $a0, $a0, %got_pc_lo12(x)
|
|
|
|
|
|
#--- a.32.s
|
|
## Symbol 'x' is nonpreemptible, the optimization should be applied.
|
|
.rodata
|
|
.hidden x
|
|
x:
|
|
.word 10
|
|
|
|
.text
|
|
.global _start
|
|
_start:
|
|
pcalau12i $a0, %got_pc_hi20(x)
|
|
ld.w $a0, $a0, %got_pc_lo12(x)
|