1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc < %s -mtriple=aarch64-windows-pc-msvc -aarch64-stack-hazard-size=0 | FileCheck %s --check-prefixes=CHECK0
3 ; RUN: llc < %s -mtriple=aarch64-windows-pc-msvc -aarch64-stack-hazard-size=64 | FileCheck %s --check-prefixes=CHECK64
4 ; RUN: llc < %s -mtriple=aarch64-windows-pc-msvc -aarch64-stack-hazard-size=1024 | FileCheck %s --check-prefixes=CHECK1024
6 define i32 @fpr_csr_stackobj(double %x) "aarch64_pstate_sm_compatible" "frame-pointer"="all" {
7 ; CHECK0-LABEL: fpr_csr_stackobj:
8 ; CHECK0: .seh_proc fpr_csr_stackobj
9 ; CHECK0-NEXT: // %bb.0: // %entry
10 ; CHECK0-NEXT: str x23, [sp, #-48]! // 8-byte Folded Spill
11 ; CHECK0-NEXT: .seh_save_reg_x x23, 48
12 ; CHECK0-NEXT: stp x29, x30, [sp, #8] // 16-byte Folded Spill
13 ; CHECK0-NEXT: .seh_save_fplr 8
14 ; CHECK0-NEXT: stp d9, d10, [sp, #24] // 16-byte Folded Spill
15 ; CHECK0-NEXT: .seh_save_fregp d9, 24
16 ; CHECK0-NEXT: add x29, sp, #8
17 ; CHECK0-NEXT: .seh_add_fp 8
18 ; CHECK0-NEXT: .seh_endprologue
19 ; CHECK0-NEXT: mov w0, wzr
21 ; CHECK0-NEXT: //NO_APP
22 ; CHECK0-NEXT: str d0, [x29, #32]
23 ; CHECK0-NEXT: .seh_startepilogue
24 ; CHECK0-NEXT: ldp d9, d10, [sp, #24] // 16-byte Folded Reload
25 ; CHECK0-NEXT: .seh_save_fregp d9, 24
26 ; CHECK0-NEXT: ldp x29, x30, [sp, #8] // 16-byte Folded Reload
27 ; CHECK0-NEXT: .seh_save_fplr 8
28 ; CHECK0-NEXT: ldr x23, [sp], #48 // 8-byte Folded Reload
29 ; CHECK0-NEXT: .seh_save_reg_x x23, 48
30 ; CHECK0-NEXT: .seh_endepilogue
32 ; CHECK0-NEXT: .seh_endfunclet
33 ; CHECK0-NEXT: .seh_endproc
35 ; CHECK64-LABEL: fpr_csr_stackobj:
36 ; CHECK64: .seh_proc fpr_csr_stackobj
37 ; CHECK64-NEXT: // %bb.0: // %entry
38 ; CHECK64-NEXT: sub sp, sp, #192
39 ; CHECK64-NEXT: .seh_stackalloc 192
40 ; CHECK64-NEXT: str x23, [sp, #80] // 8-byte Folded Spill
41 ; CHECK64-NEXT: .seh_save_reg x23, 80
42 ; CHECK64-NEXT: str x29, [sp, #88] // 8-byte Folded Spill
43 ; CHECK64-NEXT: .seh_save_reg x29, 88
44 ; CHECK64-NEXT: str x30, [sp, #96] // 8-byte Folded Spill
45 ; CHECK64-NEXT: .seh_save_reg x30, 96
46 ; CHECK64-NEXT: str d9, [sp, #168] // 8-byte Folded Spill
47 ; CHECK64-NEXT: .seh_save_freg d9, 168
48 ; CHECK64-NEXT: str d10, [sp, #176] // 8-byte Folded Spill
49 ; CHECK64-NEXT: .seh_save_freg d10, 176
50 ; CHECK64-NEXT: add x29, sp, #88
51 ; CHECK64-NEXT: .seh_add_fp 88
52 ; CHECK64-NEXT: .seh_endprologue
53 ; CHECK64-NEXT: mov w0, wzr
55 ; CHECK64-NEXT: //NO_APP
56 ; CHECK64-NEXT: stur d0, [x29, #-16]
57 ; CHECK64-NEXT: .seh_startepilogue
58 ; CHECK64-NEXT: ldr d10, [sp, #176] // 8-byte Folded Reload
59 ; CHECK64-NEXT: .seh_save_freg d10, 176
60 ; CHECK64-NEXT: ldr d9, [sp, #168] // 8-byte Folded Reload
61 ; CHECK64-NEXT: .seh_save_freg d9, 168
62 ; CHECK64-NEXT: ldr x30, [sp, #96] // 8-byte Folded Reload
63 ; CHECK64-NEXT: .seh_save_reg x30, 96
64 ; CHECK64-NEXT: ldr x29, [sp, #88] // 8-byte Folded Reload
65 ; CHECK64-NEXT: .seh_save_reg x29, 88
66 ; CHECK64-NEXT: ldr x23, [sp, #80] // 8-byte Folded Reload
67 ; CHECK64-NEXT: .seh_save_reg x23, 80
68 ; CHECK64-NEXT: add sp, sp, #192
69 ; CHECK64-NEXT: .seh_stackalloc 192
70 ; CHECK64-NEXT: .seh_endepilogue
72 ; CHECK64-NEXT: .seh_endfunclet
73 ; CHECK64-NEXT: .seh_endproc
75 ; CHECK1024-LABEL: fpr_csr_stackobj:
76 ; CHECK1024: .seh_proc fpr_csr_stackobj
77 ; CHECK1024-NEXT: // %bb.0: // %entry
78 ; CHECK1024-NEXT: sub sp, sp, #1072
79 ; CHECK1024-NEXT: .seh_stackalloc 1072
80 ; CHECK1024-NEXT: str x23, [sp] // 8-byte Folded Spill
81 ; CHECK1024-NEXT: .seh_save_reg x23, 0
82 ; CHECK1024-NEXT: str x29, [sp, #8] // 8-byte Folded Spill
83 ; CHECK1024-NEXT: .seh_save_reg x29, 8
84 ; CHECK1024-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
85 ; CHECK1024-NEXT: .seh_save_reg x30, 16
86 ; CHECK1024-NEXT: str d9, [sp, #1048] // 8-byte Folded Spill
87 ; CHECK1024-NEXT: .seh_save_freg d9, 1048
88 ; CHECK1024-NEXT: str d10, [sp, #1056] // 8-byte Folded Spill
89 ; CHECK1024-NEXT: .seh_save_freg d10, 1056
90 ; CHECK1024-NEXT: add x29, sp, #8
91 ; CHECK1024-NEXT: .seh_add_fp 8
92 ; CHECK1024-NEXT: .seh_endprologue
93 ; CHECK1024-NEXT: sub sp, sp, #1040
94 ; CHECK1024-NEXT: mov w0, wzr
95 ; CHECK1024-NEXT: //APP
96 ; CHECK1024-NEXT: //NO_APP
97 ; CHECK1024-NEXT: stur d0, [x29, #-16]
98 ; CHECK1024-NEXT: .seh_startepilogue
99 ; CHECK1024-NEXT: add sp, sp, #1040
100 ; CHECK1024-NEXT: .seh_stackalloc 1040
101 ; CHECK1024-NEXT: ldr d10, [sp, #1056] // 8-byte Folded Reload
102 ; CHECK1024-NEXT: .seh_save_freg d10, 1056
103 ; CHECK1024-NEXT: ldr d9, [sp, #1048] // 8-byte Folded Reload
104 ; CHECK1024-NEXT: .seh_save_freg d9, 1048
105 ; CHECK1024-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
106 ; CHECK1024-NEXT: .seh_save_reg x30, 16
107 ; CHECK1024-NEXT: ldr x29, [sp, #8] // 8-byte Folded Reload
108 ; CHECK1024-NEXT: .seh_save_reg x29, 8
109 ; CHECK1024-NEXT: ldr x23, [sp] // 8-byte Folded Reload
110 ; CHECK1024-NEXT: .seh_save_reg x23, 0
111 ; CHECK1024-NEXT: add sp, sp, #1072
112 ; CHECK1024-NEXT: .seh_stackalloc 1072
113 ; CHECK1024-NEXT: .seh_endepilogue
114 ; CHECK1024-NEXT: ret
115 ; CHECK1024-NEXT: .seh_endfunclet
116 ; CHECK1024-NEXT: .seh_endproc
119 tail call void asm sideeffect "", "~{x23},~{d9},~{d10}"()
120 store double %x, ptr %a