Files
TheRock/compiler/amd-llvm/lld/test/ELF/arm-thunk-multipass.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

94 lines
2.8 KiB
ArmAsm

// REQUIRES: arm
// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t
// RUN: ld.lld %t -o %t2
// The output file is large, most of it zeroes. We dissassemble only the
// parts we need to speed up the test and avoid a large output file
// RUN: llvm-objdump --no-print-imm-hex -d %t2 --start-address=0x100002 --stop-address=0x10000a | FileCheck --check-prefix=CHECK1 %s
// RUN: llvm-objdump --no-print-imm-hex -d %t2 --start-address=0x1000004 --stop-address=0x1000026 | FileCheck --check-prefix=CHECK2 %s
// RUN: llvm-objdump --no-print-imm-hex -d %t2 --start-address=0x1100014 --stop-address=0x1100022 | FileCheck --check-prefix=CHECK3 %s
// In this test case a branch that is in range and does not need its range
// extended can be pushed out of range by another Thunk, necessitating another
// pass
.macro FUNCTION suff
.section .text.\suff\(), "ax", %progbits
.thumb
.balign 0x100000
.globl tfunc\suff\()
.type tfunc\suff\(), %function
tfunc\suff\():
bx lr
.endm
FUNCTION 00
.globl _start
_start:
bl target
b.w arm_target
// arm_target is in range but needs an interworking thunk
// CHECK1: <_start>:
// CHECK1-NEXT: 100002: f300 d006 bl 0x1000012 <__Thumbv7ABSLongThunk_target>
// CHECK1-NEXT: 100006: f2ff 97ff b.w 0x1000008 <__Thumbv7ABSLongThunk_arm_target>
nop
nop
nop
.globl target2
.type target2, %function
nop
target2:
FUNCTION 01
FUNCTION 02
FUNCTION 03
FUNCTION 04
FUNCTION 05
FUNCTION 06
FUNCTION 07
FUNCTION 08
FUNCTION 09
FUNCTION 10
FUNCTION 11
FUNCTION 12
FUNCTION 13
FUNCTION 14
FUNCTION 15
.section .text.16, "ax", %progbits
.arm
.globl arm_target
.type arm_target, %function
arm_target:
bx lr
// CHECK2: 01000004 <arm_target>:
// CHECK2: <__Thumbv7ABSLongThunk_arm_target>:
// CHECK2-NEXT: 1000008: f240 0c04 movw r12, #4
// CHECK2-NEXT: 100000c: f2c0 1c00 movt r12, #256
// CHECK2-NEXT: 1000010: 4760 bx r12
// CHECK2: <__Thumbv7ABSLongThunk_target>:
// CHECK2-NEXT: 1000012: f0ff bfff b.w 0x1100014 <target>
// CHECK2: <__Thumbv7ABSLongThunk_target2>:
// CHECK2-NEXT: 1000016: f4ff 97fc b.w 0x100012 <target2>
.section .text.17, "ax", %progbits
// Just enough space so that bl target is in range if no extension thunks are
// generated.
.space 0x100000 - 6
.section .text.18, "ax", %progbits
.thumb
.globl target
.type target, %function
// target is at maximum ARM branch range away from caller.
target:
// Similar case in the backwards direction
bl target2
nop
nop
bx lr
// CHECK3: <target>:
// CHECK3-NEXT: 1100014: f6ff ffff bl 0x1000016 <__Thumbv7ABSLongThunk_target2>
// CHECK3-NEXT: 1100018: bf00 nop
// CHECK3-NEXT: 110001a: bf00 nop
// CHECK3-NEXT: 110001c: 4770 bx lr