|
2 | 2 |
|
3 | 3 | declare void @called() |
4 | 4 | declare void @escaped() |
5 | | -define void @f(ptr %dst) { |
| 5 | +define void @f(ptr %dst, ptr readonly %f) { |
6 | 6 | call void @called() |
| 7 | +; CHECK: bl "#called" |
7 | 8 | store ptr @escaped, ptr %dst |
8 | | - ret void |
| 9 | + call void %f() |
| 10 | +; CHECK: adrp x10, $iexit_thunk$cdecl$v$v |
| 11 | +; CHECK-NEXT: add x10, x10, :lo12:$iexit_thunk$cdecl$v$v |
| 12 | +; CHECK-NEXT: str x8, [x20] |
| 13 | +; CHECK-NEXT: adrp x8, __os_arm64x_check_icall_cfg |
| 14 | +; CHECK-NEXT: ldr x8, [x8, :lo12:__os_arm64x_check_icall_cfg] |
| 15 | +; CHECK-NEXT: mov x11, |
| 16 | +; CHECK-NEXT: blr x8 |
| 17 | +; CHECK-NEXT: blr x11 |
| 18 | + ret void |
9 | 19 | } |
10 | 20 |
|
| 21 | +; CHECK-LABEL: .def "#called$exit_thunk"; |
| 22 | +; CHECK-NEXT: .scl 2; |
| 23 | +; CHECK-NEXT: .type 32; |
| 24 | +; CHECK-NEXT: .endef |
| 25 | +; CHECK-NEXT: .section .wowthk$aa,"xr",discard,"#called$exit_thunk" |
| 26 | +; CHECK-NEXT: .globl "#called$exit_thunk" // -- Begin function #called$exit_thunk |
| 27 | +; CHECK-NEXT: .p2align 2 |
| 28 | +; CHECK-NEXT: "#called$exit_thunk": // @"#called$exit_thunk" |
| 29 | +; CHECK-NEXT: .weak_anti_dep called |
| 30 | +; CHECK-NEXT: called = "#called" |
| 31 | +; CHECK-NEXT: .weak_anti_dep "#called" |
| 32 | +; CHECK-NEXT: "#called" = "#called$exit_thunk" |
| 33 | +; CHECK-NEXT: .seh_proc "#called$exit_thunk" |
| 34 | +; CHECK-NEXT: // %bb.0: |
| 35 | +; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill |
| 36 | +; CHECK-NEXT: .seh_save_reg_x x30, 16 |
| 37 | +; CHECK-NEXT: .seh_endprologue |
| 38 | +; CHECK-NEXT: adrp x8, __os_arm64x_check_icall |
| 39 | +; CHECK-NEXT: adrp x11, called |
| 40 | +; CHECK-NEXT: add x11, x11, :lo12:called |
| 41 | +; CHECK-NEXT: ldr x8, [x8, :lo12:__os_arm64x_check_icall] |
| 42 | +; CHECK-NEXT: adrp x10, $iexit_thunk$cdecl$v$v |
| 43 | +; CHECK-NEXT: add x10, x10, :lo12:$iexit_thunk$cdecl$v$v |
| 44 | +; CHECK-NEXT: blr x8 |
| 45 | +; CHECK-NEXT: .seh_startepilogue |
| 46 | +; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload |
| 47 | +; CHECK-NEXT: .seh_save_reg_x x30, 16 |
| 48 | +; CHECK-NEXT: .seh_endepilogue |
| 49 | +; CHECK-NEXT: br x11 |
| 50 | +; CHECK-NEXT: .seh_endfunclet |
| 51 | +; CHECK-NEXT: .seh_endproc |
| 52 | + |
11 | 53 | !llvm.module.flags = !{!0} |
12 | | -!0 = !{i32 2, !"cfguard", i32 1} |
| 54 | +!0 = !{i32 2, !"cfguard", i32 2} |
13 | 55 |
|
14 | 56 | ; CHECK-LABEL: .section .gfids$y,"dr" |
15 | 57 | ; CHECK-NEXT: .symidx escaped |
| 58 | +; CHECK-NEXT: .symidx $iexit_thunk$cdecl$v$v |
16 | 59 | ; CHECK-NOT: .symidx |
0 commit comments