1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s
3 ; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s
4 ; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
6 target triple = "aarch64-unknown-linux-gnu"
8 define <8 x i16> @load_zext_v8i8i16(ptr %ap) {
9 ; CHECK-LABEL: load_zext_v8i8i16:
11 ; CHECK-NEXT: ptrue p0.h, vl8
12 ; CHECK-NEXT: ld1b { z0.h }, p0/z, [x0]
13 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
16 ; NONEON-NOSVE-LABEL: load_zext_v8i8i16:
17 ; NONEON-NOSVE: // %bb.0:
18 ; NONEON-NOSVE-NEXT: sub sp, sp, #32
19 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32
20 ; NONEON-NOSVE-NEXT: ldr d0, [x0]
21 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
22 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]
23 ; NONEON-NOSVE-NEXT: strh w8, [sp, #30]
24 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]
25 ; NONEON-NOSVE-NEXT: strh w8, [sp, #28]
26 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]
27 ; NONEON-NOSVE-NEXT: strh w8, [sp, #26]
28 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]
29 ; NONEON-NOSVE-NEXT: strh w8, [sp, #24]
30 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]
31 ; NONEON-NOSVE-NEXT: strh w8, [sp, #22]
32 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]
33 ; NONEON-NOSVE-NEXT: strh w8, [sp, #20]
34 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]
35 ; NONEON-NOSVE-NEXT: strh w8, [sp, #18]
36 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]
37 ; NONEON-NOSVE-NEXT: strh w8, [sp, #16]
38 ; NONEON-NOSVE-NEXT: ldr q0, [sp, #16]
39 ; NONEON-NOSVE-NEXT: add sp, sp, #32
40 ; NONEON-NOSVE-NEXT: ret
41 %a = load <8 x i8>, ptr %ap
42 %val = zext <8 x i8> %a to <8 x i16>
46 define <4 x i32> @load_zext_v4i16i32(ptr %ap) {
47 ; CHECK-LABEL: load_zext_v4i16i32:
49 ; CHECK-NEXT: ptrue p0.s, vl4
50 ; CHECK-NEXT: ld1h { z0.s }, p0/z, [x0]
51 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
54 ; NONEON-NOSVE-LABEL: load_zext_v4i16i32:
55 ; NONEON-NOSVE: // %bb.0:
56 ; NONEON-NOSVE-NEXT: sub sp, sp, #32
57 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32
58 ; NONEON-NOSVE-NEXT: ldr d0, [x0]
59 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
60 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]
61 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]
62 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #24]
63 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]
64 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]
65 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #16]
66 ; NONEON-NOSVE-NEXT: ldr q0, [sp, #16]
67 ; NONEON-NOSVE-NEXT: add sp, sp, #32
68 ; NONEON-NOSVE-NEXT: ret
69 %a = load <4 x i16>, ptr %ap
70 %val = zext <4 x i16> %a to <4 x i32>
74 define <2 x i64> @load_zext_v2i32i64(ptr %ap) {
75 ; CHECK-LABEL: load_zext_v2i32i64:
77 ; CHECK-NEXT: ptrue p0.d, vl2
78 ; CHECK-NEXT: ld1w { z0.d }, p0/z, [x0]
79 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
82 ; NONEON-NOSVE-LABEL: load_zext_v2i32i64:
83 ; NONEON-NOSVE: // %bb.0:
84 ; NONEON-NOSVE-NEXT: sub sp, sp, #32
85 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32
86 ; NONEON-NOSVE-NEXT: ldr d0, [x0]
87 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
88 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #8]
89 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #24]
90 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #16]
91 ; NONEON-NOSVE-NEXT: ldr q0, [sp, #16]
92 ; NONEON-NOSVE-NEXT: add sp, sp, #32
93 ; NONEON-NOSVE-NEXT: ret
94 %a = load <2 x i32>, ptr %ap
95 %val = zext <2 x i32> %a to <2 x i64>
99 define <2 x i256> @load_zext_v2i64i256(ptr %ap) {
100 ; CHECK-LABEL: load_zext_v2i64i256:
102 ; CHECK-NEXT: ldr q0, [x0]
103 ; CHECK-NEXT: mov x1, xzr
104 ; CHECK-NEXT: mov x2, xzr
105 ; CHECK-NEXT: mov x3, xzr
106 ; CHECK-NEXT: mov x5, xzr
107 ; CHECK-NEXT: mov x6, xzr
108 ; CHECK-NEXT: mov z1.d, z0.d[1]
109 ; CHECK-NEXT: fmov x0, d0
110 ; CHECK-NEXT: mov x7, xzr
111 ; CHECK-NEXT: fmov x4, d1
114 ; NONEON-NOSVE-LABEL: load_zext_v2i64i256:
115 ; NONEON-NOSVE: // %bb.0:
116 ; NONEON-NOSVE-NEXT: ldr q0, [x0]
117 ; NONEON-NOSVE-NEXT: str q0, [sp, #-16]!
118 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
119 ; NONEON-NOSVE-NEXT: ldp x0, x4, [sp], #16
120 ; NONEON-NOSVE-NEXT: mov x1, xzr
121 ; NONEON-NOSVE-NEXT: mov x2, xzr
122 ; NONEON-NOSVE-NEXT: mov x3, xzr
123 ; NONEON-NOSVE-NEXT: mov x5, xzr
124 ; NONEON-NOSVE-NEXT: mov x6, xzr
125 ; NONEON-NOSVE-NEXT: mov x7, xzr
126 ; NONEON-NOSVE-NEXT: ret
127 %a = load <2 x i64>, ptr %ap
128 %val = zext <2 x i64> %a to <2 x i256>
132 define <16 x i32> @load_sext_v16i8i32(ptr %ap) {
133 ; CHECK-LABEL: load_sext_v16i8i32:
135 ; CHECK-NEXT: ptrue p0.s, vl4
136 ; CHECK-NEXT: mov w8, #4 // =0x4
137 ; CHECK-NEXT: mov w9, #8 // =0x8
138 ; CHECK-NEXT: mov w10, #12 // =0xc
139 ; CHECK-NEXT: ld1sb { z0.s }, p0/z, [x0]
140 ; CHECK-NEXT: ld1sb { z1.s }, p0/z, [x0, x8]
141 ; CHECK-NEXT: ld1sb { z2.s }, p0/z, [x0, x9]
142 ; CHECK-NEXT: ld1sb { z3.s }, p0/z, [x0, x10]
143 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
144 ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
145 ; CHECK-NEXT: // kill: def $q2 killed $q2 killed $z2
146 ; CHECK-NEXT: // kill: def $q3 killed $q3 killed $z3
149 ; NONEON-NOSVE-LABEL: load_sext_v16i8i32:
150 ; NONEON-NOSVE: // %bb.0:
151 ; NONEON-NOSVE-NEXT: sub sp, sp, #160
152 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
153 ; NONEON-NOSVE-NEXT: ldr q0, [x0]
154 ; NONEON-NOSVE-NEXT: str q0, [sp]
155 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
156 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
157 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #27]
158 ; NONEON-NOSVE-NEXT: strh w8, [sp, #62]
159 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #26]
160 ; NONEON-NOSVE-NEXT: strh w8, [sp, #60]
161 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #25]
162 ; NONEON-NOSVE-NEXT: strh w8, [sp, #58]
163 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #24]
164 ; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
165 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #31]
166 ; NONEON-NOSVE-NEXT: strh w8, [sp, #54]
167 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #30]
168 ; NONEON-NOSVE-NEXT: strh w8, [sp, #52]
169 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #29]
170 ; NONEON-NOSVE-NEXT: strh w8, [sp, #50]
171 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #28]
172 ; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
173 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #19]
174 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
175 ; NONEON-NOSVE-NEXT: strh w8, [sp, #46]
176 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #18]
177 ; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
178 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #17]
179 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
180 ; NONEON-NOSVE-NEXT: strh w8, [sp, #42]
181 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #16]
182 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #94]
183 ; NONEON-NOSVE-NEXT: strh w8, [sp, #40]
184 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #23]
185 ; NONEON-NOSVE-NEXT: strh w8, [sp, #38]
186 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #22]
187 ; NONEON-NOSVE-NEXT: strh w8, [sp, #36]
188 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #21]
189 ; NONEON-NOSVE-NEXT: strh w8, [sp, #34]
190 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #20]
191 ; NONEON-NOSVE-NEXT: strh w8, [sp, #32]
192 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #92]
193 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #32]
194 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
195 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #90]
196 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #88]
197 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
198 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #86]
199 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #84]
200 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #64]
201 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
202 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #82]
203 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #80]
204 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
205 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #78]
206 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #76]
207 ; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #128]
208 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
209 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #74]
210 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #72]
211 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
212 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #70]
213 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #68]
214 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #104]
215 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #66]
216 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #64]
217 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #96]
218 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #96]
219 ; NONEON-NOSVE-NEXT: add sp, sp, #160
220 ; NONEON-NOSVE-NEXT: ret
221 %a = load <16 x i8>, ptr %ap
222 %val = sext <16 x i8> %a to <16 x i32>
226 define <8 x i32> @load_sext_v8i16i32(ptr %ap) {
227 ; CHECK-LABEL: load_sext_v8i16i32:
229 ; CHECK-NEXT: ptrue p0.s, vl4
230 ; CHECK-NEXT: mov x8, #4 // =0x4
231 ; CHECK-NEXT: ld1sh { z1.s }, p0/z, [x0, x8, lsl #1]
232 ; CHECK-NEXT: ld1sh { z0.s }, p0/z, [x0]
233 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
234 ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
237 ; NONEON-NOSVE-LABEL: load_sext_v8i16i32:
238 ; NONEON-NOSVE: // %bb.0:
239 ; NONEON-NOSVE-NEXT: ldr q0, [x0]
240 ; NONEON-NOSVE-NEXT: str q0, [sp, #-64]!
241 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64
242 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
243 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
244 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #30]
245 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #28]
246 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
247 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #26]
248 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #24]
249 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
250 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #22]
251 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #20]
252 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]
253 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #18]
254 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #16]
255 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]
256 ; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #32]
257 ; NONEON-NOSVE-NEXT: add sp, sp, #64
258 ; NONEON-NOSVE-NEXT: ret
259 %a = load <8 x i16>, ptr %ap
260 %val = sext <8 x i16> %a to <8 x i32>
264 define <4 x i256> @load_sext_v4i32i256(ptr %ap) {
265 ; CHECK-LABEL: load_sext_v4i32i256:
267 ; CHECK-NEXT: ldr q0, [x0]
268 ; CHECK-NEXT: sunpklo z1.d, z0.s
269 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
270 ; CHECK-NEXT: sunpklo z0.d, z0.s
271 ; CHECK-NEXT: fmov x9, d1
272 ; CHECK-NEXT: mov z1.d, z1.d[1]
273 ; CHECK-NEXT: fmov x11, d0
274 ; CHECK-NEXT: mov z0.d, z0.d[1]
275 ; CHECK-NEXT: asr x10, x9, #63
276 ; CHECK-NEXT: stp x9, x10, [x8]
277 ; CHECK-NEXT: fmov x9, d1
278 ; CHECK-NEXT: asr x12, x11, #63
279 ; CHECK-NEXT: stp x10, x10, [x8, #16]
280 ; CHECK-NEXT: stp x11, x12, [x8, #64]
281 ; CHECK-NEXT: fmov x11, d0
282 ; CHECK-NEXT: asr x10, x9, #63
283 ; CHECK-NEXT: stp x12, x12, [x8, #80]
284 ; CHECK-NEXT: stp x10, x10, [x8, #48]
285 ; CHECK-NEXT: asr x12, x11, #63
286 ; CHECK-NEXT: stp x9, x10, [x8, #32]
287 ; CHECK-NEXT: stp x12, x12, [x8, #112]
288 ; CHECK-NEXT: stp x11, x12, [x8, #96]
291 ; NONEON-NOSVE-LABEL: load_sext_v4i32i256:
292 ; NONEON-NOSVE: // %bb.0:
293 ; NONEON-NOSVE-NEXT: ldr q0, [x0]
294 ; NONEON-NOSVE-NEXT: str q0, [sp, #-96]!
295 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96
296 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
297 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
298 ; NONEON-NOSVE-NEXT: ldpsw x9, x10, [sp, #24]
299 ; NONEON-NOSVE-NEXT: stp x9, x10, [sp, #48]
300 ; NONEON-NOSVE-NEXT: ldpsw x9, x10, [sp, #16]
301 ; NONEON-NOSVE-NEXT: stp x9, x10, [sp, #32]
302 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
303 ; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #64]
304 ; NONEON-NOSVE-NEXT: ldp x11, x9, [sp, #64]
305 ; NONEON-NOSVE-NEXT: ldp x12, x13, [sp, #80]
306 ; NONEON-NOSVE-NEXT: asr x10, x9, #63
307 ; NONEON-NOSVE-NEXT: asr x14, x11, #63
308 ; NONEON-NOSVE-NEXT: stp x10, x10, [x8, #112]
309 ; NONEON-NOSVE-NEXT: stp x9, x10, [x8, #96]
310 ; NONEON-NOSVE-NEXT: asr x9, x13, #63
311 ; NONEON-NOSVE-NEXT: asr x10, x12, #63
312 ; NONEON-NOSVE-NEXT: stp x14, x14, [x8, #80]
313 ; NONEON-NOSVE-NEXT: stp x11, x14, [x8, #64]
314 ; NONEON-NOSVE-NEXT: stp x9, x9, [x8, #48]
315 ; NONEON-NOSVE-NEXT: stp x13, x9, [x8, #32]
316 ; NONEON-NOSVE-NEXT: stp x10, x10, [x8, #16]
317 ; NONEON-NOSVE-NEXT: stp x12, x10, [x8]
318 ; NONEON-NOSVE-NEXT: add sp, sp, #96
319 ; NONEON-NOSVE-NEXT: ret
320 %a = load <4 x i32>, ptr %ap
321 %val = sext <4 x i32> %a to <4 x i256>
325 define <2 x i256> @load_sext_v2i64i256(ptr %ap) {
326 ; CHECK-LABEL: load_sext_v2i64i256:
328 ; CHECK-NEXT: ldr q0, [x0]
329 ; CHECK-NEXT: fmov x8, d0
330 ; CHECK-NEXT: mov z1.d, z0.d[1]
331 ; CHECK-NEXT: asr x9, x8, #63
332 ; CHECK-NEXT: fmov x10, d1
333 ; CHECK-NEXT: stp x8, x9, [sp, #-32]!
334 ; CHECK-NEXT: .cfi_def_cfa_offset 32
335 ; CHECK-NEXT: asr x8, x10, #63
336 ; CHECK-NEXT: mov z0.d, x9
337 ; CHECK-NEXT: stp x10, x8, [sp, #16]
338 ; CHECK-NEXT: mov z1.d, x8
339 ; CHECK-NEXT: ldp q2, q4, [sp], #32
340 ; CHECK-NEXT: mov z3.d, z0.d[1]
341 ; CHECK-NEXT: mov z5.d, z1.d[1]
342 ; CHECK-NEXT: mov z6.d, z2.d[1]
343 ; CHECK-NEXT: fmov x2, d0
344 ; CHECK-NEXT: mov z0.d, z4.d[1]
345 ; CHECK-NEXT: fmov x6, d1
346 ; CHECK-NEXT: fmov x0, d2
347 ; CHECK-NEXT: fmov x4, d4
348 ; CHECK-NEXT: fmov x3, d3
349 ; CHECK-NEXT: fmov x7, d5
350 ; CHECK-NEXT: fmov x1, d6
351 ; CHECK-NEXT: fmov x5, d0
354 ; NONEON-NOSVE-LABEL: load_sext_v2i64i256:
355 ; NONEON-NOSVE: // %bb.0:
356 ; NONEON-NOSVE-NEXT: sub sp, sp, #144
357 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 144
358 ; NONEON-NOSVE-NEXT: ldr q0, [x0]
359 ; NONEON-NOSVE-NEXT: str q0, [sp]
360 ; NONEON-NOSVE-NEXT: ldp x8, x10, [sp]
361 ; NONEON-NOSVE-NEXT: asr x9, x8, #63
362 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]
363 ; NONEON-NOSVE-NEXT: asr x8, x10, #63
364 ; NONEON-NOSVE-NEXT: stp x9, x9, [sp, #16]
365 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #16]
366 ; NONEON-NOSVE-NEXT: stp x10, x8, [sp, #64]
367 ; NONEON-NOSVE-NEXT: stp x8, x8, [sp, #48]
368 ; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #80]
369 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #48]
370 ; NONEON-NOSVE-NEXT: ldp x0, x1, [sp, #96]
371 ; NONEON-NOSVE-NEXT: ldp x2, x3, [sp, #80]
372 ; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #112]
373 ; NONEON-NOSVE-NEXT: ldp x4, x5, [sp, #128]
374 ; NONEON-NOSVE-NEXT: ldp x6, x7, [sp, #112]
375 ; NONEON-NOSVE-NEXT: add sp, sp, #144
376 ; NONEON-NOSVE-NEXT: ret
377 %a = load <2 x i64>, ptr %ap
378 %val = sext <2 x i64> %a to <2 x i256>
382 define <16 x i64> @load_zext_v16i16i64(ptr %ap) {
383 ; CHECK-LABEL: load_zext_v16i16i64:
385 ; CHECK-NEXT: ptrue p0.d, vl2
386 ; CHECK-NEXT: mov x8, #2 // =0x2
387 ; CHECK-NEXT: mov x9, #4 // =0x4
388 ; CHECK-NEXT: mov x10, #6 // =0x6
389 ; CHECK-NEXT: ld1h { z1.d }, p0/z, [x0, x8, lsl #1]
390 ; CHECK-NEXT: mov x8, #8 // =0x8
391 ; CHECK-NEXT: ld1h { z2.d }, p0/z, [x0, x9, lsl #1]
392 ; CHECK-NEXT: ld1h { z3.d }, p0/z, [x0, x10, lsl #1]
393 ; CHECK-NEXT: mov x9, #10 // =0xa
394 ; CHECK-NEXT: ld1h { z4.d }, p0/z, [x0, x8, lsl #1]
395 ; CHECK-NEXT: mov x8, #12 // =0xc
396 ; CHECK-NEXT: mov x10, #14 // =0xe
397 ; CHECK-NEXT: ld1h { z0.d }, p0/z, [x0]
398 ; CHECK-NEXT: ld1h { z5.d }, p0/z, [x0, x9, lsl #1]
399 ; CHECK-NEXT: ld1h { z6.d }, p0/z, [x0, x8, lsl #1]
400 ; CHECK-NEXT: ld1h { z7.d }, p0/z, [x0, x10, lsl #1]
401 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
402 ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
403 ; CHECK-NEXT: // kill: def $q2 killed $q2 killed $z2
404 ; CHECK-NEXT: // kill: def $q3 killed $q3 killed $z3
405 ; CHECK-NEXT: // kill: def $q4 killed $q4 killed $z4
406 ; CHECK-NEXT: // kill: def $q5 killed $q5 killed $z5
407 ; CHECK-NEXT: // kill: def $q6 killed $q6 killed $z6
408 ; CHECK-NEXT: // kill: def $q7 killed $q7 killed $z7
411 ; NONEON-NOSVE-LABEL: load_zext_v16i16i64:
412 ; NONEON-NOSVE: // %bb.0:
413 ; NONEON-NOSVE-NEXT: sub sp, sp, #336
414 ; NONEON-NOSVE-NEXT: str x29, [sp, #320] // 8-byte Folded Spill
415 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 336
416 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
417 ; NONEON-NOSVE-NEXT: ldp q0, q1, [x0]
418 ; NONEON-NOSVE-NEXT: str wzr, [sp, #316]
419 ; NONEON-NOSVE-NEXT: str wzr, [sp, #308]
420 ; NONEON-NOSVE-NEXT: ldr x29, [sp, #320] // 8-byte Folded Reload
421 ; NONEON-NOSVE-NEXT: str wzr, [sp, #300]
422 ; NONEON-NOSVE-NEXT: stp q0, q1, [sp]
423 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
424 ; NONEON-NOSVE-NEXT: str wzr, [sp, #292]
425 ; NONEON-NOSVE-NEXT: str wzr, [sp, #284]
426 ; NONEON-NOSVE-NEXT: str wzr, [sp, #276]
427 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #40]
428 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #16]
429 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #50]
430 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #48]
431 ; NONEON-NOSVE-NEXT: str wzr, [sp, #268]
432 ; NONEON-NOSVE-NEXT: str wzr, [sp, #260]
433 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #96]
434 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #54]
435 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #52]
436 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #56]
437 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #88]
438 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #42]
439 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #40]
440 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #88]
441 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #80]
442 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #46]
443 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #44]
444 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #72]
445 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #66]
446 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #64]
447 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #152]
448 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #72]
449 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
450 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #70]
451 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #68]
452 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
453 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #58]
454 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #56]
455 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #136]
456 ; NONEON-NOSVE-NEXT: ldp d2, d1, [sp, #120]
457 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
458 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #62]
459 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #60]
460 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #104]
461 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #160]
462 ; NONEON-NOSVE-NEXT: str d1, [sp, #328]
463 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #104]
464 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #248]
465 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #240]
466 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #152]
467 ; NONEON-NOSVE-NEXT: stp d1, d2, [sp, #176]
468 ; NONEON-NOSVE-NEXT: str d0, [sp, #168]
469 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #232]
470 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #224]
471 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #144]
472 ; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #224]
473 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #216]
474 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #208]
475 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #136]
476 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #192]
477 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #332]
478 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #200]
479 ; NONEON-NOSVE-NEXT: str w8, [sp, #312]
480 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #328]
481 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #192]
482 ; NONEON-NOSVE-NEXT: str w8, [sp, #304]
483 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #184]
484 ; NONEON-NOSVE-NEXT: str w9, [sp, #296]
485 ; NONEON-NOSVE-NEXT: str w8, [sp, #288]
486 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #176]
487 ; NONEON-NOSVE-NEXT: ldp q5, q4, [sp, #288]
488 ; NONEON-NOSVE-NEXT: str w9, [sp, #280]
489 ; NONEON-NOSVE-NEXT: str w8, [sp, #272]
490 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #168]
491 ; NONEON-NOSVE-NEXT: str w9, [sp, #264]
492 ; NONEON-NOSVE-NEXT: str w8, [sp, #256]
493 ; NONEON-NOSVE-NEXT: ldp q7, q6, [sp, #256]
494 ; NONEON-NOSVE-NEXT: add sp, sp, #336
495 ; NONEON-NOSVE-NEXT: ret
496 %a = load <16 x i16>, ptr %ap
497 %val = zext <16 x i16> %a to <16 x i64>