blob: 75e7ac902274d3e87a856265fff904e9d2015e61 [file] [edit]
; RUN: llc < %s -mtriple=arm64ec-pc-windows-msvc | FileCheck %s
declare void @called()
declare void @escaped()
define void @f(ptr %dst, ptr readonly %f) {
call void @called()
; CHECK: bl "#called"
store ptr @escaped, ptr %dst
call void %f()
; CHECK: adrp x10, $iexit_thunk$cdecl$v$v
; CHECK-NEXT: add x10, x10, :lo12:$iexit_thunk$cdecl$v$v
; CHECK-NEXT: str x8, [x20]
; CHECK-NEXT: adrp x8, __os_arm64x_check_icall_cfg
; CHECK-NEXT: ldr x8, [x8, :lo12:__os_arm64x_check_icall_cfg]
; CHECK-NEXT: mov x11,
; CHECK-NEXT: blr x8
; CHECK-NEXT: blr x11
ret void
}
; CHECK-LABEL: .def "#called$exit_thunk";
; CHECK-NEXT: .scl 2;
; CHECK-NEXT: .type 32;
; CHECK-NEXT: .endef
; CHECK-NEXT: .section .wowthk$aa,"xr",discard,"#called$exit_thunk"
; CHECK-NEXT: .globl "#called$exit_thunk" // -- Begin function #called$exit_thunk
; CHECK-NEXT: .p2align 2
; CHECK-NEXT: "#called$exit_thunk": // @"#called$exit_thunk"
; CHECK-NEXT: .weak_anti_dep called
; CHECK-NEXT: called = "#called"
; CHECK-NEXT: .weak_anti_dep "#called"
; CHECK-NEXT: "#called" = "#called$exit_thunk"
; CHECK-NEXT: .seh_proc "#called$exit_thunk"
; CHECK-NEXT: // %bb.0:
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; CHECK-NEXT: .seh_save_reg_x x30, 16
; CHECK-NEXT: .seh_endprologue
; CHECK-NEXT: adrp x8, __os_arm64x_check_icall
; CHECK-NEXT: adrp x11, called
; CHECK-NEXT: add x11, x11, :lo12:called
; CHECK-NEXT: ldr x8, [x8, :lo12:__os_arm64x_check_icall]
; CHECK-NEXT: adrp x10, $iexit_thunk$cdecl$v$v
; CHECK-NEXT: add x10, x10, :lo12:$iexit_thunk$cdecl$v$v
; CHECK-NEXT: blr x8
; CHECK-NEXT: .seh_startepilogue
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; CHECK-NEXT: .seh_save_reg_x x30, 16
; CHECK-NEXT: .seh_endepilogue
; CHECK-NEXT: br x11
; CHECK-NEXT: .seh_endfunclet
; CHECK-NEXT: .seh_endproc
!llvm.module.flags = !{!0}
!0 = !{i32 2, !"cfguard", i32 2}
; CHECK-LABEL: .section .gfids$y,"dr"
; CHECK-NEXT: .symidx escaped
; CHECK-NEXT: .symidx $iexit_thunk$cdecl$v$v
; CHECK-NOT: .symidx