[Xtensa] Implement Windowed Register Option. (#124656)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sme-callee-save-restore-pairs.ll
blob980144d6ca584be1f78418a84084cf3b3490c5db
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu -aarch64-streaming-hazard-size=0 -mattr=+sme2 -mattr=+sve -aarch64-disable-multivector-spill-fill -verify-machineinstrs < %s | FileCheck %s --check-prefixes=NOPAIR
3 ; RUN: llc -mtriple=aarch64-linux-gnu -aarch64-streaming-hazard-size=0 -mattr=+sme -mattr=+sve -verify-machineinstrs < %s | FileCheck %s --check-prefixes=NOPAIR
4 ; RUN: llc -mtriple=aarch64-linux-gnu -aarch64-streaming-hazard-size=0 -mattr=+sme2  -mattr=+sve -verify-machineinstrs < %s | FileCheck %s --check-prefixes=PAIR
6 declare void @my_func()
7 declare void @my_func2(<vscale x 16 x i8> %v)
9 define void @fbyte(<vscale x 16 x i8> %v) #0{
10 ; NOPAIR-LABEL: fbyte:
11 ; NOPAIR:       // %bb.0:
12 ; NOPAIR-NEXT:    stp x29, x30, [sp, #-32]! // 16-byte Folded Spill
13 ; NOPAIR-NEXT:    cntd x9
14 ; NOPAIR-NEXT:    stp x9, x19, [sp, #16] // 16-byte Folded Spill
15 ; NOPAIR-NEXT:    addvl sp, sp, #-18
16 ; NOPAIR-NEXT:    str p15, [sp, #4, mul vl] // 2-byte Folded Spill
17 ; NOPAIR-NEXT:    str p14, [sp, #5, mul vl] // 2-byte Folded Spill
18 ; NOPAIR-NEXT:    str p13, [sp, #6, mul vl] // 2-byte Folded Spill
19 ; NOPAIR-NEXT:    str p12, [sp, #7, mul vl] // 2-byte Folded Spill
20 ; NOPAIR-NEXT:    str p11, [sp, #8, mul vl] // 2-byte Folded Spill
21 ; NOPAIR-NEXT:    str p10, [sp, #9, mul vl] // 2-byte Folded Spill
22 ; NOPAIR-NEXT:    str p9, [sp, #10, mul vl] // 2-byte Folded Spill
23 ; NOPAIR-NEXT:    str p8, [sp, #11, mul vl] // 2-byte Folded Spill
24 ; NOPAIR-NEXT:    str p7, [sp, #12, mul vl] // 2-byte Folded Spill
25 ; NOPAIR-NEXT:    str p6, [sp, #13, mul vl] // 2-byte Folded Spill
26 ; NOPAIR-NEXT:    str p5, [sp, #14, mul vl] // 2-byte Folded Spill
27 ; NOPAIR-NEXT:    str p4, [sp, #15, mul vl] // 2-byte Folded Spill
28 ; NOPAIR-NEXT:    str z23, [sp, #2, mul vl] // 16-byte Folded Spill
29 ; NOPAIR-NEXT:    str z22, [sp, #3, mul vl] // 16-byte Folded Spill
30 ; NOPAIR-NEXT:    str z21, [sp, #4, mul vl] // 16-byte Folded Spill
31 ; NOPAIR-NEXT:    str z20, [sp, #5, mul vl] // 16-byte Folded Spill
32 ; NOPAIR-NEXT:    str z19, [sp, #6, mul vl] // 16-byte Folded Spill
33 ; NOPAIR-NEXT:    str z18, [sp, #7, mul vl] // 16-byte Folded Spill
34 ; NOPAIR-NEXT:    str z17, [sp, #8, mul vl] // 16-byte Folded Spill
35 ; NOPAIR-NEXT:    str z16, [sp, #9, mul vl] // 16-byte Folded Spill
36 ; NOPAIR-NEXT:    str z15, [sp, #10, mul vl] // 16-byte Folded Spill
37 ; NOPAIR-NEXT:    str z14, [sp, #11, mul vl] // 16-byte Folded Spill
38 ; NOPAIR-NEXT:    str z13, [sp, #12, mul vl] // 16-byte Folded Spill
39 ; NOPAIR-NEXT:    str z12, [sp, #13, mul vl] // 16-byte Folded Spill
40 ; NOPAIR-NEXT:    str z11, [sp, #14, mul vl] // 16-byte Folded Spill
41 ; NOPAIR-NEXT:    str z10, [sp, #15, mul vl] // 16-byte Folded Spill
42 ; NOPAIR-NEXT:    str z9, [sp, #16, mul vl] // 16-byte Folded Spill
43 ; NOPAIR-NEXT:    str z8, [sp, #17, mul vl] // 16-byte Folded Spill
44 ; NOPAIR-NEXT:    addvl sp, sp, #-1
45 ; NOPAIR-NEXT:    str z0, [sp] // 16-byte Folded Spill
46 ; NOPAIR-NEXT:    bl __arm_sme_state
47 ; NOPAIR-NEXT:    and x19, x0, #0x1
48 ; NOPAIR-NEXT:    tbz w19, #0, .LBB0_2
49 ; NOPAIR-NEXT:  // %bb.1:
50 ; NOPAIR-NEXT:    smstop sm
51 ; NOPAIR-NEXT:  .LBB0_2:
52 ; NOPAIR-NEXT:    ldr z0, [sp] // 16-byte Folded Reload
53 ; NOPAIR-NEXT:    bl my_func2
54 ; NOPAIR-NEXT:    tbz w19, #0, .LBB0_4
55 ; NOPAIR-NEXT:  // %bb.3:
56 ; NOPAIR-NEXT:    smstart sm
57 ; NOPAIR-NEXT:  .LBB0_4:
58 ; NOPAIR-NEXT:    addvl sp, sp, #1
59 ; NOPAIR-NEXT:    ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload
60 ; NOPAIR-NEXT:    ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload
61 ; NOPAIR-NEXT:    ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload
62 ; NOPAIR-NEXT:    ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload
63 ; NOPAIR-NEXT:    ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload
64 ; NOPAIR-NEXT:    ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload
65 ; NOPAIR-NEXT:    ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload
66 ; NOPAIR-NEXT:    ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload
67 ; NOPAIR-NEXT:    ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload
68 ; NOPAIR-NEXT:    ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload
69 ; NOPAIR-NEXT:    ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload
70 ; NOPAIR-NEXT:    ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload
71 ; NOPAIR-NEXT:    ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload
72 ; NOPAIR-NEXT:    ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload
73 ; NOPAIR-NEXT:    ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload
74 ; NOPAIR-NEXT:    ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload
75 ; NOPAIR-NEXT:    ldr p15, [sp, #4, mul vl] // 2-byte Folded Reload
76 ; NOPAIR-NEXT:    ldr p14, [sp, #5, mul vl] // 2-byte Folded Reload
77 ; NOPAIR-NEXT:    ldr p13, [sp, #6, mul vl] // 2-byte Folded Reload
78 ; NOPAIR-NEXT:    ldr p12, [sp, #7, mul vl] // 2-byte Folded Reload
79 ; NOPAIR-NEXT:    ldr p11, [sp, #8, mul vl] // 2-byte Folded Reload
80 ; NOPAIR-NEXT:    ldr p10, [sp, #9, mul vl] // 2-byte Folded Reload
81 ; NOPAIR-NEXT:    ldr p9, [sp, #10, mul vl] // 2-byte Folded Reload
82 ; NOPAIR-NEXT:    ldr p8, [sp, #11, mul vl] // 2-byte Folded Reload
83 ; NOPAIR-NEXT:    ldr p7, [sp, #12, mul vl] // 2-byte Folded Reload
84 ; NOPAIR-NEXT:    ldr p6, [sp, #13, mul vl] // 2-byte Folded Reload
85 ; NOPAIR-NEXT:    ldr p5, [sp, #14, mul vl] // 2-byte Folded Reload
86 ; NOPAIR-NEXT:    ldr p4, [sp, #15, mul vl] // 2-byte Folded Reload
87 ; NOPAIR-NEXT:    addvl sp, sp, #18
88 ; NOPAIR-NEXT:    ldr x19, [sp, #24] // 8-byte Folded Reload
89 ; NOPAIR-NEXT:    ldp x29, x30, [sp], #32 // 16-byte Folded Reload
90 ; NOPAIR-NEXT:    ret
92 ; PAIR-LABEL: fbyte:
93 ; PAIR:       // %bb.0:
94 ; PAIR-NEXT:    stp x29, x30, [sp, #-32]! // 16-byte Folded Spill
95 ; PAIR-NEXT:    cntd x9
96 ; PAIR-NEXT:    stp x9, x19, [sp, #16] // 16-byte Folded Spill
97 ; PAIR-NEXT:    addvl sp, sp, #-18
98 ; PAIR-NEXT:    str p15, [sp, #4, mul vl] // 2-byte Folded Spill
99 ; PAIR-NEXT:    str p14, [sp, #5, mul vl] // 2-byte Folded Spill
100 ; PAIR-NEXT:    str p13, [sp, #6, mul vl] // 2-byte Folded Spill
101 ; PAIR-NEXT:    str p12, [sp, #7, mul vl] // 2-byte Folded Spill
102 ; PAIR-NEXT:    str p11, [sp, #8, mul vl] // 2-byte Folded Spill
103 ; PAIR-NEXT:    str p10, [sp, #9, mul vl] // 2-byte Folded Spill
104 ; PAIR-NEXT:    str p9, [sp, #10, mul vl] // 2-byte Folded Spill
105 ; PAIR-NEXT:    str p8, [sp, #11, mul vl] // 2-byte Folded Spill
106 ; PAIR-NEXT:    str p7, [sp, #12, mul vl] // 2-byte Folded Spill
107 ; PAIR-NEXT:    str p6, [sp, #13, mul vl] // 2-byte Folded Spill
108 ; PAIR-NEXT:    str p5, [sp, #14, mul vl] // 2-byte Folded Spill
109 ; PAIR-NEXT:    str p4, [sp, #15, mul vl] // 2-byte Folded Spill
110 ; PAIR-NEXT:    str z23, [sp, #2, mul vl] // 16-byte Folded Spill
111 ; PAIR-NEXT:    str z22, [sp, #3, mul vl] // 16-byte Folded Spill
112 ; PAIR-NEXT:    str z21, [sp, #4, mul vl] // 16-byte Folded Spill
113 ; PAIR-NEXT:    str z20, [sp, #5, mul vl] // 16-byte Folded Spill
114 ; PAIR-NEXT:    str z19, [sp, #6, mul vl] // 16-byte Folded Spill
115 ; PAIR-NEXT:    str z18, [sp, #7, mul vl] // 16-byte Folded Spill
116 ; PAIR-NEXT:    str z17, [sp, #8, mul vl] // 16-byte Folded Spill
117 ; PAIR-NEXT:    str z16, [sp, #9, mul vl] // 16-byte Folded Spill
118 ; PAIR-NEXT:    str z15, [sp, #10, mul vl] // 16-byte Folded Spill
119 ; PAIR-NEXT:    str z14, [sp, #11, mul vl] // 16-byte Folded Spill
120 ; PAIR-NEXT:    str z13, [sp, #12, mul vl] // 16-byte Folded Spill
121 ; PAIR-NEXT:    str z12, [sp, #13, mul vl] // 16-byte Folded Spill
122 ; PAIR-NEXT:    str z11, [sp, #14, mul vl] // 16-byte Folded Spill
123 ; PAIR-NEXT:    str z10, [sp, #15, mul vl] // 16-byte Folded Spill
124 ; PAIR-NEXT:    str z9, [sp, #16, mul vl] // 16-byte Folded Spill
125 ; PAIR-NEXT:    str z8, [sp, #17, mul vl] // 16-byte Folded Spill
126 ; PAIR-NEXT:    addvl sp, sp, #-1
127 ; PAIR-NEXT:    str z0, [sp] // 16-byte Folded Spill
128 ; PAIR-NEXT:    bl __arm_sme_state
129 ; PAIR-NEXT:    and x19, x0, #0x1
130 ; PAIR-NEXT:    tbz w19, #0, .LBB0_2
131 ; PAIR-NEXT:  // %bb.1:
132 ; PAIR-NEXT:    smstop sm
133 ; PAIR-NEXT:  .LBB0_2:
134 ; PAIR-NEXT:    ldr z0, [sp] // 16-byte Folded Reload
135 ; PAIR-NEXT:    bl my_func2
136 ; PAIR-NEXT:    tbz w19, #0, .LBB0_4
137 ; PAIR-NEXT:  // %bb.3:
138 ; PAIR-NEXT:    smstart sm
139 ; PAIR-NEXT:  .LBB0_4:
140 ; PAIR-NEXT:    addvl sp, sp, #1
141 ; PAIR-NEXT:    ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload
142 ; PAIR-NEXT:    ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload
143 ; PAIR-NEXT:    ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload
144 ; PAIR-NEXT:    ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload
145 ; PAIR-NEXT:    ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload
146 ; PAIR-NEXT:    ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload
147 ; PAIR-NEXT:    ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload
148 ; PAIR-NEXT:    ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload
149 ; PAIR-NEXT:    ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload
150 ; PAIR-NEXT:    ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload
151 ; PAIR-NEXT:    ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload
152 ; PAIR-NEXT:    ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload
153 ; PAIR-NEXT:    ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload
154 ; PAIR-NEXT:    ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload
155 ; PAIR-NEXT:    ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload
156 ; PAIR-NEXT:    ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload
157 ; PAIR-NEXT:    ldr p15, [sp, #4, mul vl] // 2-byte Folded Reload
158 ; PAIR-NEXT:    ldr p14, [sp, #5, mul vl] // 2-byte Folded Reload
159 ; PAIR-NEXT:    ldr p13, [sp, #6, mul vl] // 2-byte Folded Reload
160 ; PAIR-NEXT:    ldr p12, [sp, #7, mul vl] // 2-byte Folded Reload
161 ; PAIR-NEXT:    ldr p11, [sp, #8, mul vl] // 2-byte Folded Reload
162 ; PAIR-NEXT:    ldr p10, [sp, #9, mul vl] // 2-byte Folded Reload
163 ; PAIR-NEXT:    ldr p9, [sp, #10, mul vl] // 2-byte Folded Reload
164 ; PAIR-NEXT:    ldr p8, [sp, #11, mul vl] // 2-byte Folded Reload
165 ; PAIR-NEXT:    ldr p7, [sp, #12, mul vl] // 2-byte Folded Reload
166 ; PAIR-NEXT:    ldr p6, [sp, #13, mul vl] // 2-byte Folded Reload
167 ; PAIR-NEXT:    ldr p5, [sp, #14, mul vl] // 2-byte Folded Reload
168 ; PAIR-NEXT:    ldr p4, [sp, #15, mul vl] // 2-byte Folded Reload
169 ; PAIR-NEXT:    addvl sp, sp, #18
170 ; PAIR-NEXT:    ldr x19, [sp, #24] // 8-byte Folded Reload
171 ; PAIR-NEXT:    ldp x29, x30, [sp], #32 // 16-byte Folded Reload
172 ; PAIR-NEXT:    ret
173   call void @my_func2(<vscale x 16 x i8> %v)
174   ret void
177 define void @fhalf(<vscale x 8 x half> %v) #1{
178 ; NOPAIR-LABEL: fhalf:
179 ; NOPAIR:       // %bb.0:
180 ; NOPAIR-NEXT:    stp x29, x30, [sp, #-32]! // 16-byte Folded Spill
181 ; NOPAIR-NEXT:    cntd x9
182 ; NOPAIR-NEXT:    str x9, [sp, #16] // 8-byte Folded Spill
183 ; NOPAIR-NEXT:    addvl sp, sp, #-18
184 ; NOPAIR-NEXT:    str p15, [sp, #4, mul vl] // 2-byte Folded Spill
185 ; NOPAIR-NEXT:    str p14, [sp, #5, mul vl] // 2-byte Folded Spill
186 ; NOPAIR-NEXT:    str p13, [sp, #6, mul vl] // 2-byte Folded Spill
187 ; NOPAIR-NEXT:    str p12, [sp, #7, mul vl] // 2-byte Folded Spill
188 ; NOPAIR-NEXT:    str p11, [sp, #8, mul vl] // 2-byte Folded Spill
189 ; NOPAIR-NEXT:    str p10, [sp, #9, mul vl] // 2-byte Folded Spill
190 ; NOPAIR-NEXT:    str p9, [sp, #10, mul vl] // 2-byte Folded Spill
191 ; NOPAIR-NEXT:    str p8, [sp, #11, mul vl] // 2-byte Folded Spill
192 ; NOPAIR-NEXT:    str p7, [sp, #12, mul vl] // 2-byte Folded Spill
193 ; NOPAIR-NEXT:    str p6, [sp, #13, mul vl] // 2-byte Folded Spill
194 ; NOPAIR-NEXT:    str p5, [sp, #14, mul vl] // 2-byte Folded Spill
195 ; NOPAIR-NEXT:    str p4, [sp, #15, mul vl] // 2-byte Folded Spill
196 ; NOPAIR-NEXT:    str z23, [sp, #2, mul vl] // 16-byte Folded Spill
197 ; NOPAIR-NEXT:    str z22, [sp, #3, mul vl] // 16-byte Folded Spill
198 ; NOPAIR-NEXT:    str z21, [sp, #4, mul vl] // 16-byte Folded Spill
199 ; NOPAIR-NEXT:    str z20, [sp, #5, mul vl] // 16-byte Folded Spill
200 ; NOPAIR-NEXT:    str z19, [sp, #6, mul vl] // 16-byte Folded Spill
201 ; NOPAIR-NEXT:    str z18, [sp, #7, mul vl] // 16-byte Folded Spill
202 ; NOPAIR-NEXT:    str z17, [sp, #8, mul vl] // 16-byte Folded Spill
203 ; NOPAIR-NEXT:    str z16, [sp, #9, mul vl] // 16-byte Folded Spill
204 ; NOPAIR-NEXT:    str z15, [sp, #10, mul vl] // 16-byte Folded Spill
205 ; NOPAIR-NEXT:    str z14, [sp, #11, mul vl] // 16-byte Folded Spill
206 ; NOPAIR-NEXT:    str z13, [sp, #12, mul vl] // 16-byte Folded Spill
207 ; NOPAIR-NEXT:    str z12, [sp, #13, mul vl] // 16-byte Folded Spill
208 ; NOPAIR-NEXT:    str z11, [sp, #14, mul vl] // 16-byte Folded Spill
209 ; NOPAIR-NEXT:    str z10, [sp, #15, mul vl] // 16-byte Folded Spill
210 ; NOPAIR-NEXT:    str z9, [sp, #16, mul vl] // 16-byte Folded Spill
211 ; NOPAIR-NEXT:    str z8, [sp, #17, mul vl] // 16-byte Folded Spill
212 ; NOPAIR-NEXT:    smstop sm
213 ; NOPAIR-NEXT:    bl my_func
214 ; NOPAIR-NEXT:    smstart sm
215 ; NOPAIR-NEXT:    ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload
216 ; NOPAIR-NEXT:    ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload
217 ; NOPAIR-NEXT:    ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload
218 ; NOPAIR-NEXT:    ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload
219 ; NOPAIR-NEXT:    ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload
220 ; NOPAIR-NEXT:    ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload
221 ; NOPAIR-NEXT:    ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload
222 ; NOPAIR-NEXT:    ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload
223 ; NOPAIR-NEXT:    ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload
224 ; NOPAIR-NEXT:    ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload
225 ; NOPAIR-NEXT:    ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload
226 ; NOPAIR-NEXT:    ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload
227 ; NOPAIR-NEXT:    ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload
228 ; NOPAIR-NEXT:    ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload
229 ; NOPAIR-NEXT:    ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload
230 ; NOPAIR-NEXT:    ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload
231 ; NOPAIR-NEXT:    ldr p15, [sp, #4, mul vl] // 2-byte Folded Reload
232 ; NOPAIR-NEXT:    ldr p14, [sp, #5, mul vl] // 2-byte Folded Reload
233 ; NOPAIR-NEXT:    ldr p13, [sp, #6, mul vl] // 2-byte Folded Reload
234 ; NOPAIR-NEXT:    ldr p12, [sp, #7, mul vl] // 2-byte Folded Reload
235 ; NOPAIR-NEXT:    ldr p11, [sp, #8, mul vl] // 2-byte Folded Reload
236 ; NOPAIR-NEXT:    ldr p10, [sp, #9, mul vl] // 2-byte Folded Reload
237 ; NOPAIR-NEXT:    ldr p9, [sp, #10, mul vl] // 2-byte Folded Reload
238 ; NOPAIR-NEXT:    ldr p8, [sp, #11, mul vl] // 2-byte Folded Reload
239 ; NOPAIR-NEXT:    ldr p7, [sp, #12, mul vl] // 2-byte Folded Reload
240 ; NOPAIR-NEXT:    ldr p6, [sp, #13, mul vl] // 2-byte Folded Reload
241 ; NOPAIR-NEXT:    ldr p5, [sp, #14, mul vl] // 2-byte Folded Reload
242 ; NOPAIR-NEXT:    ldr p4, [sp, #15, mul vl] // 2-byte Folded Reload
243 ; NOPAIR-NEXT:    addvl sp, sp, #18
244 ; NOPAIR-NEXT:    ldp x29, x30, [sp], #32 // 16-byte Folded Reload
245 ; NOPAIR-NEXT:    ret
247 ; PAIR-LABEL: fhalf:
248 ; PAIR:       // %bb.0:
249 ; PAIR-NEXT:    stp x29, x30, [sp, #-32]! // 16-byte Folded Spill
250 ; PAIR-NEXT:    cntd x9
251 ; PAIR-NEXT:    str x9, [sp, #16] // 8-byte Folded Spill
252 ; PAIR-NEXT:    addvl sp, sp, #-18
253 ; PAIR-NEXT:    str p8, [sp, #11, mul vl] // 2-byte Folded Spill
254 ; PAIR-NEXT:    ptrue pn8.b
255 ; PAIR-NEXT:    str p15, [sp, #4, mul vl] // 2-byte Folded Spill
256 ; PAIR-NEXT:    st1b { z22.b, z23.b }, pn8, [sp, #2, mul vl] // 32-byte Folded Spill
257 ; PAIR-NEXT:    st1b { z20.b, z21.b }, pn8, [sp, #4, mul vl] // 32-byte Folded Spill
258 ; PAIR-NEXT:    str p14, [sp, #5, mul vl] // 2-byte Folded Spill
259 ; PAIR-NEXT:    st1b { z18.b, z19.b }, pn8, [sp, #6, mul vl] // 32-byte Folded Spill
260 ; PAIR-NEXT:    st1b { z16.b, z17.b }, pn8, [sp, #8, mul vl] // 32-byte Folded Spill
261 ; PAIR-NEXT:    str p13, [sp, #6, mul vl] // 2-byte Folded Spill
262 ; PAIR-NEXT:    st1b { z14.b, z15.b }, pn8, [sp, #10, mul vl] // 32-byte Folded Spill
263 ; PAIR-NEXT:    st1b { z12.b, z13.b }, pn8, [sp, #12, mul vl] // 32-byte Folded Spill
264 ; PAIR-NEXT:    str p12, [sp, #7, mul vl] // 2-byte Folded Spill
265 ; PAIR-NEXT:    st1b { z10.b, z11.b }, pn8, [sp, #14, mul vl] // 32-byte Folded Spill
266 ; PAIR-NEXT:    str p11, [sp, #8, mul vl] // 2-byte Folded Spill
267 ; PAIR-NEXT:    str p10, [sp, #9, mul vl] // 2-byte Folded Spill
268 ; PAIR-NEXT:    str p9, [sp, #10, mul vl] // 2-byte Folded Spill
269 ; PAIR-NEXT:    str p7, [sp, #12, mul vl] // 2-byte Folded Spill
270 ; PAIR-NEXT:    str p6, [sp, #13, mul vl] // 2-byte Folded Spill
271 ; PAIR-NEXT:    str p5, [sp, #14, mul vl] // 2-byte Folded Spill
272 ; PAIR-NEXT:    str p4, [sp, #15, mul vl] // 2-byte Folded Spill
273 ; PAIR-NEXT:    str z9, [sp, #16, mul vl] // 16-byte Folded Spill
274 ; PAIR-NEXT:    str z8, [sp, #17, mul vl] // 16-byte Folded Spill
275 ; PAIR-NEXT:    smstop sm
276 ; PAIR-NEXT:    bl my_func
277 ; PAIR-NEXT:    smstart sm
278 ; PAIR-NEXT:    ptrue pn8.b
279 ; PAIR-NEXT:    ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload
280 ; PAIR-NEXT:    ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload
281 ; PAIR-NEXT:    ld1b { z22.b, z23.b }, pn8/z, [sp, #2, mul vl] // 32-byte Folded Reload
282 ; PAIR-NEXT:    ld1b { z20.b, z21.b }, pn8/z, [sp, #4, mul vl] // 32-byte Folded Reload
283 ; PAIR-NEXT:    ld1b { z18.b, z19.b }, pn8/z, [sp, #6, mul vl] // 32-byte Folded Reload
284 ; PAIR-NEXT:    ld1b { z16.b, z17.b }, pn8/z, [sp, #8, mul vl] // 32-byte Folded Reload
285 ; PAIR-NEXT:    ld1b { z14.b, z15.b }, pn8/z, [sp, #10, mul vl] // 32-byte Folded Reload
286 ; PAIR-NEXT:    ld1b { z12.b, z13.b }, pn8/z, [sp, #12, mul vl] // 32-byte Folded Reload
287 ; PAIR-NEXT:    ld1b { z10.b, z11.b }, pn8/z, [sp, #14, mul vl] // 32-byte Folded Reload
288 ; PAIR-NEXT:    ldr p15, [sp, #4, mul vl] // 2-byte Folded Reload
289 ; PAIR-NEXT:    ldr p14, [sp, #5, mul vl] // 2-byte Folded Reload
290 ; PAIR-NEXT:    ldr p13, [sp, #6, mul vl] // 2-byte Folded Reload
291 ; PAIR-NEXT:    ldr p12, [sp, #7, mul vl] // 2-byte Folded Reload
292 ; PAIR-NEXT:    ldr p11, [sp, #8, mul vl] // 2-byte Folded Reload
293 ; PAIR-NEXT:    ldr p10, [sp, #9, mul vl] // 2-byte Folded Reload
294 ; PAIR-NEXT:    ldr p9, [sp, #10, mul vl] // 2-byte Folded Reload
295 ; PAIR-NEXT:    ldr p8, [sp, #11, mul vl] // 2-byte Folded Reload
296 ; PAIR-NEXT:    ldr p7, [sp, #12, mul vl] // 2-byte Folded Reload
297 ; PAIR-NEXT:    ldr p6, [sp, #13, mul vl] // 2-byte Folded Reload
298 ; PAIR-NEXT:    ldr p5, [sp, #14, mul vl] // 2-byte Folded Reload
299 ; PAIR-NEXT:    ldr p4, [sp, #15, mul vl] // 2-byte Folded Reload
300 ; PAIR-NEXT:    addvl sp, sp, #18
301 ; PAIR-NEXT:    ldp x29, x30, [sp], #32 // 16-byte Folded Reload
302 ; PAIR-NEXT:    ret
303   call void @my_func()
304   ret void
307 define void @ffloat(<vscale x 4 x i32> %v) #2 {
308 ; NOPAIR-LABEL: ffloat:
309 ; NOPAIR:       // %bb.0:
310 ; NOPAIR-NEXT:    stp x29, x30, [sp, #-32]! // 16-byte Folded Spill
311 ; NOPAIR-NEXT:    rdsvl x9, #1
312 ; NOPAIR-NEXT:    lsr x9, x9, #3
313 ; NOPAIR-NEXT:    str x9, [sp, #16] // 8-byte Folded Spill
314 ; NOPAIR-NEXT:    cntd x9
315 ; NOPAIR-NEXT:    str x9, [sp, #24] // 8-byte Folded Spill
316 ; NOPAIR-NEXT:    addsvl sp, sp, #-18
317 ; NOPAIR-NEXT:    str p15, [sp, #4, mul vl] // 2-byte Folded Spill
318 ; NOPAIR-NEXT:    str p14, [sp, #5, mul vl] // 2-byte Folded Spill
319 ; NOPAIR-NEXT:    str p13, [sp, #6, mul vl] // 2-byte Folded Spill
320 ; NOPAIR-NEXT:    str p12, [sp, #7, mul vl] // 2-byte Folded Spill
321 ; NOPAIR-NEXT:    str p11, [sp, #8, mul vl] // 2-byte Folded Spill
322 ; NOPAIR-NEXT:    str p10, [sp, #9, mul vl] // 2-byte Folded Spill
323 ; NOPAIR-NEXT:    str p9, [sp, #10, mul vl] // 2-byte Folded Spill
324 ; NOPAIR-NEXT:    str p8, [sp, #11, mul vl] // 2-byte Folded Spill
325 ; NOPAIR-NEXT:    str p7, [sp, #12, mul vl] // 2-byte Folded Spill
326 ; NOPAIR-NEXT:    str p6, [sp, #13, mul vl] // 2-byte Folded Spill
327 ; NOPAIR-NEXT:    str p5, [sp, #14, mul vl] // 2-byte Folded Spill
328 ; NOPAIR-NEXT:    str p4, [sp, #15, mul vl] // 2-byte Folded Spill
329 ; NOPAIR-NEXT:    str z23, [sp, #2, mul vl] // 16-byte Folded Spill
330 ; NOPAIR-NEXT:    str z22, [sp, #3, mul vl] // 16-byte Folded Spill
331 ; NOPAIR-NEXT:    str z21, [sp, #4, mul vl] // 16-byte Folded Spill
332 ; NOPAIR-NEXT:    str z20, [sp, #5, mul vl] // 16-byte Folded Spill
333 ; NOPAIR-NEXT:    str z19, [sp, #6, mul vl] // 16-byte Folded Spill
334 ; NOPAIR-NEXT:    str z18, [sp, #7, mul vl] // 16-byte Folded Spill
335 ; NOPAIR-NEXT:    str z17, [sp, #8, mul vl] // 16-byte Folded Spill
336 ; NOPAIR-NEXT:    str z16, [sp, #9, mul vl] // 16-byte Folded Spill
337 ; NOPAIR-NEXT:    str z15, [sp, #10, mul vl] // 16-byte Folded Spill
338 ; NOPAIR-NEXT:    str z14, [sp, #11, mul vl] // 16-byte Folded Spill
339 ; NOPAIR-NEXT:    str z13, [sp, #12, mul vl] // 16-byte Folded Spill
340 ; NOPAIR-NEXT:    str z12, [sp, #13, mul vl] // 16-byte Folded Spill
341 ; NOPAIR-NEXT:    str z11, [sp, #14, mul vl] // 16-byte Folded Spill
342 ; NOPAIR-NEXT:    str z10, [sp, #15, mul vl] // 16-byte Folded Spill
343 ; NOPAIR-NEXT:    str z9, [sp, #16, mul vl] // 16-byte Folded Spill
344 ; NOPAIR-NEXT:    str z8, [sp, #17, mul vl] // 16-byte Folded Spill
345 ; NOPAIR-NEXT:    smstart sm
346 ; NOPAIR-NEXT:    smstop sm
347 ; NOPAIR-NEXT:    bl my_func
348 ; NOPAIR-NEXT:    ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload
349 ; NOPAIR-NEXT:    ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload
350 ; NOPAIR-NEXT:    ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload
351 ; NOPAIR-NEXT:    ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload
352 ; NOPAIR-NEXT:    ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload
353 ; NOPAIR-NEXT:    ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload
354 ; NOPAIR-NEXT:    ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload
355 ; NOPAIR-NEXT:    ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload
356 ; NOPAIR-NEXT:    ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload
357 ; NOPAIR-NEXT:    ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload
358 ; NOPAIR-NEXT:    ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload
359 ; NOPAIR-NEXT:    ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload
360 ; NOPAIR-NEXT:    ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload
361 ; NOPAIR-NEXT:    ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload
362 ; NOPAIR-NEXT:    ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload
363 ; NOPAIR-NEXT:    ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload
364 ; NOPAIR-NEXT:    ldr p15, [sp, #4, mul vl] // 2-byte Folded Reload
365 ; NOPAIR-NEXT:    ldr p14, [sp, #5, mul vl] // 2-byte Folded Reload
366 ; NOPAIR-NEXT:    ldr p13, [sp, #6, mul vl] // 2-byte Folded Reload
367 ; NOPAIR-NEXT:    ldr p12, [sp, #7, mul vl] // 2-byte Folded Reload
368 ; NOPAIR-NEXT:    ldr p11, [sp, #8, mul vl] // 2-byte Folded Reload
369 ; NOPAIR-NEXT:    ldr p10, [sp, #9, mul vl] // 2-byte Folded Reload
370 ; NOPAIR-NEXT:    ldr p9, [sp, #10, mul vl] // 2-byte Folded Reload
371 ; NOPAIR-NEXT:    ldr p8, [sp, #11, mul vl] // 2-byte Folded Reload
372 ; NOPAIR-NEXT:    ldr p7, [sp, #12, mul vl] // 2-byte Folded Reload
373 ; NOPAIR-NEXT:    ldr p6, [sp, #13, mul vl] // 2-byte Folded Reload
374 ; NOPAIR-NEXT:    ldr p5, [sp, #14, mul vl] // 2-byte Folded Reload
375 ; NOPAIR-NEXT:    ldr p4, [sp, #15, mul vl] // 2-byte Folded Reload
376 ; NOPAIR-NEXT:    addsvl sp, sp, #18
377 ; NOPAIR-NEXT:    ldp x29, x30, [sp], #32 // 16-byte Folded Reload
378 ; NOPAIR-NEXT:    ret
380 ; PAIR-LABEL: ffloat:
381 ; PAIR:       // %bb.0:
382 ; PAIR-NEXT:    stp x29, x30, [sp, #-32]! // 16-byte Folded Spill
383 ; PAIR-NEXT:    rdsvl x9, #1
384 ; PAIR-NEXT:    lsr x9, x9, #3
385 ; PAIR-NEXT:    str x9, [sp, #16] // 8-byte Folded Spill
386 ; PAIR-NEXT:    cntd x9
387 ; PAIR-NEXT:    str x9, [sp, #24] // 8-byte Folded Spill
388 ; PAIR-NEXT:    addsvl sp, sp, #-18
389 ; PAIR-NEXT:    str p15, [sp, #4, mul vl] // 2-byte Folded Spill
390 ; PAIR-NEXT:    str p14, [sp, #5, mul vl] // 2-byte Folded Spill
391 ; PAIR-NEXT:    str p13, [sp, #6, mul vl] // 2-byte Folded Spill
392 ; PAIR-NEXT:    str p12, [sp, #7, mul vl] // 2-byte Folded Spill
393 ; PAIR-NEXT:    str p11, [sp, #8, mul vl] // 2-byte Folded Spill
394 ; PAIR-NEXT:    str p10, [sp, #9, mul vl] // 2-byte Folded Spill
395 ; PAIR-NEXT:    str p9, [sp, #10, mul vl] // 2-byte Folded Spill
396 ; PAIR-NEXT:    str p8, [sp, #11, mul vl] // 2-byte Folded Spill
397 ; PAIR-NEXT:    str p7, [sp, #12, mul vl] // 2-byte Folded Spill
398 ; PAIR-NEXT:    str p6, [sp, #13, mul vl] // 2-byte Folded Spill
399 ; PAIR-NEXT:    str p5, [sp, #14, mul vl] // 2-byte Folded Spill
400 ; PAIR-NEXT:    str p4, [sp, #15, mul vl] // 2-byte Folded Spill
401 ; PAIR-NEXT:    str z23, [sp, #2, mul vl] // 16-byte Folded Spill
402 ; PAIR-NEXT:    str z22, [sp, #3, mul vl] // 16-byte Folded Spill
403 ; PAIR-NEXT:    str z21, [sp, #4, mul vl] // 16-byte Folded Spill
404 ; PAIR-NEXT:    str z20, [sp, #5, mul vl] // 16-byte Folded Spill
405 ; PAIR-NEXT:    str z19, [sp, #6, mul vl] // 16-byte Folded Spill
406 ; PAIR-NEXT:    str z18, [sp, #7, mul vl] // 16-byte Folded Spill
407 ; PAIR-NEXT:    str z17, [sp, #8, mul vl] // 16-byte Folded Spill
408 ; PAIR-NEXT:    str z16, [sp, #9, mul vl] // 16-byte Folded Spill
409 ; PAIR-NEXT:    str z15, [sp, #10, mul vl] // 16-byte Folded Spill
410 ; PAIR-NEXT:    str z14, [sp, #11, mul vl] // 16-byte Folded Spill
411 ; PAIR-NEXT:    str z13, [sp, #12, mul vl] // 16-byte Folded Spill
412 ; PAIR-NEXT:    str z12, [sp, #13, mul vl] // 16-byte Folded Spill
413 ; PAIR-NEXT:    str z11, [sp, #14, mul vl] // 16-byte Folded Spill
414 ; PAIR-NEXT:    str z10, [sp, #15, mul vl] // 16-byte Folded Spill
415 ; PAIR-NEXT:    str z9, [sp, #16, mul vl] // 16-byte Folded Spill
416 ; PAIR-NEXT:    str z8, [sp, #17, mul vl] // 16-byte Folded Spill
417 ; PAIR-NEXT:    smstart sm
418 ; PAIR-NEXT:    smstop sm
419 ; PAIR-NEXT:    bl my_func
420 ; PAIR-NEXT:    ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload
421 ; PAIR-NEXT:    ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload
422 ; PAIR-NEXT:    ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload
423 ; PAIR-NEXT:    ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload
424 ; PAIR-NEXT:    ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload
425 ; PAIR-NEXT:    ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload
426 ; PAIR-NEXT:    ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload
427 ; PAIR-NEXT:    ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload
428 ; PAIR-NEXT:    ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload
429 ; PAIR-NEXT:    ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload
430 ; PAIR-NEXT:    ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload
431 ; PAIR-NEXT:    ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload
432 ; PAIR-NEXT:    ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload
433 ; PAIR-NEXT:    ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload
434 ; PAIR-NEXT:    ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload
435 ; PAIR-NEXT:    ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload
436 ; PAIR-NEXT:    ldr p15, [sp, #4, mul vl] // 2-byte Folded Reload
437 ; PAIR-NEXT:    ldr p14, [sp, #5, mul vl] // 2-byte Folded Reload
438 ; PAIR-NEXT:    ldr p13, [sp, #6, mul vl] // 2-byte Folded Reload
439 ; PAIR-NEXT:    ldr p12, [sp, #7, mul vl] // 2-byte Folded Reload
440 ; PAIR-NEXT:    ldr p11, [sp, #8, mul vl] // 2-byte Folded Reload
441 ; PAIR-NEXT:    ldr p10, [sp, #9, mul vl] // 2-byte Folded Reload
442 ; PAIR-NEXT:    ldr p9, [sp, #10, mul vl] // 2-byte Folded Reload
443 ; PAIR-NEXT:    ldr p8, [sp, #11, mul vl] // 2-byte Folded Reload
444 ; PAIR-NEXT:    ldr p7, [sp, #12, mul vl] // 2-byte Folded Reload
445 ; PAIR-NEXT:    ldr p6, [sp, #13, mul vl] // 2-byte Folded Reload
446 ; PAIR-NEXT:    ldr p5, [sp, #14, mul vl] // 2-byte Folded Reload
447 ; PAIR-NEXT:    ldr p4, [sp, #15, mul vl] // 2-byte Folded Reload
448 ; PAIR-NEXT:    addsvl sp, sp, #18
449 ; PAIR-NEXT:    ldp x29, x30, [sp], #32 // 16-byte Folded Reload
450 ; PAIR-NEXT:    ret
451   call void @my_func()
452   ret void
457 attributes #0 = { nounwind "aarch64_pstate_sm_compatible" }
458 attributes #1 = { nounwind "aarch64_pstate_sm_enabled" }
459 attributes #2 = { nounwind "aarch64_pstate_sm_body" }