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
249 lines
8.2 KiB
LLVM
249 lines
8.2 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
|
|
|
; RUN: llc -mtriple arm64e-apple-darwin \
|
|
; RUN: -aarch64-enable-collect-loh=false \
|
|
; RUN: -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \
|
|
; RUN: -o - %s | FileCheck %s --check-prefix=MACHO
|
|
|
|
; RUN: llc -mtriple arm64e-apple-darwin \
|
|
; RUN: -fast-isel \
|
|
; RUN: -aarch64-enable-collect-loh=false \
|
|
; RUN: -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \
|
|
; RUN: -o - %s | FileCheck %s --check-prefix=MACHO
|
|
|
|
; RUN: llc -mtriple arm64e-apple-darwin \
|
|
; RUN: -global-isel -global-isel-abort=1 -verify-machineinstrs \
|
|
; RUN: -aarch64-enable-collect-loh=false \
|
|
; RUN: -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \
|
|
; RUN: -o - %s | FileCheck %s --check-prefix=MACHO
|
|
|
|
; RUN: llc -mtriple aarch64-elf -mattr=+pauth \
|
|
; RUN: -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \
|
|
; RUN: -o - %s | FileCheck %s --check-prefix=ELF
|
|
|
|
; RUN: llc -mtriple aarch64-elf -mattr=+pauth \
|
|
; RUN: -fast-isel \
|
|
; RUN: -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \
|
|
; RUN: -o - %s | FileCheck %s --check-prefix=ELF
|
|
|
|
; RUN: llc -mtriple aarch64-elf -mattr=+pauth \
|
|
; RUN: -global-isel -global-isel-abort=1 -verify-machineinstrs \
|
|
; RUN: -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \
|
|
; RUN: -o - %s | FileCheck %s --check-prefix=ELF
|
|
|
|
;; The discriminator is the same for all blockaddresses in the function.
|
|
;; ptrauth_string_discriminator("test_indirectbr blockaddress") == 34947
|
|
|
|
define i32 @test_indirectbr() #0 {
|
|
; MACHO-LABEL: test_indirectbr:
|
|
; MACHO: ; %bb.0: ; %entry
|
|
; MACHO-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
|
|
; MACHO-NEXT: adrp x16, Ltmp0@PAGE
|
|
; MACHO-NEXT: add x16, x16, Ltmp0@PAGEOFF
|
|
; MACHO-NEXT: mov x17, #34947 ; =0x8883
|
|
; MACHO-NEXT: pacia x16, x17
|
|
; MACHO-NEXT: mov x0, x16
|
|
; MACHO-NEXT: adrp x16, Ltmp1@PAGE
|
|
; MACHO-NEXT: add x16, x16, Ltmp1@PAGEOFF
|
|
; MACHO-NEXT: mov x17, #34947 ; =0x8883
|
|
; MACHO-NEXT: pacia x16, x17
|
|
; MACHO-NEXT: mov x1, x16
|
|
; MACHO-NEXT: bl _dummy_choose
|
|
; MACHO-NEXT: mov x17, #34947 ; =0x8883
|
|
; MACHO-NEXT: braa x0, x17
|
|
; MACHO-NEXT: Ltmp0: ; Block address taken
|
|
; MACHO-NEXT: LBB0_1: ; %bb1
|
|
; MACHO-NEXT: mov w0, #1 ; =0x1
|
|
; MACHO-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
|
|
; MACHO-NEXT: ret
|
|
; MACHO-NEXT: Ltmp1: ; Block address taken
|
|
; MACHO-NEXT: LBB0_2: ; %bb2
|
|
; MACHO-NEXT: mov w0, #2 ; =0x2
|
|
; MACHO-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
|
|
; MACHO-NEXT: ret
|
|
;
|
|
; ELF-LABEL: test_indirectbr:
|
|
; ELF: // %bb.0: // %entry
|
|
; ELF-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
|
|
; ELF-NEXT: adrp x16, .Ltmp0
|
|
; ELF-NEXT: add x16, x16, :lo12:.Ltmp0
|
|
; ELF-NEXT: mov x17, #34947 // =0x8883
|
|
; ELF-NEXT: pacia x16, x17
|
|
; ELF-NEXT: mov x0, x16
|
|
; ELF-NEXT: adrp x16, .Ltmp1
|
|
; ELF-NEXT: add x16, x16, :lo12:.Ltmp1
|
|
; ELF-NEXT: mov x17, #34947 // =0x8883
|
|
; ELF-NEXT: pacia x16, x17
|
|
; ELF-NEXT: mov x1, x16
|
|
; ELF-NEXT: bl dummy_choose
|
|
; ELF-NEXT: mov x17, #34947 // =0x8883
|
|
; ELF-NEXT: braa x0, x17
|
|
; ELF-NEXT: .Ltmp0: // Block address taken
|
|
; ELF-NEXT: .LBB0_1: // %bb1
|
|
; ELF-NEXT: mov w0, #1 // =0x1
|
|
; ELF-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
|
|
; ELF-NEXT: ret
|
|
; ELF-NEXT: .Ltmp1: // Block address taken
|
|
; ELF-NEXT: .LBB0_2: // %bb2
|
|
; ELF-NEXT: mov w0, #2 // =0x2
|
|
; ELF-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
|
|
; ELF-NEXT: ret
|
|
entry:
|
|
%tmp0 = call ptr @dummy_choose(ptr blockaddress(@test_indirectbr, %bb1), ptr blockaddress(@test_indirectbr, %bb2))
|
|
indirectbr ptr %tmp0, [label %bb1, label %bb2]
|
|
|
|
bb1:
|
|
ret i32 1
|
|
|
|
bb2:
|
|
ret i32 2
|
|
}
|
|
|
|
define ptr @test_indirectbr_other_function() #0 {
|
|
; MACHO-LABEL: test_indirectbr_other_function:
|
|
; MACHO: ; %bb.0:
|
|
; MACHO-NEXT: adrp x16, Ltmp0@PAGE
|
|
; MACHO-NEXT: add x16, x16, Ltmp0@PAGEOFF
|
|
; MACHO-NEXT: mov x17, #34947 ; =0x8883
|
|
; MACHO-NEXT: pacia x16, x17
|
|
; MACHO-NEXT: mov x0, x16
|
|
; MACHO-NEXT: ret
|
|
;
|
|
; ELF-LABEL: test_indirectbr_other_function:
|
|
; ELF: // %bb.0:
|
|
; ELF-NEXT: adrp x16, .Ltmp0
|
|
; ELF-NEXT: add x16, x16, :lo12:.Ltmp0
|
|
; ELF-NEXT: mov x17, #34947 // =0x8883
|
|
; ELF-NEXT: pacia x16, x17
|
|
; ELF-NEXT: mov x0, x16
|
|
; ELF-NEXT: ret
|
|
ret ptr blockaddress(@test_indirectbr, %bb1)
|
|
}
|
|
|
|
;; Test another function to compare the discriminator.
|
|
;; ptrauth_string_discriminator("test_indirectbr_2 blockaddress") == 40224
|
|
|
|
define i32 @test_indirectbr_2() #0 {
|
|
; MACHO-LABEL: test_indirectbr_2:
|
|
; MACHO: ; %bb.0: ; %entry
|
|
; MACHO-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
|
|
; MACHO-NEXT: adrp x16, Ltmp2@PAGE
|
|
; MACHO-NEXT: add x16, x16, Ltmp2@PAGEOFF
|
|
; MACHO-NEXT: mov x17, #40224 ; =0x9d20
|
|
; MACHO-NEXT: pacia x16, x17
|
|
; MACHO-NEXT: mov x0, x16
|
|
; MACHO-NEXT: adrp x16, Ltmp3@PAGE
|
|
; MACHO-NEXT: add x16, x16, Ltmp3@PAGEOFF
|
|
; MACHO-NEXT: mov x17, #40224 ; =0x9d20
|
|
; MACHO-NEXT: pacia x16, x17
|
|
; MACHO-NEXT: mov x1, x16
|
|
; MACHO-NEXT: bl _dummy_choose
|
|
; MACHO-NEXT: mov x17, #40224 ; =0x9d20
|
|
; MACHO-NEXT: braa x0, x17
|
|
; MACHO-NEXT: Ltmp2: ; Block address taken
|
|
; MACHO-NEXT: LBB2_1: ; %bb1
|
|
; MACHO-NEXT: mov w0, #1 ; =0x1
|
|
; MACHO-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
|
|
; MACHO-NEXT: ret
|
|
; MACHO-NEXT: Ltmp3: ; Block address taken
|
|
; MACHO-NEXT: LBB2_2: ; %bb2
|
|
; MACHO-NEXT: mov w0, #2 ; =0x2
|
|
; MACHO-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
|
|
; MACHO-NEXT: ret
|
|
;
|
|
; ELF-LABEL: test_indirectbr_2:
|
|
; ELF: // %bb.0: // %entry
|
|
; ELF-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
|
|
; ELF-NEXT: adrp x16, .Ltmp2
|
|
; ELF-NEXT: add x16, x16, :lo12:.Ltmp2
|
|
; ELF-NEXT: mov x17, #40224 // =0x9d20
|
|
; ELF-NEXT: pacia x16, x17
|
|
; ELF-NEXT: mov x0, x16
|
|
; ELF-NEXT: adrp x16, .Ltmp3
|
|
; ELF-NEXT: add x16, x16, :lo12:.Ltmp3
|
|
; ELF-NEXT: mov x17, #40224 // =0x9d20
|
|
; ELF-NEXT: pacia x16, x17
|
|
; ELF-NEXT: mov x1, x16
|
|
; ELF-NEXT: bl dummy_choose
|
|
; ELF-NEXT: mov x17, #40224 // =0x9d20
|
|
; ELF-NEXT: braa x0, x17
|
|
; ELF-NEXT: .Ltmp2: // Block address taken
|
|
; ELF-NEXT: .LBB2_1: // %bb1
|
|
; ELF-NEXT: mov w0, #1 // =0x1
|
|
; ELF-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
|
|
; ELF-NEXT: ret
|
|
; ELF-NEXT: .Ltmp3: // Block address taken
|
|
; ELF-NEXT: .LBB2_2: // %bb2
|
|
; ELF-NEXT: mov w0, #2 // =0x2
|
|
; ELF-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
|
|
; ELF-NEXT: ret
|
|
entry:
|
|
%tmp0 = call ptr @dummy_choose(ptr blockaddress(@test_indirectbr_2, %bb1), ptr blockaddress(@test_indirectbr_2, %bb2))
|
|
indirectbr ptr %tmp0, [label %bb1, label %bb2]
|
|
|
|
bb1:
|
|
ret i32 1
|
|
|
|
bb2:
|
|
ret i32 2
|
|
}
|
|
|
|
;; Check we don't interfere with jump-table BRIND lowering.
|
|
|
|
; MACHO-LABEL: test_jumptable:
|
|
; MACHO: adrp x9, LJTI3_0@PAGE
|
|
; MACHO-NEXT: add x9, x9, LJTI3_0@PAGEOFF
|
|
; MACHO-NEXT: adr x10, LBB3_2
|
|
; MACHO-NEXT: ldrb w11, [x9, x8]
|
|
; MACHO-NEXT: add x10, x10, x11, lsl #2
|
|
; MACHO-NEXT: br x10
|
|
|
|
; ELF-LABEL: test_jumptable:
|
|
; ELF: adrp x9, .LJTI3_0
|
|
; ELF-NEXT: add x9, x9, :lo12:.LJTI3_0
|
|
; ELF-NEXT: adr x10, .LBB3_2
|
|
; ELF-NEXT: ldrb w11, [x9, x8]
|
|
; ELF-NEXT: add x10, x10, x11, lsl #2
|
|
; ELF-NEXT: br x10
|
|
define i32 @test_jumptable(i32 %in) #0 {
|
|
switch i32 %in, label %def [
|
|
i32 0, label %lbl1
|
|
i32 1, label %lbl2
|
|
]
|
|
|
|
def:
|
|
ret i32 0
|
|
|
|
lbl1:
|
|
ret i32 1
|
|
|
|
lbl2:
|
|
ret i32 2
|
|
}
|
|
|
|
; MACHO-LABEL: .globl _test_indirectbr_array
|
|
; MACHO-NEXT: .p2align 4
|
|
; MACHO-NEXT: _test_indirectbr_array:
|
|
; MACHO-NEXT: .quad Ltmp0@AUTH(ia,34947)
|
|
; MACHO-NEXT: .quad Ltmp1@AUTH(ia,34947)
|
|
; MACHO-NEXT: .quad Ltmp2@AUTH(ia,40224)
|
|
; MACHO-NEXT: .quad Ltmp3@AUTH(ia,40224)
|
|
|
|
; ELF-LABEL: .globl test_indirectbr_array
|
|
; ELF-NEXT: .p2align 4, 0x0
|
|
; ELF-NEXT: test_indirectbr_array:
|
|
; ELF-NEXT: .xword .Ltmp0@AUTH(ia,34947)
|
|
; ELF-NEXT: .xword .Ltmp1@AUTH(ia,34947)
|
|
; ELF-NEXT: .xword .Ltmp2@AUTH(ia,40224)
|
|
; ELF-NEXT: .xword .Ltmp3@AUTH(ia,40224)
|
|
; ELF-NEXT: .size test_indirectbr_array, 32
|
|
|
|
@test_indirectbr_array = constant [4 x ptr] [
|
|
ptr blockaddress(@test_indirectbr, %bb1), ptr blockaddress(@test_indirectbr, %bb2),
|
|
ptr blockaddress(@test_indirectbr_2, %bb1), ptr blockaddress(@test_indirectbr_2, %bb2)
|
|
]
|
|
|
|
declare ptr @dummy_choose(ptr, ptr)
|
|
|
|
attributes #0 = { "ptrauth-indirect-gotos" nounwind }
|