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
576 lines
19 KiB
LLVM
576 lines
19 KiB
LLVM
; RUN: llc -mtriple=aarch64 < %s | FileCheck --check-prefixes=CHECK,COMPAT %s
|
|
; RUN: llc -mtriple=aarch64 -mattr=v8.3a < %s | FileCheck --check-prefixes=CHECK,V83A %s
|
|
; RUN: llc -mtriple=aarch64 -mattr=v9a -mattr=pauth-lr < %s | FileCheck --check-prefixes=CHECK,V9A %s
|
|
; RUN: sed 's/"branch-protection-pauth-lr" //g' %s \
|
|
; RUN: | llc -mtriple=aarch64 -mattr=v9a \
|
|
; RUN: | FileCheck --check-prefixes=CHECK,PAUTH %s
|
|
;
|
|
; Test tail calls with return address signing across all three modes
|
|
; (COMPAT, V83A, V9A) and both FPDiff==0 and FPDiff!=0 cases,
|
|
; with A-key and B-key variants, for both direct and indirect tail calls.
|
|
|
|
declare swifttailcc void @callee_stack_args(ptr swiftasync %ctx, i64, i64, i64, i64, i64, i64, i64, i64, i64)
|
|
declare swifttailcc void @callee_no_stack_args(ptr swiftasync %ctx)
|
|
|
|
; FPDiff != 0, A-key: callee has stack args that this function doesn't.
|
|
define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-protection-pauth-lr" "sign-return-address"="all" "frame-pointer"="all" uwtable(async) {
|
|
; CHECK-LABEL: tail_call_fpdiff_a_key:
|
|
; CHECK: // %bb.0:
|
|
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: .Ltmp0:
|
|
; COMPAT-NEXT: hint #25
|
|
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: .Ltmp0:
|
|
; V83A-NEXT: paciasp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: .Ltmp0:
|
|
; V9A-NEXT: paciasppc
|
|
|
|
; PAUTH-NEXT: paciasp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK: orr x29, x29, #0x1000000000000000
|
|
; CHECK-NEXT: sub sp, sp, #48
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 48
|
|
; CHECK-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
|
|
; CHECK-NEXT: str x22, [sp, #8]
|
|
; CHECK-NEXT: add x29, sp, #16
|
|
; CHECK-NEXT: .cfi_def_cfa w29, 32
|
|
; CHECK-NEXT: .cfi_offset w30, -24
|
|
; CHECK-NEXT: .cfi_offset w29, -32
|
|
; CHECK-NEXT: mov w8, #9 // =0x9
|
|
; CHECK-NEXT: mov w0, #1 // =0x1
|
|
; CHECK-NEXT: mov w1, #2 // =0x2
|
|
; CHECK-NEXT: str x8, [x29, #16]
|
|
; CHECK-NEXT: mov w2, #3 // =0x3
|
|
; CHECK-NEXT: mov w3, #4 // =0x4
|
|
; CHECK-NEXT: mov w4, #5 // =0x5
|
|
; CHECK-NEXT: mov w5, #6 // =0x6
|
|
; CHECK-NEXT: mov w6, #7 // =0x7
|
|
; CHECK-NEXT: mov w7, #8 // =0x8
|
|
; CHECK-NEXT: .cfi_def_cfa wsp, 48
|
|
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
|
|
; CHECK-NEXT: and x29, x29, #0xefffffffffffffff
|
|
; CHECK-NEXT: add sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
|
; CHECK-NEXT: .cfi_restore w30
|
|
; CHECK-NEXT: .cfi_restore w29
|
|
; CHECK-NEXT: mov x17, x30
|
|
; CHECK-NEXT: add x16, sp, #16
|
|
|
|
; COMPAT-NEXT: adrp x15, .Ltmp0
|
|
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp0
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: hint #12
|
|
|
|
; V83A-NEXT: adrp x15, .Ltmp0
|
|
; V83A-NEXT: add x15, x15, :lo12:.Ltmp0
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: autia1716
|
|
|
|
; V9A-NEXT: adrp x15, .Ltmp0
|
|
; V9A-NEXT: add x15, x15, :lo12:.Ltmp0
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: autia171615
|
|
|
|
; PAUTH-NEXT: autia1716
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: mov x30, x17
|
|
; CHECK-NEXT: b callee_stack_args
|
|
musttail call swifttailcc void @callee_stack_args(ptr swiftasync %ctx, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9)
|
|
ret void
|
|
}
|
|
|
|
; FPDiff != 0, B-key: callee has stack args that this function doesn't.
|
|
define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-protection-pauth-lr" "sign-return-address"="all" "sign-return-address-key"="b_key" "frame-pointer"="all" uwtable(async) {
|
|
; CHECK-LABEL: tail_call_fpdiff_b_key:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: .cfi_b_key_frame
|
|
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: .Ltmp1:
|
|
; COMPAT-NEXT: hint #27
|
|
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: .Ltmp1:
|
|
; V83A-NEXT: pacibsp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: .Ltmp1:
|
|
; V9A-NEXT: pacibsppc
|
|
|
|
; PAUTH-NEXT: pacibsp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: orr x29, x29, #0x1000000000000000
|
|
; CHECK-NEXT: sub sp, sp, #48
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 48
|
|
; CHECK-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
|
|
; CHECK-NEXT: str x22, [sp, #8]
|
|
; CHECK-NEXT: add x29, sp, #16
|
|
; CHECK-NEXT: .cfi_def_cfa w29, 32
|
|
; CHECK-NEXT: .cfi_offset w30, -24
|
|
; CHECK-NEXT: .cfi_offset w29, -32
|
|
; CHECK-NEXT: mov w8, #9 // =0x9
|
|
; CHECK-NEXT: mov w0, #1 // =0x1
|
|
; CHECK-NEXT: mov w1, #2 // =0x2
|
|
; CHECK-NEXT: str x8, [x29, #16]
|
|
; CHECK-NEXT: mov w2, #3 // =0x3
|
|
; CHECK-NEXT: mov w3, #4 // =0x4
|
|
; CHECK-NEXT: mov w4, #5 // =0x5
|
|
; CHECK-NEXT: mov w5, #6 // =0x6
|
|
; CHECK-NEXT: mov w6, #7 // =0x7
|
|
; CHECK-NEXT: mov w7, #8 // =0x8
|
|
; CHECK-NEXT: .cfi_def_cfa wsp, 48
|
|
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
|
|
; CHECK-NEXT: and x29, x29, #0xefffffffffffffff
|
|
; CHECK-NEXT: add sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
|
; CHECK-NEXT: .cfi_restore w30
|
|
; CHECK-NEXT: .cfi_restore w29
|
|
; CHECK-NEXT: mov x17, x30
|
|
; CHECK-NEXT: add x16, sp, #16
|
|
|
|
; COMPAT-NEXT: adrp x15, .Ltmp1
|
|
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp1
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: hint #14
|
|
|
|
; V83A-NEXT: adrp x15, .Ltmp1
|
|
; V83A-NEXT: add x15, x15, :lo12:.Ltmp1
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: autib1716
|
|
|
|
; V9A-NEXT: adrp x15, .Ltmp1
|
|
; V9A-NEXT: add x15, x15, :lo12:.Ltmp1
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: autib171615
|
|
|
|
; PAUTH-NEXT: autib1716
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: mov x30, x17
|
|
; CHECK-NEXT: b callee_stack_args
|
|
musttail call swifttailcc void @callee_stack_args(ptr swiftasync %ctx, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9)
|
|
ret void
|
|
}
|
|
|
|
; FPDiff == 0, A-key: callee has same calling convention, no extra stack args.
|
|
define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-protection-pauth-lr" "sign-return-address"="all" "frame-pointer"="all" uwtable(async) {
|
|
; CHECK-LABEL: tail_call_no_fpdiff_a_key:
|
|
; CHECK: // %bb.0:
|
|
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: .Ltmp2:
|
|
; COMPAT-NEXT: hint #25
|
|
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: .Ltmp2:
|
|
; V83A-NEXT: paciasp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: .Ltmp2:
|
|
; V9A-NEXT: paciasppc
|
|
|
|
; PAUTH-NEXT: paciasp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK: orr x29, x29, #0x1000000000000000
|
|
; CHECK-NEXT: sub sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
|
|
; CHECK-NEXT: str x22, [sp, #8]
|
|
; CHECK-NEXT: add x29, sp, #16
|
|
; CHECK-NEXT: .cfi_def_cfa w29, 16
|
|
; CHECK-NEXT: .cfi_offset w30, -8
|
|
; CHECK-NEXT: .cfi_offset w29, -16
|
|
; CHECK-NEXT: .cfi_def_cfa wsp, 32
|
|
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
|
|
; CHECK-NEXT: and x29, x29, #0xefffffffffffffff
|
|
; CHECK-NEXT: add sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 0
|
|
; CHECK-NEXT: .cfi_restore w30
|
|
; CHECK-NEXT: .cfi_restore w29
|
|
|
|
; COMPAT-NEXT: adrp x16, .Ltmp2
|
|
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp2
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: hint #29
|
|
|
|
; V83A-NEXT: adrp x16, .Ltmp2
|
|
; V83A-NEXT: add x16, x16, :lo12:.Ltmp2
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: autiasp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: autiasppc .Ltmp2
|
|
|
|
; PAUTH-NEXT: autiasp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: b callee_no_stack_args
|
|
musttail call swifttailcc void @callee_no_stack_args(ptr swiftasync %ctx)
|
|
ret void
|
|
}
|
|
|
|
; FPDiff == 0, B-key: callee has same calling convention, no extra stack args.
|
|
define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-protection-pauth-lr" "sign-return-address"="all" "sign-return-address-key"="b_key" "frame-pointer"="all" uwtable(async) {
|
|
; CHECK-LABEL: tail_call_no_fpdiff_b_key:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: .cfi_b_key_frame
|
|
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: .Ltmp3:
|
|
; COMPAT-NEXT: hint #27
|
|
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: .Ltmp3:
|
|
; V83A-NEXT: pacibsp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: .Ltmp3:
|
|
; V9A-NEXT: pacibsppc
|
|
|
|
; PAUTH-NEXT: pacibsp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: orr x29, x29, #0x1000000000000000
|
|
; CHECK-NEXT: sub sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
|
|
; CHECK-NEXT: str x22, [sp, #8]
|
|
; CHECK-NEXT: add x29, sp, #16
|
|
; CHECK-NEXT: .cfi_def_cfa w29, 16
|
|
; CHECK-NEXT: .cfi_offset w30, -8
|
|
; CHECK-NEXT: .cfi_offset w29, -16
|
|
; CHECK-NEXT: .cfi_def_cfa wsp, 32
|
|
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
|
|
; CHECK-NEXT: and x29, x29, #0xefffffffffffffff
|
|
; CHECK-NEXT: add sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 0
|
|
; CHECK-NEXT: .cfi_restore w30
|
|
; CHECK-NEXT: .cfi_restore w29
|
|
|
|
; COMPAT-NEXT: adrp x16, .Ltmp3
|
|
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp3
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: hint #31
|
|
|
|
; V83A-NEXT: adrp x16, .Ltmp3
|
|
; V83A-NEXT: add x16, x16, :lo12:.Ltmp3
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: autibsp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: autibsppc .Ltmp3
|
|
|
|
; PAUTH-NEXT: autibsp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: b callee_no_stack_args
|
|
musttail call swifttailcc void @callee_no_stack_args(ptr swiftasync %ctx)
|
|
ret void
|
|
}
|
|
|
|
; FPDiff != 0, A-key, indirect call: callee ptr passed as argument.
|
|
define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, ptr %callee) "branch-protection-pauth-lr" "sign-return-address"="all" "frame-pointer"="all" uwtable(async) {
|
|
; CHECK-LABEL: indirect_tail_call_fpdiff_a_key:
|
|
; CHECK: // %bb.0:
|
|
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: .Ltmp4:
|
|
; COMPAT-NEXT: hint #25
|
|
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: .Ltmp4:
|
|
; V83A-NEXT: paciasp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: .Ltmp4:
|
|
; V9A-NEXT: paciasppc
|
|
|
|
; PAUTH-NEXT: paciasp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK: orr x29, x29, #0x1000000000000000
|
|
; CHECK-NEXT: sub sp, sp, #48
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 48
|
|
; CHECK-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
|
|
; CHECK-NEXT: str x22, [sp, #8]
|
|
; CHECK-NEXT: add x29, sp, #16
|
|
; CHECK-NEXT: .cfi_def_cfa w29, 32
|
|
; CHECK-NEXT: .cfi_offset w30, -24
|
|
; CHECK-NEXT: .cfi_offset w29, -32
|
|
; CHECK-NEXT: mov w9, #9 // =0x9
|
|
; CHECK-NEXT: mov x8, x0
|
|
; CHECK-NEXT: mov w0, #1 // =0x1
|
|
; CHECK-NEXT: str x9, [x29, #16]
|
|
; CHECK-NEXT: mov w1, #2 // =0x2
|
|
; CHECK-NEXT: mov w2, #3 // =0x3
|
|
; CHECK-NEXT: mov w3, #4 // =0x4
|
|
; CHECK-NEXT: mov w4, #5 // =0x5
|
|
; CHECK-NEXT: mov w5, #6 // =0x6
|
|
; CHECK-NEXT: mov w6, #7 // =0x7
|
|
; CHECK-NEXT: mov w7, #8 // =0x8
|
|
; CHECK-NEXT: .cfi_def_cfa wsp, 48
|
|
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
|
|
; CHECK-NEXT: and x29, x29, #0xefffffffffffffff
|
|
; CHECK-NEXT: add sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
|
; CHECK-NEXT: .cfi_restore w30
|
|
; CHECK-NEXT: .cfi_restore w29
|
|
; CHECK-NEXT: mov x17, x30
|
|
; CHECK-NEXT: add x16, sp, #16
|
|
|
|
; COMPAT-NEXT: adrp x15, .Ltmp4
|
|
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp4
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: hint #12
|
|
|
|
; V83A-NEXT: adrp x15, .Ltmp4
|
|
; V83A-NEXT: add x15, x15, :lo12:.Ltmp4
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: autia1716
|
|
|
|
; V9A-NEXT: adrp x15, .Ltmp4
|
|
; V9A-NEXT: add x15, x15, :lo12:.Ltmp4
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: autia171615
|
|
|
|
; PAUTH-NEXT: autia1716
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: mov x30, x17
|
|
; CHECK-NEXT: br x8
|
|
musttail call swifttailcc void %callee(ptr swiftasync %ctx, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9)
|
|
ret void
|
|
}
|
|
|
|
; FPDiff != 0, B-key, indirect call: callee ptr passed as argument.
|
|
define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, ptr %callee) "branch-protection-pauth-lr" "sign-return-address"="all" "sign-return-address-key"="b_key" "frame-pointer"="all" uwtable(async) {
|
|
; CHECK-LABEL: indirect_tail_call_fpdiff_b_key:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: .cfi_b_key_frame
|
|
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: .Ltmp5:
|
|
; COMPAT-NEXT: hint #27
|
|
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: .Ltmp5:
|
|
; V83A-NEXT: pacibsp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: .Ltmp5:
|
|
; V9A-NEXT: pacibsppc
|
|
|
|
; PAUTH-NEXT: pacibsp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK: orr x29, x29, #0x1000000000000000
|
|
; CHECK-NEXT: sub sp, sp, #48
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 48
|
|
; CHECK-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
|
|
; CHECK-NEXT: str x22, [sp, #8]
|
|
; CHECK-NEXT: add x29, sp, #16
|
|
; CHECK-NEXT: .cfi_def_cfa w29, 32
|
|
; CHECK-NEXT: .cfi_offset w30, -24
|
|
; CHECK-NEXT: .cfi_offset w29, -32
|
|
; CHECK-NEXT: mov w9, #9 // =0x9
|
|
; CHECK-NEXT: mov x8, x0
|
|
; CHECK-NEXT: mov w0, #1 // =0x1
|
|
; CHECK-NEXT: str x9, [x29, #16]
|
|
; CHECK-NEXT: mov w1, #2 // =0x2
|
|
; CHECK-NEXT: mov w2, #3 // =0x3
|
|
; CHECK-NEXT: mov w3, #4 // =0x4
|
|
; CHECK-NEXT: mov w4, #5 // =0x5
|
|
; CHECK-NEXT: mov w5, #6 // =0x6
|
|
; CHECK-NEXT: mov w6, #7 // =0x7
|
|
; CHECK-NEXT: mov w7, #8 // =0x8
|
|
; CHECK-NEXT: .cfi_def_cfa wsp, 48
|
|
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
|
|
; CHECK-NEXT: and x29, x29, #0xefffffffffffffff
|
|
; CHECK-NEXT: add sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
|
; CHECK-NEXT: .cfi_restore w30
|
|
; CHECK-NEXT: .cfi_restore w29
|
|
; CHECK-NEXT: mov x17, x30
|
|
; CHECK-NEXT: add x16, sp, #16
|
|
|
|
; COMPAT-NEXT: adrp x15, .Ltmp5
|
|
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp5
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: hint #14
|
|
|
|
; V83A-NEXT: adrp x15, .Ltmp5
|
|
; V83A-NEXT: add x15, x15, :lo12:.Ltmp5
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: autib1716
|
|
|
|
; V9A-NEXT: adrp x15, .Ltmp5
|
|
; V9A-NEXT: add x15, x15, :lo12:.Ltmp5
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: autib171615
|
|
|
|
; PAUTH-NEXT: autib1716
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: mov x30, x17
|
|
; CHECK-NEXT: br x8
|
|
musttail call swifttailcc void %callee(ptr swiftasync %ctx, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9)
|
|
ret void
|
|
}
|
|
|
|
; FPDiff == 0, A-key, indirect call: callee ptr passed as argument, no extra stack args.
|
|
define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx, ptr %callee) "branch-protection-pauth-lr" "sign-return-address"="all" "frame-pointer"="all" uwtable(async) {
|
|
; CHECK-LABEL: indirect_tail_call_no_fpdiff_a_key:
|
|
; CHECK: // %bb.0:
|
|
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: .Ltmp6:
|
|
; COMPAT-NEXT: hint #25
|
|
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: .Ltmp6:
|
|
; V83A-NEXT: paciasp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: .Ltmp6:
|
|
; V9A-NEXT: paciasppc
|
|
|
|
; PAUTH-NEXT: paciasp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK: orr x29, x29, #0x1000000000000000
|
|
; CHECK-NEXT: sub sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
|
|
; CHECK-NEXT: str x22, [sp, #8]
|
|
; CHECK-NEXT: add x29, sp, #16
|
|
; CHECK-NEXT: .cfi_def_cfa w29, 16
|
|
; CHECK-NEXT: .cfi_offset w30, -8
|
|
; CHECK-NEXT: .cfi_offset w29, -16
|
|
; CHECK-NEXT: .cfi_def_cfa wsp, 32
|
|
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
|
|
; CHECK-NEXT: and x29, x29, #0xefffffffffffffff
|
|
; CHECK-NEXT: add sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 0
|
|
; CHECK-NEXT: .cfi_restore w30
|
|
; CHECK-NEXT: .cfi_restore w29
|
|
|
|
; COMPAT-NEXT: adrp x16, .Ltmp6
|
|
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp6
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: hint #29
|
|
|
|
; V83A-NEXT: adrp x16, .Ltmp6
|
|
; V83A-NEXT: add x16, x16, :lo12:.Ltmp6
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: autiasp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: autiasppc .Ltmp6
|
|
|
|
; PAUTH-NEXT: autiasp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: br x0
|
|
musttail call swifttailcc void %callee(ptr swiftasync %ctx)
|
|
ret void
|
|
}
|
|
|
|
; FPDiff == 0, B-key, indirect call: callee ptr passed as argument, no extra stack args.
|
|
define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx, ptr %callee) "branch-protection-pauth-lr" "sign-return-address"="all" "sign-return-address-key"="b_key" "frame-pointer"="all" uwtable(async) {
|
|
; CHECK-LABEL: indirect_tail_call_no_fpdiff_b_key:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: .cfi_b_key_frame
|
|
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: .Ltmp7:
|
|
; COMPAT-NEXT: hint #27
|
|
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: .Ltmp7:
|
|
; V83A-NEXT: pacibsp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: .Ltmp7:
|
|
; V9A-NEXT: pacibsppc
|
|
|
|
; PAUTH-NEXT: pacibsp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: orr x29, x29, #0x1000000000000000
|
|
; CHECK-NEXT: sub sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
|
|
; CHECK-NEXT: str x22, [sp, #8]
|
|
; CHECK-NEXT: add x29, sp, #16
|
|
; CHECK-NEXT: .cfi_def_cfa w29, 16
|
|
; CHECK-NEXT: .cfi_offset w30, -8
|
|
; CHECK-NEXT: .cfi_offset w29, -16
|
|
; CHECK-NEXT: .cfi_def_cfa wsp, 32
|
|
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
|
|
; CHECK-NEXT: and x29, x29, #0xefffffffffffffff
|
|
; CHECK-NEXT: add sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 0
|
|
; CHECK-NEXT: .cfi_restore w30
|
|
; CHECK-NEXT: .cfi_restore w29
|
|
|
|
; COMPAT-NEXT: adrp x16, .Ltmp7
|
|
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp7
|
|
; COMPAT-NEXT: hint #39
|
|
; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
|
|
; COMPAT-NEXT: hint #31
|
|
|
|
; V83A-NEXT: adrp x16, .Ltmp7
|
|
; V83A-NEXT: add x16, x16, :lo12:.Ltmp7
|
|
; V83A-NEXT: hint #39
|
|
; V83A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V83A-NEXT: autibsp
|
|
|
|
; V9A-NEXT: .cfi_negate_ra_state_with_pc
|
|
; V9A-NEXT: autibsppc .Ltmp7
|
|
|
|
; PAUTH-NEXT: autibsp
|
|
; PAUTH-NEXT: .cfi_negate_ra_state
|
|
|
|
; CHECK-NEXT: br x0
|
|
musttail call swifttailcc void %callee(ptr swiftasync %ctx)
|
|
ret void
|
|
}
|