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:
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
94 ; PAIR-NEXT: stp x29, x30, [sp, #-32]! // 16-byte Folded Spill
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
173 call void @my_func2(<vscale x 16 x i8> %v)
177 define void @fhalf(<vscale x 8 x half> %v) #1{
178 ; NOPAIR-LABEL: fhalf:
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
249 ; PAIR-NEXT: stp x29, x30, [sp, #-32]! // 16-byte Folded Spill
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
307 define void @ffloat(<vscale x 4 x i32> %v) #2 {
308 ; NOPAIR-LABEL: ffloat:
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
380 ; PAIR-LABEL: ffloat:
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
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
457 attributes #0 = { nounwind "aarch64_pstate_sm_compatible" }
458 attributes #1 = { nounwind "aarch64_pstate_sm_enabled" }
459 attributes #2 = { nounwind "aarch64_pstate_sm_body" }