1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s --check-prefixes=CHECK,SVE
3 ; RUN: llc -mattr=+sve2 -force-streaming-compatible < %s | FileCheck %s --check-prefixes=CHECK,SVE2
4 ; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s --check-prefixes=CHECK,SVE2
5 ; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
7 target triple = "aarch64-unknown-linux-gnu"
13 ; NOTE: Covers the scenario where a SIGN_EXTEND_INREG is required, whose inreg
14 ; type's element type is not byte based and thus cannot be lowered directly to
16 define void @sext_v8i1_v8i32(<8 x i1> %a, ptr %out) {
17 ; CHECK-LABEL: sext_v8i1_v8i32:
19 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
20 ; CHECK-NEXT: uunpklo z0.h, z0.b
21 ; CHECK-NEXT: uunpklo z1.s, z0.h
22 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
23 ; CHECK-NEXT: uunpklo z0.s, z0.h
24 ; CHECK-NEXT: lsl z1.s, z1.s, #31
25 ; CHECK-NEXT: lsl z0.s, z0.s, #31
26 ; CHECK-NEXT: asr z1.s, z1.s, #31
27 ; CHECK-NEXT: asr z0.s, z0.s, #31
28 ; CHECK-NEXT: stp q1, q0, [x0]
31 ; NONEON-NOSVE-LABEL: sext_v8i1_v8i32:
32 ; NONEON-NOSVE: // %bb.0:
33 ; NONEON-NOSVE-NEXT: sub sp, sp, #80
34 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 80
35 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
36 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]
37 ; NONEON-NOSVE-NEXT: strh w8, [sp, #22]
38 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]
39 ; NONEON-NOSVE-NEXT: strh w8, [sp, #20]
40 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]
41 ; NONEON-NOSVE-NEXT: strh w8, [sp, #18]
42 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]
43 ; NONEON-NOSVE-NEXT: strh w8, [sp, #16]
44 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]
45 ; NONEON-NOSVE-NEXT: strh w8, [sp, #30]
46 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]
47 ; NONEON-NOSVE-NEXT: strh w8, [sp, #28]
48 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]
49 ; NONEON-NOSVE-NEXT: strh w8, [sp, #26]
50 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]
51 ; NONEON-NOSVE-NEXT: strh w8, [sp, #24]
52 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #16]
53 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #32]
54 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #46]
55 ; NONEON-NOSVE-NEXT: ldrh w10, [sp, #44]
56 ; NONEON-NOSVE-NEXT: ldrh w12, [sp, #42]
57 ; NONEON-NOSVE-NEXT: ldrh w14, [sp, #40]
58 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #32]
59 ; NONEON-NOSVE-NEXT: ldrh w11, [sp, #34]
60 ; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
61 ; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
62 ; NONEON-NOSVE-NEXT: ldrh w13, [sp, #36]
63 ; NONEON-NOSVE-NEXT: ldrh w15, [sp, #38]
64 ; NONEON-NOSVE-NEXT: sbfx w12, w12, #0, #1
65 ; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
66 ; NONEON-NOSVE-NEXT: stp w10, w8, [sp, #72]
67 ; NONEON-NOSVE-NEXT: sbfx w8, w14, #0, #1
68 ; NONEON-NOSVE-NEXT: sbfx w10, w15, #0, #1
69 ; NONEON-NOSVE-NEXT: stp w8, w12, [sp, #64]
70 ; NONEON-NOSVE-NEXT: sbfx w12, w13, #0, #1
71 ; NONEON-NOSVE-NEXT: sbfx w8, w11, #0, #1
72 ; NONEON-NOSVE-NEXT: stp w12, w10, [sp, #56]
73 ; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #48]
74 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #48]
75 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
76 ; NONEON-NOSVE-NEXT: add sp, sp, #80
77 ; NONEON-NOSVE-NEXT: ret
78 %b = sext <8 x i1> %a to <8 x i32>
79 store <8 x i32> %b, ptr %out
87 ; NOTE: Covers the scenario where a SIGN_EXTEND_INREG is required, whose inreg
88 ; type's element type is not power-of-2 based and thus cannot be lowered
89 ; directly to an SVE instruction.
90 define void @sext_v4i3_v4i64(<4 x i3> %a, ptr %out) {
91 ; CHECK-LABEL: sext_v4i3_v4i64:
93 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
94 ; CHECK-NEXT: uunpklo z0.s, z0.h
95 ; CHECK-NEXT: uunpklo z1.d, z0.s
96 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
97 ; CHECK-NEXT: uunpklo z0.d, z0.s
98 ; CHECK-NEXT: lsl z1.d, z1.d, #61
99 ; CHECK-NEXT: lsl z0.d, z0.d, #61
100 ; CHECK-NEXT: asr z1.d, z1.d, #61
101 ; CHECK-NEXT: asr z0.d, z0.d, #61
102 ; CHECK-NEXT: stp q1, q0, [x0]
105 ; NONEON-NOSVE-LABEL: sext_v4i3_v4i64:
106 ; NONEON-NOSVE: // %bb.0:
107 ; NONEON-NOSVE-NEXT: ushll v0.4s, v0.4h, #0
108 ; NONEON-NOSVE-NEXT: str q0, [sp, #-64]!
109 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64
110 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp]
111 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #16]
112 ; NONEON-NOSVE-NEXT: ldp w9, w8, [sp, #24]
113 ; NONEON-NOSVE-NEXT: ldp w11, w10, [sp, #16]
114 ; NONEON-NOSVE-NEXT: sbfx x8, x8, #0, #3
115 ; NONEON-NOSVE-NEXT: sbfx x9, x9, #0, #3
116 ; NONEON-NOSVE-NEXT: sbfx x10, x10, #0, #3
117 ; NONEON-NOSVE-NEXT: stp x9, x8, [sp, #48]
118 ; NONEON-NOSVE-NEXT: sbfx x8, x11, #0, #3
119 ; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #32]
120 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
121 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
122 ; NONEON-NOSVE-NEXT: add sp, sp, #64
123 ; NONEON-NOSVE-NEXT: ret
124 %b = sext <4 x i3> %a to <4 x i64>
125 store <4 x i64> %b, ptr %out
133 define void @sext_v16i8_v16i16(<16 x i8> %a, ptr %out) {
134 ; CHECK-LABEL: sext_v16i8_v16i16:
136 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
137 ; CHECK-NEXT: sunpklo z1.h, z0.b
138 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
139 ; CHECK-NEXT: sunpklo z0.h, z0.b
140 ; CHECK-NEXT: stp q1, q0, [x0]
143 ; NONEON-NOSVE-LABEL: sext_v16i8_v16i16:
144 ; NONEON-NOSVE: // %bb.0:
145 ; NONEON-NOSVE-NEXT: str q0, [sp, #-64]!
146 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64
147 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
148 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
149 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #31]
150 ; NONEON-NOSVE-NEXT: strh w8, [sp, #62]
151 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #30]
152 ; NONEON-NOSVE-NEXT: strh w8, [sp, #60]
153 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #29]
154 ; NONEON-NOSVE-NEXT: strh w8, [sp, #58]
155 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #28]
156 ; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
157 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #27]
158 ; NONEON-NOSVE-NEXT: strh w8, [sp, #54]
159 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #26]
160 ; NONEON-NOSVE-NEXT: strh w8, [sp, #52]
161 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #25]
162 ; NONEON-NOSVE-NEXT: strh w8, [sp, #50]
163 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #24]
164 ; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
165 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #23]
166 ; NONEON-NOSVE-NEXT: strh w8, [sp, #46]
167 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #22]
168 ; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
169 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #21]
170 ; NONEON-NOSVE-NEXT: strh w8, [sp, #42]
171 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #20]
172 ; NONEON-NOSVE-NEXT: strh w8, [sp, #40]
173 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #19]
174 ; NONEON-NOSVE-NEXT: strh w8, [sp, #38]
175 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #18]
176 ; NONEON-NOSVE-NEXT: strh w8, [sp, #36]
177 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #17]
178 ; NONEON-NOSVE-NEXT: strh w8, [sp, #34]
179 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #16]
180 ; NONEON-NOSVE-NEXT: strh w8, [sp, #32]
181 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
182 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
183 ; NONEON-NOSVE-NEXT: add sp, sp, #64
184 ; NONEON-NOSVE-NEXT: ret
185 %b = sext <16 x i8> %a to <16 x i16>
186 store <16 x i16>%b, ptr %out
190 ; NOTE: Extra 'add' is to prevent the extend being combined with the load.
191 define void @sext_v32i8_v32i16(ptr %in, ptr %out) {
192 ; CHECK-LABEL: sext_v32i8_v32i16:
194 ; CHECK-NEXT: ldp q1, q0, [x0]
195 ; CHECK-NEXT: add z0.b, z0.b, z0.b
196 ; CHECK-NEXT: add z1.b, z1.b, z1.b
197 ; CHECK-NEXT: sunpklo z2.h, z0.b
198 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
199 ; CHECK-NEXT: sunpklo z3.h, z1.b
200 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
201 ; CHECK-NEXT: sunpklo z0.h, z0.b
202 ; CHECK-NEXT: sunpklo z1.h, z1.b
203 ; CHECK-NEXT: stp q2, q0, [x1, #32]
204 ; CHECK-NEXT: stp q3, q1, [x1]
207 ; NONEON-NOSVE-LABEL: sext_v32i8_v32i16:
208 ; NONEON-NOSVE: // %bb.0:
209 ; NONEON-NOSVE-NEXT: sub sp, sp, #272
210 ; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #176] // 16-byte Folded Spill
211 ; NONEON-NOSVE-NEXT: stp x28, x27, [sp, #192] // 16-byte Folded Spill
212 ; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #208] // 16-byte Folded Spill
213 ; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #224] // 16-byte Folded Spill
214 ; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #240] // 16-byte Folded Spill
215 ; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #256] // 16-byte Folded Spill
216 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 272
217 ; NONEON-NOSVE-NEXT: .cfi_offset w19, -8
218 ; NONEON-NOSVE-NEXT: .cfi_offset w20, -16
219 ; NONEON-NOSVE-NEXT: .cfi_offset w21, -24
220 ; NONEON-NOSVE-NEXT: .cfi_offset w22, -32
221 ; NONEON-NOSVE-NEXT: .cfi_offset w23, -40
222 ; NONEON-NOSVE-NEXT: .cfi_offset w24, -48
223 ; NONEON-NOSVE-NEXT: .cfi_offset w25, -56
224 ; NONEON-NOSVE-NEXT: .cfi_offset w26, -64
225 ; NONEON-NOSVE-NEXT: .cfi_offset w27, -72
226 ; NONEON-NOSVE-NEXT: .cfi_offset w28, -80
227 ; NONEON-NOSVE-NEXT: .cfi_offset w30, -88
228 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -96
229 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
230 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
231 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]
232 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #41]
233 ; NONEON-NOSVE-NEXT: ldrb w29, [sp, #18]
234 ; NONEON-NOSVE-NEXT: ldrb w27, [sp, #16]
235 ; NONEON-NOSVE-NEXT: ldrb w25, [sp, #30]
236 ; NONEON-NOSVE-NEXT: ldrb w23, [sp, #28]
237 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
238 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]
239 ; NONEON-NOSVE-NEXT: ldrb w21, [sp, #26]
240 ; NONEON-NOSVE-NEXT: ldrb w19, [sp, #24]
241 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #19]
242 ; NONEON-NOSVE-NEXT: ldrb w6, [sp, #38]
243 ; NONEON-NOSVE-NEXT: add w8, w8, w8
244 ; NONEON-NOSVE-NEXT: ldrb w28, [sp, #17]
245 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #22]
246 ; NONEON-NOSVE-NEXT: strb w8, [sp, #60]
247 ; NONEON-NOSVE-NEXT: add w8, w29, w29
248 ; NONEON-NOSVE-NEXT: ldrb w4, [sp, #36]
249 ; NONEON-NOSVE-NEXT: strb w8, [sp, #58]
250 ; NONEON-NOSVE-NEXT: add w8, w27, w27
251 ; NONEON-NOSVE-NEXT: ldrb w26, [sp, #31]
252 ; NONEON-NOSVE-NEXT: strb w8, [sp, #56]
253 ; NONEON-NOSVE-NEXT: add w8, w25, w25
254 ; NONEON-NOSVE-NEXT: add w9, w9, w9
255 ; NONEON-NOSVE-NEXT: strb w8, [sp, #54]
256 ; NONEON-NOSVE-NEXT: add w8, w23, w23
257 ; NONEON-NOSVE-NEXT: ldrb w2, [sp, #34]
258 ; NONEON-NOSVE-NEXT: strb w8, [sp, #52]
259 ; NONEON-NOSVE-NEXT: add w8, w21, w21
260 ; NONEON-NOSVE-NEXT: ldrb w24, [sp, #29]
261 ; NONEON-NOSVE-NEXT: strb w8, [sp, #50]
262 ; NONEON-NOSVE-NEXT: add w8, w19, w19
263 ; NONEON-NOSVE-NEXT: ldrb w17, [sp, #23]
264 ; NONEON-NOSVE-NEXT: strb w9, [sp, #59]
265 ; NONEON-NOSVE-NEXT: add w9, w28, w28
266 ; NONEON-NOSVE-NEXT: add w18, w16, w16
267 ; NONEON-NOSVE-NEXT: strb w8, [sp, #48]
268 ; NONEON-NOSVE-NEXT: add w8, w6, w6
269 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #32]
270 ; NONEON-NOSVE-NEXT: ldrb w22, [sp, #27]
271 ; NONEON-NOSVE-NEXT: strb w9, [sp, #57]
272 ; NONEON-NOSVE-NEXT: add w9, w26, w26
273 ; NONEON-NOSVE-NEXT: strb w8, [sp, #78]
274 ; NONEON-NOSVE-NEXT: add w8, w4, w4
275 ; NONEON-NOSVE-NEXT: ldrb w14, [sp, #46]
276 ; NONEON-NOSVE-NEXT: ldrb w20, [sp, #25]
277 ; NONEON-NOSVE-NEXT: ldrb w30, [sp, #21]
278 ; NONEON-NOSVE-NEXT: strb w9, [sp, #55]
279 ; NONEON-NOSVE-NEXT: add w9, w24, w24
280 ; NONEON-NOSVE-NEXT: strb w8, [sp, #76]
281 ; NONEON-NOSVE-NEXT: add w8, w2, w2
282 ; NONEON-NOSVE-NEXT: ldrb w12, [sp, #44]
283 ; NONEON-NOSVE-NEXT: add w17, w17, w17
284 ; NONEON-NOSVE-NEXT: strb w9, [sp, #53]
285 ; NONEON-NOSVE-NEXT: add w9, w22, w22
286 ; NONEON-NOSVE-NEXT: strb w8, [sp, #74]
287 ; NONEON-NOSVE-NEXT: add w8, w16, w16
288 ; NONEON-NOSVE-NEXT: ldrb w10, [sp, #42]
289 ; NONEON-NOSVE-NEXT: strb w17, [sp, #63]
290 ; NONEON-NOSVE-NEXT: add w17, w30, w30
291 ; NONEON-NOSVE-NEXT: strb w9, [sp, #51]
292 ; NONEON-NOSVE-NEXT: add w9, w20, w20
293 ; NONEON-NOSVE-NEXT: ldrb w7, [sp, #39]
294 ; NONEON-NOSVE-NEXT: strb w8, [sp, #72]
295 ; NONEON-NOSVE-NEXT: add w8, w14, w14
296 ; NONEON-NOSVE-NEXT: ldrb w5, [sp, #37]
297 ; NONEON-NOSVE-NEXT: strb w18, [sp, #62]
298 ; NONEON-NOSVE-NEXT: ldrb w3, [sp, #35]
299 ; NONEON-NOSVE-NEXT: ldrb w0, [sp, #33]
300 ; NONEON-NOSVE-NEXT: strb w17, [sp, #61]
301 ; NONEON-NOSVE-NEXT: ldrb w15, [sp, #47]
302 ; NONEON-NOSVE-NEXT: ldrb w13, [sp, #45]
303 ; NONEON-NOSVE-NEXT: strb w9, [sp, #49]
304 ; NONEON-NOSVE-NEXT: add w9, w7, w7
305 ; NONEON-NOSVE-NEXT: ldrb w11, [sp, #43]
306 ; NONEON-NOSVE-NEXT: strb w8, [sp, #70]
307 ; NONEON-NOSVE-NEXT: add w8, w12, w12
308 ; NONEON-NOSVE-NEXT: strb w8, [sp, #68]
309 ; NONEON-NOSVE-NEXT: add w8, w10, w10
310 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
311 ; NONEON-NOSVE-NEXT: strb w8, [sp, #66]
312 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Folded Reload
313 ; NONEON-NOSVE-NEXT: strb w9, [sp, #79]
314 ; NONEON-NOSVE-NEXT: add w9, w5, w5
315 ; NONEON-NOSVE-NEXT: strb w9, [sp, #77]
316 ; NONEON-NOSVE-NEXT: add w9, w3, w3
317 ; NONEON-NOSVE-NEXT: add w8, w8, w8
318 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
319 ; NONEON-NOSVE-NEXT: strb w8, [sp, #64]
320 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #95]
321 ; NONEON-NOSVE-NEXT: strb w9, [sp, #75]
322 ; NONEON-NOSVE-NEXT: add w9, w0, w0
323 ; NONEON-NOSVE-NEXT: strh w8, [sp, #142]
324 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #94]
325 ; NONEON-NOSVE-NEXT: strb w9, [sp, #73]
326 ; NONEON-NOSVE-NEXT: add w9, w15, w15
327 ; NONEON-NOSVE-NEXT: strh w8, [sp, #140]
328 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #93]
329 ; NONEON-NOSVE-NEXT: strb w9, [sp, #71]
330 ; NONEON-NOSVE-NEXT: add w9, w13, w13
331 ; NONEON-NOSVE-NEXT: strh w8, [sp, #138]
332 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #92]
333 ; NONEON-NOSVE-NEXT: strb w9, [sp, #69]
334 ; NONEON-NOSVE-NEXT: add w9, w11, w11
335 ; NONEON-NOSVE-NEXT: strh w8, [sp, #136]
336 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #91]
337 ; NONEON-NOSVE-NEXT: strb w9, [sp, #67]
338 ; NONEON-NOSVE-NEXT: ldr w9, [sp, #8] // 4-byte Folded Reload
339 ; NONEON-NOSVE-NEXT: strh w8, [sp, #134]
340 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #90]
341 ; NONEON-NOSVE-NEXT: add w9, w9, w9
342 ; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #256] // 16-byte Folded Reload
343 ; NONEON-NOSVE-NEXT: strh w8, [sp, #132]
344 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #89]
345 ; NONEON-NOSVE-NEXT: strb w9, [sp, #65]
346 ; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #240] // 16-byte Folded Reload
347 ; NONEON-NOSVE-NEXT: strh w8, [sp, #130]
348 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #88]
349 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #64]
350 ; NONEON-NOSVE-NEXT: strh w8, [sp, #128]
351 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #87]
352 ; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #224] // 16-byte Folded Reload
353 ; NONEON-NOSVE-NEXT: strh w8, [sp, #126]
354 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #86]
355 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #96]
356 ; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #208] // 16-byte Folded Reload
357 ; NONEON-NOSVE-NEXT: strh w8, [sp, #124]
358 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #85]
359 ; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #192] // 16-byte Folded Reload
360 ; NONEON-NOSVE-NEXT: strh w8, [sp, #122]
361 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #84]
362 ; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #176] // 16-byte Folded Reload
363 ; NONEON-NOSVE-NEXT: strh w8, [sp, #120]
364 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #83]
365 ; NONEON-NOSVE-NEXT: strh w8, [sp, #118]
366 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #82]
367 ; NONEON-NOSVE-NEXT: strh w8, [sp, #116]
368 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #81]
369 ; NONEON-NOSVE-NEXT: strh w8, [sp, #114]
370 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #80]
371 ; NONEON-NOSVE-NEXT: strh w8, [sp, #112]
372 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #111]
373 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #112]
374 ; NONEON-NOSVE-NEXT: strh w8, [sp, #174]
375 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #110]
376 ; NONEON-NOSVE-NEXT: strh w8, [sp, #172]
377 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #109]
378 ; NONEON-NOSVE-NEXT: strh w8, [sp, #170]
379 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #108]
380 ; NONEON-NOSVE-NEXT: strh w8, [sp, #168]
381 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #107]
382 ; NONEON-NOSVE-NEXT: strh w8, [sp, #166]
383 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #106]
384 ; NONEON-NOSVE-NEXT: strh w8, [sp, #164]
385 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #105]
386 ; NONEON-NOSVE-NEXT: strh w8, [sp, #162]
387 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #104]
388 ; NONEON-NOSVE-NEXT: strh w8, [sp, #160]
389 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #103]
390 ; NONEON-NOSVE-NEXT: strh w8, [sp, #158]
391 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #102]
392 ; NONEON-NOSVE-NEXT: strh w8, [sp, #156]
393 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #101]
394 ; NONEON-NOSVE-NEXT: strh w8, [sp, #154]
395 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #100]
396 ; NONEON-NOSVE-NEXT: strh w8, [sp, #152]
397 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #99]
398 ; NONEON-NOSVE-NEXT: strh w8, [sp, #150]
399 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #98]
400 ; NONEON-NOSVE-NEXT: strh w8, [sp, #148]
401 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #97]
402 ; NONEON-NOSVE-NEXT: strh w8, [sp, #146]
403 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #96]
404 ; NONEON-NOSVE-NEXT: strh w8, [sp, #144]
405 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #144]
406 ; NONEON-NOSVE-NEXT: stp q2, q3, [x1]
407 ; NONEON-NOSVE-NEXT: stp q1, q0, [x1, #32]
408 ; NONEON-NOSVE-NEXT: add sp, sp, #272
409 ; NONEON-NOSVE-NEXT: ret
410 %a = load <32 x i8>, ptr %in
411 %b = add <32 x i8> %a, %a
412 %c = sext <32 x i8> %b to <32 x i16>
413 store <32 x i16> %c, ptr %out
421 define void @sext_v8i8_v8i32(<8 x i8> %a, ptr %out) {
422 ; CHECK-LABEL: sext_v8i8_v8i32:
424 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
425 ; CHECK-NEXT: sunpklo z0.h, z0.b
426 ; CHECK-NEXT: sunpklo z1.s, z0.h
427 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
428 ; CHECK-NEXT: sunpklo z0.s, z0.h
429 ; CHECK-NEXT: stp q1, q0, [x0]
432 ; NONEON-NOSVE-LABEL: sext_v8i8_v8i32:
433 ; NONEON-NOSVE: // %bb.0:
434 ; NONEON-NOSVE-NEXT: sub sp, sp, #80
435 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 80
436 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
437 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #11]
438 ; NONEON-NOSVE-NEXT: strh w8, [sp, #30]
439 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #10]
440 ; NONEON-NOSVE-NEXT: strh w8, [sp, #28]
441 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #9]
442 ; NONEON-NOSVE-NEXT: strh w8, [sp, #26]
443 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #8]
444 ; NONEON-NOSVE-NEXT: strh w8, [sp, #24]
445 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #15]
446 ; NONEON-NOSVE-NEXT: strh w8, [sp, #22]
447 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #14]
448 ; NONEON-NOSVE-NEXT: strh w8, [sp, #20]
449 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #13]
450 ; NONEON-NOSVE-NEXT: strh w8, [sp, #18]
451 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #12]
452 ; NONEON-NOSVE-NEXT: strh w8, [sp, #16]
453 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #16]
454 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #32]
455 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #46]
456 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #44]
457 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #72]
458 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #42]
459 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #40]
460 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #64]
461 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #38]
462 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #36]
463 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
464 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #34]
465 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #32]
466 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
467 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #48]
468 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
469 ; NONEON-NOSVE-NEXT: add sp, sp, #80
470 ; NONEON-NOSVE-NEXT: ret
471 %b = sext <8 x i8> %a to <8 x i32>
472 store <8 x i32>%b, ptr %out
476 define void @sext_v16i8_v16i32(<16 x i8> %a, ptr %out) {
477 ; CHECK-LABEL: sext_v16i8_v16i32:
479 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
480 ; CHECK-NEXT: sunpklo z1.h, z0.b
481 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
482 ; CHECK-NEXT: sunpklo z0.h, z0.b
483 ; CHECK-NEXT: sunpklo z2.s, z1.h
484 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
485 ; CHECK-NEXT: sunpklo z1.s, z1.h
486 ; CHECK-NEXT: sunpklo z3.s, z0.h
487 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
488 ; CHECK-NEXT: sunpklo z0.s, z0.h
489 ; CHECK-NEXT: stp q2, q1, [x0]
490 ; CHECK-NEXT: stp q3, q0, [x0, #32]
493 ; NONEON-NOSVE-LABEL: sext_v16i8_v16i32:
494 ; NONEON-NOSVE: // %bb.0:
495 ; NONEON-NOSVE-NEXT: str q0, [sp, #-160]!
496 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
497 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
498 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
499 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #27]
500 ; NONEON-NOSVE-NEXT: strh w8, [sp, #62]
501 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #26]
502 ; NONEON-NOSVE-NEXT: strh w8, [sp, #60]
503 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #25]
504 ; NONEON-NOSVE-NEXT: strh w8, [sp, #58]
505 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #24]
506 ; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
507 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #31]
508 ; NONEON-NOSVE-NEXT: strh w8, [sp, #54]
509 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #30]
510 ; NONEON-NOSVE-NEXT: strh w8, [sp, #52]
511 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #29]
512 ; NONEON-NOSVE-NEXT: strh w8, [sp, #50]
513 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #28]
514 ; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
515 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #19]
516 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
517 ; NONEON-NOSVE-NEXT: strh w8, [sp, #46]
518 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #18]
519 ; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
520 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #17]
521 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
522 ; NONEON-NOSVE-NEXT: strh w8, [sp, #42]
523 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #16]
524 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #94]
525 ; NONEON-NOSVE-NEXT: strh w8, [sp, #40]
526 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #23]
527 ; NONEON-NOSVE-NEXT: strh w8, [sp, #38]
528 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #22]
529 ; NONEON-NOSVE-NEXT: strh w8, [sp, #36]
530 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #21]
531 ; NONEON-NOSVE-NEXT: strh w8, [sp, #34]
532 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #20]
533 ; NONEON-NOSVE-NEXT: strh w8, [sp, #32]
534 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #92]
535 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #32]
536 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
537 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #90]
538 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #88]
539 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
540 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #86]
541 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #84]
542 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #64]
543 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
544 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #82]
545 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #80]
546 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
547 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #78]
548 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #76]
549 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #128]
550 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
551 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #74]
552 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #72]
553 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
554 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #70]
555 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #68]
556 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #104]
557 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #66]
558 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #64]
559 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #96]
560 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #96]
561 ; NONEON-NOSVE-NEXT: stp q2, q3, [x0]
562 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0, #32]
563 ; NONEON-NOSVE-NEXT: add sp, sp, #160
564 ; NONEON-NOSVE-NEXT: ret
565 %b = sext <16 x i8> %a to <16 x i32>
566 store <16 x i32> %b, ptr %out
570 define void @sext_v32i8_v32i32(ptr %in, ptr %out) {
571 ; CHECK-LABEL: sext_v32i8_v32i32:
573 ; CHECK-NEXT: ldp q1, q0, [x0]
574 ; CHECK-NEXT: add z0.b, z0.b, z0.b
575 ; CHECK-NEXT: add z1.b, z1.b, z1.b
576 ; CHECK-NEXT: sunpklo z2.h, z0.b
577 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
578 ; CHECK-NEXT: sunpklo z3.h, z1.b
579 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
580 ; CHECK-NEXT: sunpklo z0.h, z0.b
581 ; CHECK-NEXT: sunpklo z1.h, z1.b
582 ; CHECK-NEXT: sunpklo z4.s, z2.h
583 ; CHECK-NEXT: ext z2.b, z2.b, z2.b, #8
584 ; CHECK-NEXT: sunpklo z5.s, z3.h
585 ; CHECK-NEXT: ext z3.b, z3.b, z3.b, #8
586 ; CHECK-NEXT: sunpklo z6.s, z0.h
587 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
588 ; CHECK-NEXT: sunpklo z2.s, z2.h
589 ; CHECK-NEXT: sunpklo z7.s, z1.h
590 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
591 ; CHECK-NEXT: sunpklo z3.s, z3.h
592 ; CHECK-NEXT: sunpklo z0.s, z0.h
593 ; CHECK-NEXT: sunpklo z1.s, z1.h
594 ; CHECK-NEXT: stp q4, q2, [x1, #64]
595 ; CHECK-NEXT: stp q5, q3, [x1]
596 ; CHECK-NEXT: stp q6, q0, [x1, #96]
597 ; CHECK-NEXT: stp q7, q1, [x1, #32]
600 ; NONEON-NOSVE-LABEL: sext_v32i8_v32i32:
601 ; NONEON-NOSVE: // %bb.0:
602 ; NONEON-NOSVE-NEXT: sub sp, sp, #464
603 ; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #368] // 16-byte Folded Spill
604 ; NONEON-NOSVE-NEXT: stp x28, x27, [sp, #384] // 16-byte Folded Spill
605 ; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #400] // 16-byte Folded Spill
606 ; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #416] // 16-byte Folded Spill
607 ; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #432] // 16-byte Folded Spill
608 ; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #448] // 16-byte Folded Spill
609 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 464
610 ; NONEON-NOSVE-NEXT: .cfi_offset w19, -8
611 ; NONEON-NOSVE-NEXT: .cfi_offset w20, -16
612 ; NONEON-NOSVE-NEXT: .cfi_offset w21, -24
613 ; NONEON-NOSVE-NEXT: .cfi_offset w22, -32
614 ; NONEON-NOSVE-NEXT: .cfi_offset w23, -40
615 ; NONEON-NOSVE-NEXT: .cfi_offset w24, -48
616 ; NONEON-NOSVE-NEXT: .cfi_offset w25, -56
617 ; NONEON-NOSVE-NEXT: .cfi_offset w26, -64
618 ; NONEON-NOSVE-NEXT: .cfi_offset w27, -72
619 ; NONEON-NOSVE-NEXT: .cfi_offset w28, -80
620 ; NONEON-NOSVE-NEXT: .cfi_offset w30, -88
621 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -96
622 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
623 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
624 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]
625 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #41]
626 ; NONEON-NOSVE-NEXT: ldrb w29, [sp, #18]
627 ; NONEON-NOSVE-NEXT: ldrb w27, [sp, #16]
628 ; NONEON-NOSVE-NEXT: ldrb w25, [sp, #30]
629 ; NONEON-NOSVE-NEXT: ldrb w23, [sp, #28]
630 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
631 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]
632 ; NONEON-NOSVE-NEXT: ldrb w21, [sp, #26]
633 ; NONEON-NOSVE-NEXT: ldrb w19, [sp, #24]
634 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #19]
635 ; NONEON-NOSVE-NEXT: ldrb w6, [sp, #38]
636 ; NONEON-NOSVE-NEXT: add w8, w8, w8
637 ; NONEON-NOSVE-NEXT: ldrb w28, [sp, #17]
638 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #22]
639 ; NONEON-NOSVE-NEXT: strb w8, [sp, #60]
640 ; NONEON-NOSVE-NEXT: add w8, w29, w29
641 ; NONEON-NOSVE-NEXT: ldrb w4, [sp, #36]
642 ; NONEON-NOSVE-NEXT: strb w8, [sp, #58]
643 ; NONEON-NOSVE-NEXT: add w8, w27, w27
644 ; NONEON-NOSVE-NEXT: ldrb w26, [sp, #31]
645 ; NONEON-NOSVE-NEXT: strb w8, [sp, #56]
646 ; NONEON-NOSVE-NEXT: add w8, w25, w25
647 ; NONEON-NOSVE-NEXT: add w9, w9, w9
648 ; NONEON-NOSVE-NEXT: strb w8, [sp, #54]
649 ; NONEON-NOSVE-NEXT: add w8, w23, w23
650 ; NONEON-NOSVE-NEXT: ldrb w2, [sp, #34]
651 ; NONEON-NOSVE-NEXT: strb w8, [sp, #52]
652 ; NONEON-NOSVE-NEXT: add w8, w21, w21
653 ; NONEON-NOSVE-NEXT: ldrb w24, [sp, #29]
654 ; NONEON-NOSVE-NEXT: strb w8, [sp, #50]
655 ; NONEON-NOSVE-NEXT: add w8, w19, w19
656 ; NONEON-NOSVE-NEXT: ldrb w17, [sp, #23]
657 ; NONEON-NOSVE-NEXT: strb w9, [sp, #59]
658 ; NONEON-NOSVE-NEXT: add w9, w28, w28
659 ; NONEON-NOSVE-NEXT: add w18, w16, w16
660 ; NONEON-NOSVE-NEXT: strb w8, [sp, #48]
661 ; NONEON-NOSVE-NEXT: add w8, w6, w6
662 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #32]
663 ; NONEON-NOSVE-NEXT: ldrb w22, [sp, #27]
664 ; NONEON-NOSVE-NEXT: strb w9, [sp, #57]
665 ; NONEON-NOSVE-NEXT: add w9, w26, w26
666 ; NONEON-NOSVE-NEXT: strb w8, [sp, #78]
667 ; NONEON-NOSVE-NEXT: add w8, w4, w4
668 ; NONEON-NOSVE-NEXT: ldrb w14, [sp, #46]
669 ; NONEON-NOSVE-NEXT: ldrb w20, [sp, #25]
670 ; NONEON-NOSVE-NEXT: ldrb w30, [sp, #21]
671 ; NONEON-NOSVE-NEXT: strb w9, [sp, #55]
672 ; NONEON-NOSVE-NEXT: add w9, w24, w24
673 ; NONEON-NOSVE-NEXT: strb w8, [sp, #76]
674 ; NONEON-NOSVE-NEXT: add w8, w2, w2
675 ; NONEON-NOSVE-NEXT: ldrb w12, [sp, #44]
676 ; NONEON-NOSVE-NEXT: add w17, w17, w17
677 ; NONEON-NOSVE-NEXT: strb w9, [sp, #53]
678 ; NONEON-NOSVE-NEXT: add w9, w22, w22
679 ; NONEON-NOSVE-NEXT: strb w8, [sp, #74]
680 ; NONEON-NOSVE-NEXT: add w8, w16, w16
681 ; NONEON-NOSVE-NEXT: ldrb w10, [sp, #42]
682 ; NONEON-NOSVE-NEXT: strb w17, [sp, #63]
683 ; NONEON-NOSVE-NEXT: add w17, w30, w30
684 ; NONEON-NOSVE-NEXT: strb w9, [sp, #51]
685 ; NONEON-NOSVE-NEXT: add w9, w20, w20
686 ; NONEON-NOSVE-NEXT: ldrb w7, [sp, #39]
687 ; NONEON-NOSVE-NEXT: strb w8, [sp, #72]
688 ; NONEON-NOSVE-NEXT: add w8, w14, w14
689 ; NONEON-NOSVE-NEXT: ldrb w5, [sp, #37]
690 ; NONEON-NOSVE-NEXT: strb w18, [sp, #62]
691 ; NONEON-NOSVE-NEXT: ldrb w3, [sp, #35]
692 ; NONEON-NOSVE-NEXT: ldrb w0, [sp, #33]
693 ; NONEON-NOSVE-NEXT: strb w17, [sp, #61]
694 ; NONEON-NOSVE-NEXT: ldrb w15, [sp, #47]
695 ; NONEON-NOSVE-NEXT: ldrb w13, [sp, #45]
696 ; NONEON-NOSVE-NEXT: strb w9, [sp, #49]
697 ; NONEON-NOSVE-NEXT: add w9, w7, w7
698 ; NONEON-NOSVE-NEXT: ldrb w11, [sp, #43]
699 ; NONEON-NOSVE-NEXT: strb w8, [sp, #70]
700 ; NONEON-NOSVE-NEXT: add w8, w12, w12
701 ; NONEON-NOSVE-NEXT: strb w8, [sp, #68]
702 ; NONEON-NOSVE-NEXT: add w8, w10, w10
703 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
704 ; NONEON-NOSVE-NEXT: strb w8, [sp, #66]
705 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Folded Reload
706 ; NONEON-NOSVE-NEXT: strb w9, [sp, #79]
707 ; NONEON-NOSVE-NEXT: add w9, w5, w5
708 ; NONEON-NOSVE-NEXT: strb w9, [sp, #77]
709 ; NONEON-NOSVE-NEXT: add w9, w3, w3
710 ; NONEON-NOSVE-NEXT: add w8, w8, w8
711 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
712 ; NONEON-NOSVE-NEXT: strb w8, [sp, #64]
713 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #91]
714 ; NONEON-NOSVE-NEXT: strb w9, [sp, #75]
715 ; NONEON-NOSVE-NEXT: add w9, w0, w0
716 ; NONEON-NOSVE-NEXT: strh w8, [sp, #134]
717 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #90]
718 ; NONEON-NOSVE-NEXT: strb w9, [sp, #73]
719 ; NONEON-NOSVE-NEXT: add w9, w15, w15
720 ; NONEON-NOSVE-NEXT: strh w8, [sp, #132]
721 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #89]
722 ; NONEON-NOSVE-NEXT: strb w9, [sp, #71]
723 ; NONEON-NOSVE-NEXT: add w9, w13, w13
724 ; NONEON-NOSVE-NEXT: strh w8, [sp, #130]
725 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #88]
726 ; NONEON-NOSVE-NEXT: strb w9, [sp, #69]
727 ; NONEON-NOSVE-NEXT: add w9, w11, w11
728 ; NONEON-NOSVE-NEXT: strh w8, [sp, #128]
729 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #95]
730 ; NONEON-NOSVE-NEXT: strb w9, [sp, #67]
731 ; NONEON-NOSVE-NEXT: ldr w9, [sp, #8] // 4-byte Folded Reload
732 ; NONEON-NOSVE-NEXT: strh w8, [sp, #142]
733 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #94]
734 ; NONEON-NOSVE-NEXT: add w9, w9, w9
735 ; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #448] // 16-byte Folded Reload
736 ; NONEON-NOSVE-NEXT: strh w8, [sp, #140]
737 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #93]
738 ; NONEON-NOSVE-NEXT: strb w9, [sp, #65]
739 ; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #432] // 16-byte Folded Reload
740 ; NONEON-NOSVE-NEXT: strh w8, [sp, #138]
741 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #92]
742 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #64]
743 ; NONEON-NOSVE-NEXT: strh w8, [sp, #136]
744 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #83]
745 ; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #416] // 16-byte Folded Reload
746 ; NONEON-NOSVE-NEXT: strh w8, [sp, #118]
747 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #82]
748 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #96]
749 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #128]
750 ; NONEON-NOSVE-NEXT: strh w8, [sp, #116]
751 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #81]
752 ; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #400] // 16-byte Folded Reload
753 ; NONEON-NOSVE-NEXT: strh w8, [sp, #114]
754 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #80]
755 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #192]
756 ; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #384] // 16-byte Folded Reload
757 ; NONEON-NOSVE-NEXT: strh w8, [sp, #112]
758 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #87]
759 ; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #368] // 16-byte Folded Reload
760 ; NONEON-NOSVE-NEXT: strh w8, [sp, #126]
761 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #86]
762 ; NONEON-NOSVE-NEXT: strh w8, [sp, #124]
763 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #85]
764 ; NONEON-NOSVE-NEXT: strh w8, [sp, #122]
765 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #84]
766 ; NONEON-NOSVE-NEXT: strh w8, [sp, #120]
767 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #107]
768 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #112]
769 ; NONEON-NOSVE-NEXT: strh w8, [sp, #166]
770 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #106]
771 ; NONEON-NOSVE-NEXT: strh w8, [sp, #164]
772 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #105]
773 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #176]
774 ; NONEON-NOSVE-NEXT: strh w8, [sp, #162]
775 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #104]
776 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #182]
777 ; NONEON-NOSVE-NEXT: strh w8, [sp, #160]
778 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #111]
779 ; NONEON-NOSVE-NEXT: strh w8, [sp, #174]
780 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #110]
781 ; NONEON-NOSVE-NEXT: strh w8, [sp, #172]
782 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #109]
783 ; NONEON-NOSVE-NEXT: strh w8, [sp, #170]
784 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #108]
785 ; NONEON-NOSVE-NEXT: strh w8, [sp, #168]
786 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #99]
787 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #160]
788 ; NONEON-NOSVE-NEXT: strh w8, [sp, #150]
789 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #98]
790 ; NONEON-NOSVE-NEXT: strh w8, [sp, #148]
791 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #97]
792 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #224]
793 ; NONEON-NOSVE-NEXT: strh w8, [sp, #146]
794 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #96]
795 ; NONEON-NOSVE-NEXT: strh w8, [sp, #144]
796 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #103]
797 ; NONEON-NOSVE-NEXT: strh w8, [sp, #158]
798 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #102]
799 ; NONEON-NOSVE-NEXT: strh w8, [sp, #156]
800 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #101]
801 ; NONEON-NOSVE-NEXT: strh w8, [sp, #154]
802 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #100]
803 ; NONEON-NOSVE-NEXT: strh w8, [sp, #152]
804 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #198]
805 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #144]
806 ; NONEON-NOSVE-NEXT: str w8, [sp, #284]
807 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #196]
808 ; NONEON-NOSVE-NEXT: str w8, [sp, #280]
809 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #194]
810 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #208]
811 ; NONEON-NOSVE-NEXT: str w8, [sp, #276]
812 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #192]
813 ; NONEON-NOSVE-NEXT: str w8, [sp, #272]
814 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #206]
815 ; NONEON-NOSVE-NEXT: str w8, [sp, #300]
816 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #204]
817 ; NONEON-NOSVE-NEXT: str w8, [sp, #296]
818 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #202]
819 ; NONEON-NOSVE-NEXT: str w8, [sp, #292]
820 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #200]
821 ; NONEON-NOSVE-NEXT: str w8, [sp, #288]
822 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #180]
823 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #272]
824 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #248]
825 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #178]
826 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #176]
827 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #240]
828 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #190]
829 ; NONEON-NOSVE-NEXT: str w8, [sp, #268]
830 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #188]
831 ; NONEON-NOSVE-NEXT: str w8, [sp, #264]
832 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #186]
833 ; NONEON-NOSVE-NEXT: str w8, [sp, #260]
834 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #184]
835 ; NONEON-NOSVE-NEXT: str w8, [sp, #256]
836 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #230]
837 ; NONEON-NOSVE-NEXT: ldp q3, q4, [sp, #240]
838 ; NONEON-NOSVE-NEXT: str w8, [sp, #348]
839 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #228]
840 ; NONEON-NOSVE-NEXT: str w8, [sp, #344]
841 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #226]
842 ; NONEON-NOSVE-NEXT: str w8, [sp, #340]
843 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #224]
844 ; NONEON-NOSVE-NEXT: str w8, [sp, #336]
845 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #238]
846 ; NONEON-NOSVE-NEXT: str w8, [sp, #364]
847 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #236]
848 ; NONEON-NOSVE-NEXT: str w8, [sp, #360]
849 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #234]
850 ; NONEON-NOSVE-NEXT: str w8, [sp, #356]
851 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #232]
852 ; NONEON-NOSVE-NEXT: str w8, [sp, #352]
853 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #214]
854 ; NONEON-NOSVE-NEXT: ldp q6, q7, [sp, #336]
855 ; NONEON-NOSVE-NEXT: str w8, [sp, #316]
856 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #212]
857 ; NONEON-NOSVE-NEXT: str w8, [sp, #312]
858 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #210]
859 ; NONEON-NOSVE-NEXT: str w8, [sp, #308]
860 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #208]
861 ; NONEON-NOSVE-NEXT: str w8, [sp, #304]
862 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #222]
863 ; NONEON-NOSVE-NEXT: str w8, [sp, #332]
864 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #220]
865 ; NONEON-NOSVE-NEXT: str w8, [sp, #328]
866 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #218]
867 ; NONEON-NOSVE-NEXT: str w8, [sp, #324]
868 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #216]
869 ; NONEON-NOSVE-NEXT: str w8, [sp, #320]
870 ; NONEON-NOSVE-NEXT: ldp q5, q2, [sp, #304]
871 ; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
872 ; NONEON-NOSVE-NEXT: stp q3, q4, [x1, #32]
873 ; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #64]
874 ; NONEON-NOSVE-NEXT: stp q5, q2, [x1, #96]
875 ; NONEON-NOSVE-NEXT: add sp, sp, #464
876 ; NONEON-NOSVE-NEXT: ret
877 %a = load <32 x i8>, ptr %in
878 %b = add <32 x i8> %a, %a
879 %c = sext <32 x i8> %b to <32 x i32>
880 store <32 x i32> %c, ptr %out
888 ; NOTE: v4i8 is an unpacked typed stored within a v4i16 container. The sign
889 ; extend is a two step process where the container is any_extend'd with the
890 ; result feeding an inreg sign extend.
891 define void @sext_v4i8_v4i64(<4 x i8> %a, ptr %out) {
892 ; CHECK-LABEL: sext_v4i8_v4i64:
894 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
895 ; CHECK-NEXT: ptrue p0.d, vl2
896 ; CHECK-NEXT: uunpklo z0.s, z0.h
897 ; CHECK-NEXT: uunpklo z1.d, z0.s
898 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
899 ; CHECK-NEXT: uunpklo z0.d, z0.s
900 ; CHECK-NEXT: sxtb z1.d, p0/m, z1.d
901 ; CHECK-NEXT: sxtb z0.d, p0/m, z0.d
902 ; CHECK-NEXT: stp q1, q0, [x0]
905 ; NONEON-NOSVE-LABEL: sext_v4i8_v4i64:
906 ; NONEON-NOSVE: // %bb.0:
907 ; NONEON-NOSVE-NEXT: ushll v0.4s, v0.4h, #0
908 ; NONEON-NOSVE-NEXT: str q0, [sp, #-64]!
909 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64
910 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp]
911 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #16]
912 ; NONEON-NOSVE-NEXT: ldrsb x8, [sp, #28]
913 ; NONEON-NOSVE-NEXT: ldrsb x9, [sp, #24]
914 ; NONEON-NOSVE-NEXT: ldrsb x10, [sp, #16]
915 ; NONEON-NOSVE-NEXT: ldrsb x11, [sp, #20]
916 ; NONEON-NOSVE-NEXT: stp x9, x8, [sp, #48]
917 ; NONEON-NOSVE-NEXT: stp x10, x11, [sp, #32]
918 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
919 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
920 ; NONEON-NOSVE-NEXT: add sp, sp, #64
921 ; NONEON-NOSVE-NEXT: ret
922 %b = sext <4 x i8> %a to <4 x i64>
923 store <4 x i64>%b, ptr %out
927 define void @sext_v8i8_v8i64(<8 x i8> %a, ptr %out) {
928 ; CHECK-LABEL: sext_v8i8_v8i64:
930 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
931 ; CHECK-NEXT: sunpklo z0.h, z0.b
932 ; CHECK-NEXT: sunpklo z1.s, z0.h
933 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
934 ; CHECK-NEXT: sunpklo z0.s, z0.h
935 ; CHECK-NEXT: sunpklo z2.d, z1.s
936 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
937 ; CHECK-NEXT: sunpklo z3.d, z0.s
938 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
939 ; CHECK-NEXT: sunpklo z1.d, z1.s
940 ; CHECK-NEXT: sunpklo z0.d, z0.s
941 ; CHECK-NEXT: stp q2, q1, [x0]
942 ; CHECK-NEXT: stp q3, q0, [x0, #32]
945 ; NONEON-NOSVE-LABEL: sext_v8i8_v8i64:
946 ; NONEON-NOSVE: // %bb.0:
947 ; NONEON-NOSVE-NEXT: sub sp, sp, #176
948 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 176
949 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
950 ; NONEON-NOSVE-NEXT: add x8, sp, #144
951 ; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #11]
952 ; NONEON-NOSVE-NEXT: strh w9, [sp, #30]
953 ; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #10]
954 ; NONEON-NOSVE-NEXT: strh w9, [sp, #28]
955 ; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #9]
956 ; NONEON-NOSVE-NEXT: strh w9, [sp, #26]
957 ; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #8]
958 ; NONEON-NOSVE-NEXT: strh w9, [sp, #24]
959 ; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #15]
960 ; NONEON-NOSVE-NEXT: strh w9, [sp, #22]
961 ; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #14]
962 ; NONEON-NOSVE-NEXT: strh w9, [sp, #20]
963 ; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #13]
964 ; NONEON-NOSVE-NEXT: strh w9, [sp, #18]
965 ; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #12]
966 ; NONEON-NOSVE-NEXT: strh w9, [sp, #16]
967 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #16]
968 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #32]
969 ; NONEON-NOSVE-NEXT: ldrsh w10, [sp, #42]
970 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #40]
971 ; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #64]
972 ; NONEON-NOSVE-NEXT: ldrsh w10, [sp, #46]
973 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #44]
974 ; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #72]
975 ; NONEON-NOSVE-NEXT: ldrsh w10, [sp, #34]
976 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #32]
977 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #64]
978 ; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #48]
979 ; NONEON-NOSVE-NEXT: ldrsh w10, [sp, #38]
980 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #36]
981 ; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #56]
982 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #96]
983 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #48]
984 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #80]
985 ; NONEON-NOSVE-NEXT: ldpsw x9, x10, [sp, #96]
986 ; NONEON-NOSVE-NEXT: stp x9, x10, [sp, #144]
987 ; NONEON-NOSVE-NEXT: ldpsw x9, x10, [sp, #104]
988 ; NONEON-NOSVE-NEXT: stp x9, x10, [sp, #160]
989 ; NONEON-NOSVE-NEXT: ldpsw x9, x10, [sp, #80]
990 ; NONEON-NOSVE-NEXT: stp x9, x10, [sp, #112]
991 ; NONEON-NOSVE-NEXT: ldpsw x9, x10, [sp, #88]
992 ; NONEON-NOSVE-NEXT: stp x9, x10, [sp, #128]
993 ; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #112]
994 ; NONEON-NOSVE-NEXT: ldp q2, q3, [x8]
995 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0, #32]
996 ; NONEON-NOSVE-NEXT: stp q2, q3, [x0]
997 ; NONEON-NOSVE-NEXT: add sp, sp, #176
998 ; NONEON-NOSVE-NEXT: ret
999 %b = sext <8 x i8> %a to <8 x i64>
1000 store <8 x i64>%b, ptr %out
1004 define void @sext_v16i8_v16i64(<16 x i8> %a, ptr %out) {
1005 ; CHECK-LABEL: sext_v16i8_v16i64:
1007 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
1008 ; CHECK-NEXT: sunpklo z1.h, z0.b
1009 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1010 ; CHECK-NEXT: sunpklo z0.h, z0.b
1011 ; CHECK-NEXT: sunpklo z2.s, z1.h
1012 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
1013 ; CHECK-NEXT: sunpklo z1.s, z1.h
1014 ; CHECK-NEXT: sunpklo z3.s, z0.h
1015 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1016 ; CHECK-NEXT: sunpklo z4.d, z2.s
1017 ; CHECK-NEXT: ext z2.b, z2.b, z2.b, #8
1018 ; CHECK-NEXT: sunpklo z0.s, z0.h
1019 ; CHECK-NEXT: sunpklo z6.d, z1.s
1020 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
1021 ; CHECK-NEXT: sunpklo z5.d, z3.s
1022 ; CHECK-NEXT: ext z3.b, z3.b, z3.b, #8
1023 ; CHECK-NEXT: sunpklo z2.d, z2.s
1024 ; CHECK-NEXT: sunpklo z1.d, z1.s
1025 ; CHECK-NEXT: sunpklo z7.d, z0.s
1026 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1027 ; CHECK-NEXT: sunpklo z3.d, z3.s
1028 ; CHECK-NEXT: stp q4, q2, [x0]
1029 ; CHECK-NEXT: sunpklo z0.d, z0.s
1030 ; CHECK-NEXT: stp q6, q1, [x0, #32]
1031 ; CHECK-NEXT: stp q5, q3, [x0, #64]
1032 ; CHECK-NEXT: stp q7, q0, [x0, #96]
1035 ; NONEON-NOSVE-LABEL: sext_v16i8_v16i64:
1036 ; NONEON-NOSVE: // %bb.0:
1037 ; NONEON-NOSVE-NEXT: sub sp, sp, #368
1038 ; NONEON-NOSVE-NEXT: str x29, [sp, #352] // 8-byte Folded Spill
1039 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 368
1040 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
1041 ; NONEON-NOSVE-NEXT: str q0, [sp]
1042 ; NONEON-NOSVE-NEXT: ldr x29, [sp, #352] // 8-byte Folded Reload
1043 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
1044 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #24]
1045 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #35]
1046 ; NONEON-NOSVE-NEXT: strh w8, [sp, #70]
1047 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #34]
1048 ; NONEON-NOSVE-NEXT: strh w8, [sp, #68]
1049 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #33]
1050 ; NONEON-NOSVE-NEXT: strh w8, [sp, #66]
1051 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #32]
1052 ; NONEON-NOSVE-NEXT: strh w8, [sp, #64]
1053 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #39]
1054 ; NONEON-NOSVE-NEXT: strh w8, [sp, #62]
1055 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #38]
1056 ; NONEON-NOSVE-NEXT: strh w8, [sp, #60]
1057 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #37]
1058 ; NONEON-NOSVE-NEXT: strh w8, [sp, #58]
1059 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #36]
1060 ; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
1061 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #27]
1062 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #56]
1063 ; NONEON-NOSVE-NEXT: strh w8, [sp, #54]
1064 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #26]
1065 ; NONEON-NOSVE-NEXT: strh w8, [sp, #52]
1066 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #25]
1067 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #88]
1068 ; NONEON-NOSVE-NEXT: strh w8, [sp, #50]
1069 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #24]
1070 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #98]
1071 ; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
1072 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #31]
1073 ; NONEON-NOSVE-NEXT: strh w8, [sp, #46]
1074 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #30]
1075 ; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
1076 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #29]
1077 ; NONEON-NOSVE-NEXT: strh w8, [sp, #42]
1078 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #28]
1079 ; NONEON-NOSVE-NEXT: strh w8, [sp, #40]
1080 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #96]
1081 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #40]
1082 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
1083 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #102]
1084 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #100]
1085 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #160]
1086 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #90]
1087 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #88]
1088 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #72]
1089 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #152]
1090 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
1091 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #94]
1092 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #92]
1093 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
1094 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #82]
1095 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #80]
1096 ; NONEON-NOSVE-NEXT: str d0, [sp, #360]
1097 ; NONEON-NOSVE-NEXT: ldp d2, d0, [sp, #136]
1098 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
1099 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #86]
1100 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #84]
1101 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
1102 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #74]
1103 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #72]
1104 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #208]
1105 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #120]
1106 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #104]
1107 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #78]
1108 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #76]
1109 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
1110 ; NONEON-NOSVE-NEXT: stp d0, d2, [sp, #192]
1111 ; NONEON-NOSVE-NEXT: ldp d2, d0, [sp, #104]
1112 ; NONEON-NOSVE-NEXT: str d2, [sp, #168]
1113 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #176]
1114 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #216]
1115 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #320]
1116 ; NONEON-NOSVE-NEXT: ldrsw x9, [sp, #364]
1117 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #360]
1118 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #336]
1119 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #200]
1120 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #320]
1121 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #288]
1122 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #208]
1123 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #304]
1124 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #184]
1125 ; NONEON-NOSVE-NEXT: ldp q3, q4, [sp, #288]
1126 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #256]
1127 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #192]
1128 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #272]
1129 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #168]
1130 ; NONEON-NOSVE-NEXT: ldp q6, q7, [sp, #256]
1131 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #224]
1132 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #176]
1133 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #240]
1134 ; NONEON-NOSVE-NEXT: ldp q5, q2, [sp, #224]
1135 ; NONEON-NOSVE-NEXT: stp q0, q1, [x0]
1136 ; NONEON-NOSVE-NEXT: stp q3, q4, [x0, #32]
1137 ; NONEON-NOSVE-NEXT: stp q6, q7, [x0, #64]
1138 ; NONEON-NOSVE-NEXT: stp q5, q2, [x0, #96]
1139 ; NONEON-NOSVE-NEXT: add sp, sp, #368
1140 ; NONEON-NOSVE-NEXT: ret
1141 %b = sext <16 x i8> %a to <16 x i64>
1142 store <16 x i64> %b, ptr %out
1146 define void @sext_v32i8_v32i64(ptr %in, ptr %out) {
1147 ; CHECK-LABEL: sext_v32i8_v32i64:
1149 ; CHECK-NEXT: ldp q1, q0, [x0]
1150 ; CHECK-NEXT: add z0.b, z0.b, z0.b
1151 ; CHECK-NEXT: add z1.b, z1.b, z1.b
1152 ; CHECK-NEXT: mov z2.d, z0.d
1153 ; CHECK-NEXT: sunpklo z0.h, z0.b
1154 ; CHECK-NEXT: mov z3.d, z1.d
1155 ; CHECK-NEXT: sunpklo z1.h, z1.b
1156 ; CHECK-NEXT: ext z2.b, z2.b, z2.b, #8
1157 ; CHECK-NEXT: ext z3.b, z3.b, z3.b, #8
1158 ; CHECK-NEXT: sunpklo z4.s, z0.h
1159 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1160 ; CHECK-NEXT: sunpklo z5.s, z1.h
1161 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
1162 ; CHECK-NEXT: sunpklo z2.h, z2.b
1163 ; CHECK-NEXT: sunpklo z3.h, z3.b
1164 ; CHECK-NEXT: sunpklo z0.s, z0.h
1165 ; CHECK-NEXT: sunpklo z16.d, z4.s
1166 ; CHECK-NEXT: ext z4.b, z4.b, z4.b, #8
1167 ; CHECK-NEXT: sunpklo z1.s, z1.h
1168 ; CHECK-NEXT: sunpklo z17.d, z5.s
1169 ; CHECK-NEXT: ext z5.b, z5.b, z5.b, #8
1170 ; CHECK-NEXT: sunpklo z6.s, z2.h
1171 ; CHECK-NEXT: sunpklo z7.s, z3.h
1172 ; CHECK-NEXT: ext z2.b, z2.b, z2.b, #8
1173 ; CHECK-NEXT: sunpklo z4.d, z4.s
1174 ; CHECK-NEXT: ext z3.b, z3.b, z3.b, #8
1175 ; CHECK-NEXT: sunpklo z19.d, z0.s
1176 ; CHECK-NEXT: sunpklo z5.d, z5.s
1177 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1178 ; CHECK-NEXT: sunpklo z2.s, z2.h
1179 ; CHECK-NEXT: sunpklo z18.d, z6.s
1180 ; CHECK-NEXT: ext z6.b, z6.b, z6.b, #8
1181 ; CHECK-NEXT: sunpklo z3.s, z3.h
1182 ; CHECK-NEXT: stp q16, q4, [x1, #128]
1183 ; CHECK-NEXT: mov z16.d, z7.d
1184 ; CHECK-NEXT: sunpklo z0.d, z0.s
1185 ; CHECK-NEXT: stp q17, q5, [x1]
1186 ; CHECK-NEXT: sunpklo z5.d, z7.s
1187 ; CHECK-NEXT: sunpklo z4.d, z6.s
1188 ; CHECK-NEXT: mov z6.d, z1.d
1189 ; CHECK-NEXT: ext z16.b, z16.b, z7.b, #8
1190 ; CHECK-NEXT: mov z7.d, z2.d
1191 ; CHECK-NEXT: stp q19, q0, [x1, #160]
1192 ; CHECK-NEXT: sunpklo z0.d, z2.s
1193 ; CHECK-NEXT: ext z6.b, z6.b, z1.b, #8
1194 ; CHECK-NEXT: sunpklo z1.d, z1.s
1195 ; CHECK-NEXT: stp q18, q4, [x1, #192]
1196 ; CHECK-NEXT: mov z4.d, z3.d
1197 ; CHECK-NEXT: ext z7.b, z7.b, z2.b, #8
1198 ; CHECK-NEXT: sunpklo z16.d, z16.s
1199 ; CHECK-NEXT: sunpklo z6.d, z6.s
1200 ; CHECK-NEXT: ext z4.b, z4.b, z3.b, #8
1201 ; CHECK-NEXT: sunpklo z2.d, z7.s
1202 ; CHECK-NEXT: sunpklo z3.d, z3.s
1203 ; CHECK-NEXT: stp q5, q16, [x1, #64]
1204 ; CHECK-NEXT: stp q1, q6, [x1, #32]
1205 ; CHECK-NEXT: sunpklo z1.d, z4.s
1206 ; CHECK-NEXT: stp q0, q2, [x1, #224]
1207 ; CHECK-NEXT: stp q3, q1, [x1, #96]
1210 ; NONEON-NOSVE-LABEL: sext_v32i8_v32i64:
1211 ; NONEON-NOSVE: // %bb.0:
1212 ; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #-96]! // 16-byte Folded Spill
1213 ; NONEON-NOSVE-NEXT: stp x28, x27, [sp, #16] // 16-byte Folded Spill
1214 ; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #32] // 16-byte Folded Spill
1215 ; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #48] // 16-byte Folded Spill
1216 ; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #64] // 16-byte Folded Spill
1217 ; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill
1218 ; NONEON-NOSVE-NEXT: sub sp, sp, #752
1219 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 848
1220 ; NONEON-NOSVE-NEXT: .cfi_offset w19, -8
1221 ; NONEON-NOSVE-NEXT: .cfi_offset w20, -16
1222 ; NONEON-NOSVE-NEXT: .cfi_offset w21, -24
1223 ; NONEON-NOSVE-NEXT: .cfi_offset w22, -32
1224 ; NONEON-NOSVE-NEXT: .cfi_offset w23, -40
1225 ; NONEON-NOSVE-NEXT: .cfi_offset w24, -48
1226 ; NONEON-NOSVE-NEXT: .cfi_offset w25, -56
1227 ; NONEON-NOSVE-NEXT: .cfi_offset w26, -64
1228 ; NONEON-NOSVE-NEXT: .cfi_offset w27, -72
1229 ; NONEON-NOSVE-NEXT: .cfi_offset w28, -80
1230 ; NONEON-NOSVE-NEXT: .cfi_offset w30, -88
1231 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -96
1232 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
1233 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
1234 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]
1235 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #41]
1236 ; NONEON-NOSVE-NEXT: ldrb w29, [sp, #18]
1237 ; NONEON-NOSVE-NEXT: ldrb w27, [sp, #16]
1238 ; NONEON-NOSVE-NEXT: ldrb w25, [sp, #30]
1239 ; NONEON-NOSVE-NEXT: ldrb w23, [sp, #28]
1240 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
1241 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]
1242 ; NONEON-NOSVE-NEXT: ldrb w21, [sp, #26]
1243 ; NONEON-NOSVE-NEXT: ldrb w19, [sp, #24]
1244 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #19]
1245 ; NONEON-NOSVE-NEXT: ldrb w6, [sp, #38]
1246 ; NONEON-NOSVE-NEXT: add w8, w8, w8
1247 ; NONEON-NOSVE-NEXT: ldrb w28, [sp, #17]
1248 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #22]
1249 ; NONEON-NOSVE-NEXT: strb w8, [sp, #60]
1250 ; NONEON-NOSVE-NEXT: add w8, w29, w29
1251 ; NONEON-NOSVE-NEXT: ldrb w4, [sp, #36]
1252 ; NONEON-NOSVE-NEXT: strb w8, [sp, #58]
1253 ; NONEON-NOSVE-NEXT: add w8, w27, w27
1254 ; NONEON-NOSVE-NEXT: ldrb w26, [sp, #31]
1255 ; NONEON-NOSVE-NEXT: strb w8, [sp, #56]
1256 ; NONEON-NOSVE-NEXT: add w8, w25, w25
1257 ; NONEON-NOSVE-NEXT: add w9, w9, w9
1258 ; NONEON-NOSVE-NEXT: strb w8, [sp, #54]
1259 ; NONEON-NOSVE-NEXT: add w8, w23, w23
1260 ; NONEON-NOSVE-NEXT: ldrb w2, [sp, #34]
1261 ; NONEON-NOSVE-NEXT: strb w8, [sp, #52]
1262 ; NONEON-NOSVE-NEXT: add w8, w21, w21
1263 ; NONEON-NOSVE-NEXT: ldrb w24, [sp, #29]
1264 ; NONEON-NOSVE-NEXT: strb w8, [sp, #50]
1265 ; NONEON-NOSVE-NEXT: add w8, w19, w19
1266 ; NONEON-NOSVE-NEXT: ldrb w17, [sp, #23]
1267 ; NONEON-NOSVE-NEXT: strb w9, [sp, #59]
1268 ; NONEON-NOSVE-NEXT: add w9, w28, w28
1269 ; NONEON-NOSVE-NEXT: add w18, w16, w16
1270 ; NONEON-NOSVE-NEXT: strb w8, [sp, #48]
1271 ; NONEON-NOSVE-NEXT: add w8, w6, w6
1272 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #32]
1273 ; NONEON-NOSVE-NEXT: ldrb w22, [sp, #27]
1274 ; NONEON-NOSVE-NEXT: strb w9, [sp, #57]
1275 ; NONEON-NOSVE-NEXT: add w9, w26, w26
1276 ; NONEON-NOSVE-NEXT: strb w8, [sp, #78]
1277 ; NONEON-NOSVE-NEXT: add w8, w4, w4
1278 ; NONEON-NOSVE-NEXT: ldrb w14, [sp, #46]
1279 ; NONEON-NOSVE-NEXT: ldrb w20, [sp, #25]
1280 ; NONEON-NOSVE-NEXT: ldrb w30, [sp, #21]
1281 ; NONEON-NOSVE-NEXT: strb w9, [sp, #55]
1282 ; NONEON-NOSVE-NEXT: add w9, w24, w24
1283 ; NONEON-NOSVE-NEXT: strb w8, [sp, #76]
1284 ; NONEON-NOSVE-NEXT: add w8, w2, w2
1285 ; NONEON-NOSVE-NEXT: ldrb w12, [sp, #44]
1286 ; NONEON-NOSVE-NEXT: add w17, w17, w17
1287 ; NONEON-NOSVE-NEXT: strb w9, [sp, #53]
1288 ; NONEON-NOSVE-NEXT: add w9, w22, w22
1289 ; NONEON-NOSVE-NEXT: strb w8, [sp, #74]
1290 ; NONEON-NOSVE-NEXT: add w8, w16, w16
1291 ; NONEON-NOSVE-NEXT: ldrb w10, [sp, #42]
1292 ; NONEON-NOSVE-NEXT: strb w17, [sp, #63]
1293 ; NONEON-NOSVE-NEXT: add w17, w30, w30
1294 ; NONEON-NOSVE-NEXT: strb w9, [sp, #51]
1295 ; NONEON-NOSVE-NEXT: add w9, w20, w20
1296 ; NONEON-NOSVE-NEXT: ldrb w7, [sp, #39]
1297 ; NONEON-NOSVE-NEXT: strb w8, [sp, #72]
1298 ; NONEON-NOSVE-NEXT: add w8, w14, w14
1299 ; NONEON-NOSVE-NEXT: ldrb w5, [sp, #37]
1300 ; NONEON-NOSVE-NEXT: strb w18, [sp, #62]
1301 ; NONEON-NOSVE-NEXT: ldrb w3, [sp, #35]
1302 ; NONEON-NOSVE-NEXT: ldrb w0, [sp, #33]
1303 ; NONEON-NOSVE-NEXT: strb w17, [sp, #61]
1304 ; NONEON-NOSVE-NEXT: ldrb w15, [sp, #47]
1305 ; NONEON-NOSVE-NEXT: ldrb w13, [sp, #45]
1306 ; NONEON-NOSVE-NEXT: strb w9, [sp, #49]
1307 ; NONEON-NOSVE-NEXT: add w9, w7, w7
1308 ; NONEON-NOSVE-NEXT: ldrb w11, [sp, #43]
1309 ; NONEON-NOSVE-NEXT: strb w8, [sp, #70]
1310 ; NONEON-NOSVE-NEXT: add w8, w12, w12
1311 ; NONEON-NOSVE-NEXT: strb w8, [sp, #68]
1312 ; NONEON-NOSVE-NEXT: add w8, w10, w10
1313 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
1314 ; NONEON-NOSVE-NEXT: strb w8, [sp, #66]
1315 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Folded Reload
1316 ; NONEON-NOSVE-NEXT: strb w9, [sp, #79]
1317 ; NONEON-NOSVE-NEXT: add w9, w5, w5
1318 ; NONEON-NOSVE-NEXT: strb w9, [sp, #77]
1319 ; NONEON-NOSVE-NEXT: add w9, w3, w3
1320 ; NONEON-NOSVE-NEXT: add w8, w8, w8
1321 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
1322 ; NONEON-NOSVE-NEXT: strb w8, [sp, #64]
1323 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #91]
1324 ; NONEON-NOSVE-NEXT: strb w9, [sp, #75]
1325 ; NONEON-NOSVE-NEXT: add w9, w0, w0
1326 ; NONEON-NOSVE-NEXT: strh w8, [sp, #134]
1327 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #90]
1328 ; NONEON-NOSVE-NEXT: strb w9, [sp, #73]
1329 ; NONEON-NOSVE-NEXT: add w9, w15, w15
1330 ; NONEON-NOSVE-NEXT: strh w8, [sp, #132]
1331 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #89]
1332 ; NONEON-NOSVE-NEXT: strb w9, [sp, #71]
1333 ; NONEON-NOSVE-NEXT: add w9, w13, w13
1334 ; NONEON-NOSVE-NEXT: strh w8, [sp, #130]
1335 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #88]
1336 ; NONEON-NOSVE-NEXT: strb w9, [sp, #69]
1337 ; NONEON-NOSVE-NEXT: add w9, w11, w11
1338 ; NONEON-NOSVE-NEXT: strh w8, [sp, #128]
1339 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #95]
1340 ; NONEON-NOSVE-NEXT: strb w9, [sp, #67]
1341 ; NONEON-NOSVE-NEXT: ldr w9, [sp, #8] // 4-byte Folded Reload
1342 ; NONEON-NOSVE-NEXT: strh w8, [sp, #142]
1343 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #94]
1344 ; NONEON-NOSVE-NEXT: add w9, w9, w9
1345 ; NONEON-NOSVE-NEXT: strh w8, [sp, #140]
1346 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #93]
1347 ; NONEON-NOSVE-NEXT: strb w9, [sp, #65]
1348 ; NONEON-NOSVE-NEXT: strh w8, [sp, #138]
1349 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #92]
1350 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #64]
1351 ; NONEON-NOSVE-NEXT: strh w8, [sp, #136]
1352 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #83]
1353 ; NONEON-NOSVE-NEXT: strh w8, [sp, #118]
1354 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #82]
1355 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #96]
1356 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #128]
1357 ; NONEON-NOSVE-NEXT: strh w8, [sp, #116]
1358 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #81]
1359 ; NONEON-NOSVE-NEXT: strh w8, [sp, #114]
1360 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #80]
1361 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #192]
1362 ; NONEON-NOSVE-NEXT: strh w8, [sp, #112]
1363 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #87]
1364 ; NONEON-NOSVE-NEXT: strh w8, [sp, #126]
1365 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #86]
1366 ; NONEON-NOSVE-NEXT: strh w8, [sp, #124]
1367 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #85]
1368 ; NONEON-NOSVE-NEXT: strh w8, [sp, #122]
1369 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #84]
1370 ; NONEON-NOSVE-NEXT: strh w8, [sp, #120]
1371 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #107]
1372 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #112]
1373 ; NONEON-NOSVE-NEXT: strh w8, [sp, #166]
1374 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #106]
1375 ; NONEON-NOSVE-NEXT: strh w8, [sp, #164]
1376 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #105]
1377 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #176]
1378 ; NONEON-NOSVE-NEXT: strh w8, [sp, #162]
1379 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #104]
1380 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #178]
1381 ; NONEON-NOSVE-NEXT: strh w8, [sp, #160]
1382 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #111]
1383 ; NONEON-NOSVE-NEXT: strh w8, [sp, #174]
1384 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #110]
1385 ; NONEON-NOSVE-NEXT: strh w8, [sp, #172]
1386 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #109]
1387 ; NONEON-NOSVE-NEXT: strh w8, [sp, #170]
1388 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #108]
1389 ; NONEON-NOSVE-NEXT: strh w8, [sp, #168]
1390 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #99]
1391 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #160]
1392 ; NONEON-NOSVE-NEXT: strh w8, [sp, #150]
1393 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #98]
1394 ; NONEON-NOSVE-NEXT: strh w8, [sp, #148]
1395 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #97]
1396 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #224]
1397 ; NONEON-NOSVE-NEXT: strh w8, [sp, #146]
1398 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #96]
1399 ; NONEON-NOSVE-NEXT: strh w8, [sp, #144]
1400 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #103]
1401 ; NONEON-NOSVE-NEXT: strh w8, [sp, #158]
1402 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #102]
1403 ; NONEON-NOSVE-NEXT: strh w8, [sp, #156]
1404 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #101]
1405 ; NONEON-NOSVE-NEXT: strh w8, [sp, #154]
1406 ; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #100]
1407 ; NONEON-NOSVE-NEXT: strh w8, [sp, #152]
1408 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #194]
1409 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #144]
1410 ; NONEON-NOSVE-NEXT: str w8, [sp, #276]
1411 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #192]
1412 ; NONEON-NOSVE-NEXT: str w8, [sp, #272]
1413 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #198]
1414 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #208]
1415 ; NONEON-NOSVE-NEXT: str w8, [sp, #284]
1416 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #196]
1417 ; NONEON-NOSVE-NEXT: str w8, [sp, #280]
1418 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #202]
1419 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #272]
1420 ; NONEON-NOSVE-NEXT: str w8, [sp, #292]
1421 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #200]
1422 ; NONEON-NOSVE-NEXT: str w8, [sp, #288]
1423 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #206]
1424 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #400]
1425 ; NONEON-NOSVE-NEXT: str w8, [sp, #300]
1426 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #204]
1427 ; NONEON-NOSVE-NEXT: str w8, [sp, #296]
1428 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #176]
1429 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #288]
1430 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #240]
1431 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #182]
1432 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #180]
1433 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #248]
1434 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #186]
1435 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #416]
1436 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #240]
1437 ; NONEON-NOSVE-NEXT: str w8, [sp, #260]
1438 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #184]
1439 ; NONEON-NOSVE-NEXT: str w8, [sp, #256]
1440 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #190]
1441 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #368]
1442 ; NONEON-NOSVE-NEXT: str w8, [sp, #268]
1443 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #188]
1444 ; NONEON-NOSVE-NEXT: ldrsw x9, [sp, #372]
1445 ; NONEON-NOSVE-NEXT: str w8, [sp, #264]
1446 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #226]
1447 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #256]
1448 ; NONEON-NOSVE-NEXT: str w8, [sp, #340]
1449 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #224]
1450 ; NONEON-NOSVE-NEXT: str w8, [sp, #336]
1451 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #230]
1452 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #384]
1453 ; NONEON-NOSVE-NEXT: str w8, [sp, #348]
1454 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #228]
1455 ; NONEON-NOSVE-NEXT: str w8, [sp, #344]
1456 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #234]
1457 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #336]
1458 ; NONEON-NOSVE-NEXT: str w8, [sp, #356]
1459 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #232]
1460 ; NONEON-NOSVE-NEXT: str w8, [sp, #352]
1461 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #238]
1462 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #464]
1463 ; NONEON-NOSVE-NEXT: str w8, [sp, #364]
1464 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #236]
1465 ; NONEON-NOSVE-NEXT: str w8, [sp, #360]
1466 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #210]
1467 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #352]
1468 ; NONEON-NOSVE-NEXT: str w8, [sp, #308]
1469 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #208]
1470 ; NONEON-NOSVE-NEXT: str w8, [sp, #304]
1471 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #214]
1472 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #480]
1473 ; NONEON-NOSVE-NEXT: str w8, [sp, #316]
1474 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #212]
1475 ; NONEON-NOSVE-NEXT: str w8, [sp, #312]
1476 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #218]
1477 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #304]
1478 ; NONEON-NOSVE-NEXT: str w8, [sp, #324]
1479 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #216]
1480 ; NONEON-NOSVE-NEXT: str w8, [sp, #320]
1481 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #222]
1482 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #432]
1483 ; NONEON-NOSVE-NEXT: str w8, [sp, #332]
1484 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #220]
1485 ; NONEON-NOSVE-NEXT: str w8, [sp, #328]
1486 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #404]
1487 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #320]
1488 ; NONEON-NOSVE-NEXT: str x8, [sp, #568]
1489 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #400]
1490 ; NONEON-NOSVE-NEXT: str x8, [sp, #560]
1491 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #412]
1492 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #448]
1493 ; NONEON-NOSVE-NEXT: str x8, [sp, #584]
1494 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #408]
1495 ; NONEON-NOSVE-NEXT: str x8, [sp, #576]
1496 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #420]
1497 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #560]
1498 ; NONEON-NOSVE-NEXT: str x8, [sp, #600]
1499 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #416]
1500 ; NONEON-NOSVE-NEXT: str x8, [sp, #592]
1501 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #428]
1502 ; NONEON-NOSVE-NEXT: str x8, [sp, #616]
1503 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #424]
1504 ; NONEON-NOSVE-NEXT: str x8, [sp, #608]
1505 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #368]
1506 ; NONEON-NOSVE-NEXT: ldp q2, q3, [sp, #592]
1507 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #496]
1508 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #380]
1509 ; NONEON-NOSVE-NEXT: str x8, [sp, #520]
1510 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #376]
1511 ; NONEON-NOSVE-NEXT: str x8, [sp, #512]
1512 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #388]
1513 ; NONEON-NOSVE-NEXT: ldp q4, q5, [sp, #496]
1514 ; NONEON-NOSVE-NEXT: str x8, [sp, #536]
1515 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #384]
1516 ; NONEON-NOSVE-NEXT: str x8, [sp, #528]
1517 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #396]
1518 ; NONEON-NOSVE-NEXT: str x8, [sp, #552]
1519 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #392]
1520 ; NONEON-NOSVE-NEXT: str x8, [sp, #544]
1521 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #468]
1522 ; NONEON-NOSVE-NEXT: ldp q6, q7, [sp, #528]
1523 ; NONEON-NOSVE-NEXT: str x8, [sp, #696]
1524 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #464]
1525 ; NONEON-NOSVE-NEXT: str x8, [sp, #688]
1526 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #476]
1527 ; NONEON-NOSVE-NEXT: str x8, [sp, #712]
1528 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #472]
1529 ; NONEON-NOSVE-NEXT: str x8, [sp, #704]
1530 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #484]
1531 ; NONEON-NOSVE-NEXT: ldp q16, q17, [sp, #688]
1532 ; NONEON-NOSVE-NEXT: str x8, [sp, #728]
1533 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #480]
1534 ; NONEON-NOSVE-NEXT: str x8, [sp, #720]
1535 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #492]
1536 ; NONEON-NOSVE-NEXT: str x8, [sp, #744]
1537 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #488]
1538 ; NONEON-NOSVE-NEXT: str x8, [sp, #736]
1539 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #436]
1540 ; NONEON-NOSVE-NEXT: ldp q19, q20, [sp, #720]
1541 ; NONEON-NOSVE-NEXT: str x8, [sp, #632]
1542 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #432]
1543 ; NONEON-NOSVE-NEXT: str x8, [sp, #624]
1544 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #444]
1545 ; NONEON-NOSVE-NEXT: str x8, [sp, #648]
1546 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #440]
1547 ; NONEON-NOSVE-NEXT: str x8, [sp, #640]
1548 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #452]
1549 ; NONEON-NOSVE-NEXT: ldp q22, q23, [sp, #624]
1550 ; NONEON-NOSVE-NEXT: str x8, [sp, #664]
1551 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #448]
1552 ; NONEON-NOSVE-NEXT: str x8, [sp, #656]
1553 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #460]
1554 ; NONEON-NOSVE-NEXT: str x8, [sp, #680]
1555 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #456]
1556 ; NONEON-NOSVE-NEXT: str x8, [sp, #672]
1557 ; NONEON-NOSVE-NEXT: ldp q21, q18, [sp, #656]
1558 ; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
1559 ; NONEON-NOSVE-NEXT: stp q2, q3, [x1, #32]
1560 ; NONEON-NOSVE-NEXT: stp q4, q5, [x1, #64]
1561 ; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #96]
1562 ; NONEON-NOSVE-NEXT: stp q16, q17, [x1, #128]
1563 ; NONEON-NOSVE-NEXT: stp q19, q20, [x1, #160]
1564 ; NONEON-NOSVE-NEXT: stp q22, q23, [x1, #192]
1565 ; NONEON-NOSVE-NEXT: stp q21, q18, [x1, #224]
1566 ; NONEON-NOSVE-NEXT: add sp, sp, #752
1567 ; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload
1568 ; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #64] // 16-byte Folded Reload
1569 ; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #48] // 16-byte Folded Reload
1570 ; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #32] // 16-byte Folded Reload
1571 ; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #16] // 16-byte Folded Reload
1572 ; NONEON-NOSVE-NEXT: ldp x29, x30, [sp], #96 // 16-byte Folded Reload
1573 ; NONEON-NOSVE-NEXT: ret
1574 %a = load <32 x i8>, ptr %in
1575 %b = add <32 x i8> %a, %a
1576 %c = sext <32 x i8> %b to <32 x i64>
1577 store <32 x i64> %c, ptr %out
1585 define void @sext_v8i16_v8i32(<8 x i16> %a, ptr %out) {
1586 ; CHECK-LABEL: sext_v8i16_v8i32:
1588 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
1589 ; CHECK-NEXT: sunpklo z1.s, z0.h
1590 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1591 ; CHECK-NEXT: sunpklo z0.s, z0.h
1592 ; CHECK-NEXT: stp q1, q0, [x0]
1595 ; NONEON-NOSVE-LABEL: sext_v8i16_v8i32:
1596 ; NONEON-NOSVE: // %bb.0:
1597 ; NONEON-NOSVE-NEXT: str q0, [sp, #-64]!
1598 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64
1599 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
1600 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
1601 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #30]
1602 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #28]
1603 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
1604 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #26]
1605 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #24]
1606 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
1607 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #22]
1608 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #20]
1609 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]
1610 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #18]
1611 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #16]
1612 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]
1613 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
1614 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
1615 ; NONEON-NOSVE-NEXT: add sp, sp, #64
1616 ; NONEON-NOSVE-NEXT: ret
1617 %b = sext <8 x i16> %a to <8 x i32>
1618 store <8 x i32>%b, ptr %out
1622 define void @sext_v16i16_v16i32(ptr %in, ptr %out) {
1623 ; CHECK-LABEL: sext_v16i16_v16i32:
1625 ; CHECK-NEXT: ldp q1, q0, [x0]
1626 ; CHECK-NEXT: add z0.h, z0.h, z0.h
1627 ; CHECK-NEXT: add z1.h, z1.h, z1.h
1628 ; CHECK-NEXT: sunpklo z2.s, z0.h
1629 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1630 ; CHECK-NEXT: sunpklo z3.s, z1.h
1631 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
1632 ; CHECK-NEXT: sunpklo z0.s, z0.h
1633 ; CHECK-NEXT: sunpklo z1.s, z1.h
1634 ; CHECK-NEXT: stp q2, q0, [x1, #32]
1635 ; CHECK-NEXT: stp q3, q1, [x1]
1638 ; NONEON-NOSVE-LABEL: sext_v16i16_v16i32:
1639 ; NONEON-NOSVE: // %bb.0:
1640 ; NONEON-NOSVE-NEXT: sub sp, sp, #160
1641 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
1642 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
1643 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp]
1644 ; NONEON-NOSVE-NEXT: ldrh w13, [sp, #4]
1645 ; NONEON-NOSVE-NEXT: ldrh w14, [sp, #6]
1646 ; NONEON-NOSVE-NEXT: ldrh w3, [sp, #2]
1647 ; NONEON-NOSVE-NEXT: ldrh w5, [sp]
1648 ; NONEON-NOSVE-NEXT: ldrh w2, [sp, #12]
1649 ; NONEON-NOSVE-NEXT: ldrh w4, [sp, #14]
1650 ; NONEON-NOSVE-NEXT: add w13, w13, w13
1651 ; NONEON-NOSVE-NEXT: add w14, w14, w14
1652 ; NONEON-NOSVE-NEXT: ldrh w18, [sp, #8]
1653 ; NONEON-NOSVE-NEXT: ldrh w0, [sp, #10]
1654 ; NONEON-NOSVE-NEXT: strh w14, [sp, #46]
1655 ; NONEON-NOSVE-NEXT: add w14, w3, w3
1656 ; NONEON-NOSVE-NEXT: strh w13, [sp, #44]
1657 ; NONEON-NOSVE-NEXT: add w13, w5, w5
1658 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]
1659 ; NONEON-NOSVE-NEXT: strh w14, [sp, #42]
1660 ; NONEON-NOSVE-NEXT: add w14, w4, w4
1661 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #26]
1662 ; NONEON-NOSVE-NEXT: strh w13, [sp, #40]
1663 ; NONEON-NOSVE-NEXT: add w13, w2, w2
1664 ; NONEON-NOSVE-NEXT: ldrh w17, [sp, #22]
1665 ; NONEON-NOSVE-NEXT: strh w14, [sp, #38]
1666 ; NONEON-NOSVE-NEXT: add w14, w0, w0
1667 ; NONEON-NOSVE-NEXT: add w9, w9, w9
1668 ; NONEON-NOSVE-NEXT: strh w13, [sp, #36]
1669 ; NONEON-NOSVE-NEXT: add w13, w18, w18
1670 ; NONEON-NOSVE-NEXT: add w8, w8, w8
1671 ; NONEON-NOSVE-NEXT: strh w14, [sp, #34]
1672 ; NONEON-NOSVE-NEXT: ldrh w10, [sp, #28]
1673 ; NONEON-NOSVE-NEXT: ldrh w11, [sp, #30]
1674 ; NONEON-NOSVE-NEXT: strh w13, [sp, #32]
1675 ; NONEON-NOSVE-NEXT: ldrh w12, [sp, #16]
1676 ; NONEON-NOSVE-NEXT: ldrh w15, [sp, #18]
1677 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #32]
1678 ; NONEON-NOSVE-NEXT: ldrh w16, [sp, #20]
1679 ; NONEON-NOSVE-NEXT: strh w9, [sp, #50]
1680 ; NONEON-NOSVE-NEXT: add w14, w17, w17
1681 ; NONEON-NOSVE-NEXT: add w12, w12, w12
1682 ; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
1683 ; NONEON-NOSVE-NEXT: add w13, w16, w16
1684 ; NONEON-NOSVE-NEXT: add w11, w11, w11
1685 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #64]
1686 ; NONEON-NOSVE-NEXT: add w10, w10, w10
1687 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #78]
1688 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #76]
1689 ; NONEON-NOSVE-NEXT: strh w14, [sp, #62]
1690 ; NONEON-NOSVE-NEXT: add w14, w15, w15
1691 ; NONEON-NOSVE-NEXT: strh w13, [sp, #60]
1692 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
1693 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #74]
1694 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #72]
1695 ; NONEON-NOSVE-NEXT: strh w14, [sp, #58]
1696 ; NONEON-NOSVE-NEXT: strh w12, [sp, #56]
1697 ; NONEON-NOSVE-NEXT: strh w11, [sp, #54]
1698 ; NONEON-NOSVE-NEXT: strh w10, [sp, #52]
1699 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
1700 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
1701 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #70]
1702 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #68]
1703 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #104]
1704 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #66]
1705 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #64]
1706 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
1707 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #96]
1708 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #94]
1709 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #92]
1710 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #96]
1711 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
1712 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #90]
1713 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #88]
1714 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
1715 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #86]
1716 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #84]
1717 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
1718 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #82]
1719 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #80]
1720 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
1721 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #128]
1722 ; NONEON-NOSVE-NEXT: stp q2, q3, [x1]
1723 ; NONEON-NOSVE-NEXT: stp q1, q0, [x1, #32]
1724 ; NONEON-NOSVE-NEXT: add sp, sp, #160
1725 ; NONEON-NOSVE-NEXT: ret
1726 %a = load <16 x i16>, ptr %in
1727 %b = add <16 x i16> %a, %a
1728 %c = sext <16 x i16> %b to <16 x i32>
1729 store <16 x i32> %c, ptr %out
1737 define void @sext_v4i16_v4i64(<4 x i16> %a, ptr %out) {
1738 ; CHECK-LABEL: sext_v4i16_v4i64:
1740 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
1741 ; CHECK-NEXT: sunpklo z0.s, z0.h
1742 ; CHECK-NEXT: sunpklo z1.d, z0.s
1743 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1744 ; CHECK-NEXT: sunpklo z0.d, z0.s
1745 ; CHECK-NEXT: stp q1, q0, [x0]
1748 ; NONEON-NOSVE-LABEL: sext_v4i16_v4i64:
1749 ; NONEON-NOSVE: // %bb.0:
1750 ; NONEON-NOSVE-NEXT: sub sp, sp, #80
1751 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 80
1752 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
1753 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #10]
1754 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #8]
1755 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #24]
1756 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #14]
1757 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #12]
1758 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #16]
1759 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #16]
1760 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #32]
1761 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #40]
1762 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #64]
1763 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #32]
1764 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]
1765 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #48]
1766 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
1767 ; NONEON-NOSVE-NEXT: add sp, sp, #80
1768 ; NONEON-NOSVE-NEXT: ret
1769 %b = sext <4 x i16> %a to <4 x i64>
1770 store <4 x i64>%b, ptr %out
1774 define void @sext_v8i16_v8i64(<8 x i16> %a, ptr %out) {
1775 ; CHECK-LABEL: sext_v8i16_v8i64:
1777 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
1778 ; CHECK-NEXT: sunpklo z1.s, z0.h
1779 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1780 ; CHECK-NEXT: sunpklo z0.s, z0.h
1781 ; CHECK-NEXT: sunpklo z2.d, z1.s
1782 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
1783 ; CHECK-NEXT: sunpklo z1.d, z1.s
1784 ; CHECK-NEXT: sunpklo z3.d, z0.s
1785 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1786 ; CHECK-NEXT: sunpklo z0.d, z0.s
1787 ; CHECK-NEXT: stp q2, q1, [x0]
1788 ; CHECK-NEXT: stp q3, q0, [x0, #32]
1791 ; NONEON-NOSVE-LABEL: sext_v8i16_v8i64:
1792 ; NONEON-NOSVE: // %bb.0:
1793 ; NONEON-NOSVE-NEXT: str q0, [sp, #-160]!
1794 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
1795 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
1796 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
1797 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #26]
1798 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #24]
1799 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
1800 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #30]
1801 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #28]
1802 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
1803 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #18]
1804 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #16]
1805 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
1806 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]
1807 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #22]
1808 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #20]
1809 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]
1810 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
1811 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #32]
1812 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #64]
1813 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #88]
1814 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #144]
1815 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #80]
1816 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #128]
1817 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #72]
1818 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #128]
1819 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #112]
1820 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #64]
1821 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #96]
1822 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #96]
1823 ; NONEON-NOSVE-NEXT: stp q2, q3, [x0]
1824 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0, #32]
1825 ; NONEON-NOSVE-NEXT: add sp, sp, #160
1826 ; NONEON-NOSVE-NEXT: ret
1827 %b = sext <8 x i16> %a to <8 x i64>
1828 store <8 x i64>%b, ptr %out
1832 define void @sext_v16i16_v16i64(ptr %in, ptr %out) {
1833 ; CHECK-LABEL: sext_v16i16_v16i64:
1835 ; CHECK-NEXT: ldp q1, q0, [x0]
1836 ; CHECK-NEXT: add z0.h, z0.h, z0.h
1837 ; CHECK-NEXT: add z1.h, z1.h, z1.h
1838 ; CHECK-NEXT: sunpklo z2.s, z0.h
1839 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1840 ; CHECK-NEXT: sunpklo z3.s, z1.h
1841 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
1842 ; CHECK-NEXT: sunpklo z0.s, z0.h
1843 ; CHECK-NEXT: sunpklo z1.s, z1.h
1844 ; CHECK-NEXT: sunpklo z4.d, z2.s
1845 ; CHECK-NEXT: ext z2.b, z2.b, z2.b, #8
1846 ; CHECK-NEXT: sunpklo z5.d, z3.s
1847 ; CHECK-NEXT: ext z3.b, z3.b, z3.b, #8
1848 ; CHECK-NEXT: sunpklo z6.d, z0.s
1849 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
1850 ; CHECK-NEXT: sunpklo z2.d, z2.s
1851 ; CHECK-NEXT: sunpklo z7.d, z1.s
1852 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
1853 ; CHECK-NEXT: sunpklo z3.d, z3.s
1854 ; CHECK-NEXT: sunpklo z0.d, z0.s
1855 ; CHECK-NEXT: sunpklo z1.d, z1.s
1856 ; CHECK-NEXT: stp q4, q2, [x1, #64]
1857 ; CHECK-NEXT: stp q5, q3, [x1]
1858 ; CHECK-NEXT: stp q6, q0, [x1, #96]
1859 ; CHECK-NEXT: stp q7, q1, [x1, #32]
1862 ; NONEON-NOSVE-LABEL: sext_v16i16_v16i64:
1863 ; NONEON-NOSVE: // %bb.0:
1864 ; NONEON-NOSVE-NEXT: sub sp, sp, #368
1865 ; NONEON-NOSVE-NEXT: str x29, [sp, #352] // 8-byte Folded Spill
1866 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 368
1867 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
1868 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
1869 ; NONEON-NOSVE-NEXT: ldr x29, [sp, #352] // 8-byte Folded Reload
1870 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp]
1871 ; NONEON-NOSVE-NEXT: ldrh w13, [sp, #4]
1872 ; NONEON-NOSVE-NEXT: ldrh w14, [sp, #6]
1873 ; NONEON-NOSVE-NEXT: ldrh w3, [sp, #2]
1874 ; NONEON-NOSVE-NEXT: ldrh w5, [sp]
1875 ; NONEON-NOSVE-NEXT: ldrh w2, [sp, #12]
1876 ; NONEON-NOSVE-NEXT: ldrh w4, [sp, #14]
1877 ; NONEON-NOSVE-NEXT: add w13, w13, w13
1878 ; NONEON-NOSVE-NEXT: add w14, w14, w14
1879 ; NONEON-NOSVE-NEXT: ldrh w18, [sp, #8]
1880 ; NONEON-NOSVE-NEXT: ldrh w0, [sp, #10]
1881 ; NONEON-NOSVE-NEXT: strh w14, [sp, #54]
1882 ; NONEON-NOSVE-NEXT: add w14, w3, w3
1883 ; NONEON-NOSVE-NEXT: strh w13, [sp, #52]
1884 ; NONEON-NOSVE-NEXT: add w13, w5, w5
1885 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]
1886 ; NONEON-NOSVE-NEXT: strh w14, [sp, #50]
1887 ; NONEON-NOSVE-NEXT: add w14, w4, w4
1888 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #26]
1889 ; NONEON-NOSVE-NEXT: strh w13, [sp, #48]
1890 ; NONEON-NOSVE-NEXT: add w13, w2, w2
1891 ; NONEON-NOSVE-NEXT: ldrh w17, [sp, #22]
1892 ; NONEON-NOSVE-NEXT: strh w14, [sp, #46]
1893 ; NONEON-NOSVE-NEXT: add w14, w0, w0
1894 ; NONEON-NOSVE-NEXT: add w9, w9, w9
1895 ; NONEON-NOSVE-NEXT: strh w13, [sp, #44]
1896 ; NONEON-NOSVE-NEXT: add w13, w18, w18
1897 ; NONEON-NOSVE-NEXT: add w8, w8, w8
1898 ; NONEON-NOSVE-NEXT: strh w14, [sp, #42]
1899 ; NONEON-NOSVE-NEXT: ldrh w10, [sp, #28]
1900 ; NONEON-NOSVE-NEXT: ldrh w11, [sp, #30]
1901 ; NONEON-NOSVE-NEXT: strh w13, [sp, #40]
1902 ; NONEON-NOSVE-NEXT: ldrh w12, [sp, #16]
1903 ; NONEON-NOSVE-NEXT: ldrh w15, [sp, #18]
1904 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #40]
1905 ; NONEON-NOSVE-NEXT: ldrh w16, [sp, #20]
1906 ; NONEON-NOSVE-NEXT: strh w9, [sp, #58]
1907 ; NONEON-NOSVE-NEXT: add w14, w17, w17
1908 ; NONEON-NOSVE-NEXT: add w12, w12, w12
1909 ; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
1910 ; NONEON-NOSVE-NEXT: add w13, w16, w16
1911 ; NONEON-NOSVE-NEXT: add w11, w11, w11
1912 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #72]
1913 ; NONEON-NOSVE-NEXT: add w10, w10, w10
1914 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #82]
1915 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #80]
1916 ; NONEON-NOSVE-NEXT: strh w14, [sp, #70]
1917 ; NONEON-NOSVE-NEXT: add w14, w15, w15
1918 ; NONEON-NOSVE-NEXT: strh w13, [sp, #68]
1919 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
1920 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #86]
1921 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #84]
1922 ; NONEON-NOSVE-NEXT: strh w14, [sp, #66]
1923 ; NONEON-NOSVE-NEXT: strh w12, [sp, #64]
1924 ; NONEON-NOSVE-NEXT: strh w11, [sp, #62]
1925 ; NONEON-NOSVE-NEXT: strh w10, [sp, #60]
1926 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #56]
1927 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
1928 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #74]
1929 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #72]
1930 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #104]
1931 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #78]
1932 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #76]
1933 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #88]
1934 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #120]
1935 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
1936 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #98]
1937 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #96]
1938 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
1939 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #102]
1940 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #100]
1941 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #184]
1942 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #104]
1943 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #160]
1944 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #90]
1945 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #88]
1946 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
1947 ; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #94]
1948 ; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #92]
1949 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #168]
1950 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #152]
1951 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
1952 ; NONEON-NOSVE-NEXT: str d0, [sp, #360]
1953 ; NONEON-NOSVE-NEXT: ldp d2, d0, [sp, #136]
1954 ; NONEON-NOSVE-NEXT: str d2, [sp, #200]
1955 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #208]
1956 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #184]
1957 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #256]
1958 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #192]
1959 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #272]
1960 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #168]
1961 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #256]
1962 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #224]
1963 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #176]
1964 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #240]
1965 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #216]
1966 ; NONEON-NOSVE-NEXT: ldp q3, q4, [sp, #224]
1967 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #320]
1968 ; NONEON-NOSVE-NEXT: ldrsw x9, [sp, #364]
1969 ; NONEON-NOSVE-NEXT: ldrsw x8, [sp, #360]
1970 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #336]
1971 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #200]
1972 ; NONEON-NOSVE-NEXT: ldp q6, q7, [sp, #320]
1973 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #288]
1974 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #208]
1975 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #304]
1976 ; NONEON-NOSVE-NEXT: ldp q5, q2, [sp, #288]
1977 ; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
1978 ; NONEON-NOSVE-NEXT: stp q3, q4, [x1, #32]
1979 ; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #64]
1980 ; NONEON-NOSVE-NEXT: stp q5, q2, [x1, #96]
1981 ; NONEON-NOSVE-NEXT: add sp, sp, #368
1982 ; NONEON-NOSVE-NEXT: ret
1983 %a = load <16 x i16>, ptr %in
1984 %b = add <16 x i16> %a, %a
1985 %c = sext <16 x i16> %b to <16 x i64>
1986 store <16 x i64> %c, ptr %out
1994 define void @sext_v4i32_v4i64(<4 x i32> %a, ptr %out) {
1995 ; CHECK-LABEL: sext_v4i32_v4i64:
1997 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
1998 ; CHECK-NEXT: sunpklo z1.d, z0.s
1999 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2000 ; CHECK-NEXT: sunpklo z0.d, z0.s
2001 ; CHECK-NEXT: stp q1, q0, [x0]
2004 ; NONEON-NOSVE-LABEL: sext_v4i32_v4i64:
2005 ; NONEON-NOSVE: // %bb.0:
2006 ; NONEON-NOSVE-NEXT: str q0, [sp, #-64]!
2007 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64
2008 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
2009 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
2010 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #24]
2011 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]
2012 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #16]
2013 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]
2014 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
2015 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
2016 ; NONEON-NOSVE-NEXT: add sp, sp, #64
2017 ; NONEON-NOSVE-NEXT: ret
2018 %b = sext <4 x i32> %a to <4 x i64>
2019 store <4 x i64>%b, ptr %out
2023 define void @sext_v8i32_v8i64(ptr %in, ptr %out) {
2024 ; CHECK-LABEL: sext_v8i32_v8i64:
2026 ; CHECK-NEXT: ldp q1, q0, [x0]
2027 ; CHECK-NEXT: add z0.s, z0.s, z0.s
2028 ; CHECK-NEXT: add z1.s, z1.s, z1.s
2029 ; CHECK-NEXT: sunpklo z2.d, z0.s
2030 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2031 ; CHECK-NEXT: sunpklo z3.d, z1.s
2032 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
2033 ; CHECK-NEXT: sunpklo z0.d, z0.s
2034 ; CHECK-NEXT: sunpklo z1.d, z1.s
2035 ; CHECK-NEXT: stp q2, q0, [x1, #32]
2036 ; CHECK-NEXT: stp q3, q1, [x1]
2039 ; NONEON-NOSVE-LABEL: sext_v8i32_v8i64:
2040 ; NONEON-NOSVE: // %bb.0:
2041 ; NONEON-NOSVE-NEXT: sub sp, sp, #160
2042 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
2043 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
2044 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp]
2045 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp]
2046 ; NONEON-NOSVE-NEXT: ldp w12, w13, [sp, #8]
2047 ; NONEON-NOSVE-NEXT: ldp w14, w15, [sp, #16]
2048 ; NONEON-NOSVE-NEXT: add w9, w9, w9
2049 ; NONEON-NOSVE-NEXT: add w8, w8, w8
2050 ; NONEON-NOSVE-NEXT: ldp w10, w11, [sp, #24]
2051 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]
2052 ; NONEON-NOSVE-NEXT: add w9, w13, w13
2053 ; NONEON-NOSVE-NEXT: add w8, w12, w12
2054 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]
2055 ; NONEON-NOSVE-NEXT: add w9, w15, w15
2056 ; NONEON-NOSVE-NEXT: add w8, w14, w14
2057 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #32]
2058 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
2059 ; NONEON-NOSVE-NEXT: add w9, w11, w11
2060 ; NONEON-NOSVE-NEXT: add w8, w10, w10
2061 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
2062 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #64]
2063 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
2064 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
2065 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #72]
2066 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #112]
2067 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #64]
2068 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #96]
2069 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #88]
2070 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #96]
2071 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #144]
2072 ; NONEON-NOSVE-NEXT: ldpsw x8, x9, [sp, #80]
2073 ; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #128]
2074 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #128]
2075 ; NONEON-NOSVE-NEXT: stp q2, q3, [x1]
2076 ; NONEON-NOSVE-NEXT: stp q1, q0, [x1, #32]
2077 ; NONEON-NOSVE-NEXT: add sp, sp, #160
2078 ; NONEON-NOSVE-NEXT: ret
2079 %a = load <8 x i32>, ptr %in
2080 %b = add <8 x i32> %a, %a
2081 %c = sext <8 x i32> %b to <8 x i64>
2082 store <8 x i64> %c, ptr %out
2090 define void @zext_v16i8_v16i16(<16 x i8> %a, ptr %out) {
2091 ; CHECK-LABEL: zext_v16i8_v16i16:
2093 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
2094 ; CHECK-NEXT: uunpklo z1.h, z0.b
2095 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2096 ; CHECK-NEXT: uunpklo z0.h, z0.b
2097 ; CHECK-NEXT: stp q1, q0, [x0]
2100 ; NONEON-NOSVE-LABEL: zext_v16i8_v16i16:
2101 ; NONEON-NOSVE: // %bb.0:
2102 ; NONEON-NOSVE-NEXT: str q0, [sp, #-64]!
2103 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64
2104 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
2105 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
2106 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]
2107 ; NONEON-NOSVE-NEXT: strh w8, [sp, #62]
2108 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]
2109 ; NONEON-NOSVE-NEXT: strh w8, [sp, #60]
2110 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]
2111 ; NONEON-NOSVE-NEXT: strh w8, [sp, #58]
2112 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]
2113 ; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
2114 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]
2115 ; NONEON-NOSVE-NEXT: strh w8, [sp, #54]
2116 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]
2117 ; NONEON-NOSVE-NEXT: strh w8, [sp, #52]
2118 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]
2119 ; NONEON-NOSVE-NEXT: strh w8, [sp, #50]
2120 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]
2121 ; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
2122 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]
2123 ; NONEON-NOSVE-NEXT: strh w8, [sp, #46]
2124 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]
2125 ; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
2126 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]
2127 ; NONEON-NOSVE-NEXT: strh w8, [sp, #42]
2128 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]
2129 ; NONEON-NOSVE-NEXT: strh w8, [sp, #40]
2130 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]
2131 ; NONEON-NOSVE-NEXT: strh w8, [sp, #38]
2132 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]
2133 ; NONEON-NOSVE-NEXT: strh w8, [sp, #36]
2134 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]
2135 ; NONEON-NOSVE-NEXT: strh w8, [sp, #34]
2136 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]
2137 ; NONEON-NOSVE-NEXT: strh w8, [sp, #32]
2138 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
2139 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
2140 ; NONEON-NOSVE-NEXT: add sp, sp, #64
2141 ; NONEON-NOSVE-NEXT: ret
2142 %b = zext <16 x i8> %a to <16 x i16>
2143 store <16 x i16>%b, ptr %out
2147 ; NOTE: Extra 'add' is to prevent the extend being combined with the load.
2148 define void @zext_v32i8_v32i16(ptr %in, ptr %out) {
2149 ; CHECK-LABEL: zext_v32i8_v32i16:
2151 ; CHECK-NEXT: ldp q1, q0, [x0]
2152 ; CHECK-NEXT: add z0.b, z0.b, z0.b
2153 ; CHECK-NEXT: add z1.b, z1.b, z1.b
2154 ; CHECK-NEXT: uunpklo z2.h, z0.b
2155 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2156 ; CHECK-NEXT: uunpklo z3.h, z1.b
2157 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
2158 ; CHECK-NEXT: uunpklo z0.h, z0.b
2159 ; CHECK-NEXT: uunpklo z1.h, z1.b
2160 ; CHECK-NEXT: stp q2, q0, [x1, #32]
2161 ; CHECK-NEXT: stp q3, q1, [x1]
2164 ; NONEON-NOSVE-LABEL: zext_v32i8_v32i16:
2165 ; NONEON-NOSVE: // %bb.0:
2166 ; NONEON-NOSVE-NEXT: sub sp, sp, #272
2167 ; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #176] // 16-byte Folded Spill
2168 ; NONEON-NOSVE-NEXT: stp x28, x27, [sp, #192] // 16-byte Folded Spill
2169 ; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #208] // 16-byte Folded Spill
2170 ; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #224] // 16-byte Folded Spill
2171 ; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #240] // 16-byte Folded Spill
2172 ; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #256] // 16-byte Folded Spill
2173 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 272
2174 ; NONEON-NOSVE-NEXT: .cfi_offset w19, -8
2175 ; NONEON-NOSVE-NEXT: .cfi_offset w20, -16
2176 ; NONEON-NOSVE-NEXT: .cfi_offset w21, -24
2177 ; NONEON-NOSVE-NEXT: .cfi_offset w22, -32
2178 ; NONEON-NOSVE-NEXT: .cfi_offset w23, -40
2179 ; NONEON-NOSVE-NEXT: .cfi_offset w24, -48
2180 ; NONEON-NOSVE-NEXT: .cfi_offset w25, -56
2181 ; NONEON-NOSVE-NEXT: .cfi_offset w26, -64
2182 ; NONEON-NOSVE-NEXT: .cfi_offset w27, -72
2183 ; NONEON-NOSVE-NEXT: .cfi_offset w28, -80
2184 ; NONEON-NOSVE-NEXT: .cfi_offset w30, -88
2185 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -96
2186 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
2187 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
2188 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]
2189 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #41]
2190 ; NONEON-NOSVE-NEXT: ldrb w29, [sp, #18]
2191 ; NONEON-NOSVE-NEXT: ldrb w27, [sp, #16]
2192 ; NONEON-NOSVE-NEXT: ldrb w25, [sp, #30]
2193 ; NONEON-NOSVE-NEXT: ldrb w23, [sp, #28]
2194 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
2195 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]
2196 ; NONEON-NOSVE-NEXT: ldrb w21, [sp, #26]
2197 ; NONEON-NOSVE-NEXT: ldrb w19, [sp, #24]
2198 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #19]
2199 ; NONEON-NOSVE-NEXT: ldrb w6, [sp, #38]
2200 ; NONEON-NOSVE-NEXT: add w8, w8, w8
2201 ; NONEON-NOSVE-NEXT: ldrb w28, [sp, #17]
2202 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #22]
2203 ; NONEON-NOSVE-NEXT: strb w8, [sp, #60]
2204 ; NONEON-NOSVE-NEXT: add w8, w29, w29
2205 ; NONEON-NOSVE-NEXT: ldrb w4, [sp, #36]
2206 ; NONEON-NOSVE-NEXT: strb w8, [sp, #58]
2207 ; NONEON-NOSVE-NEXT: add w8, w27, w27
2208 ; NONEON-NOSVE-NEXT: ldrb w26, [sp, #31]
2209 ; NONEON-NOSVE-NEXT: strb w8, [sp, #56]
2210 ; NONEON-NOSVE-NEXT: add w8, w25, w25
2211 ; NONEON-NOSVE-NEXT: add w9, w9, w9
2212 ; NONEON-NOSVE-NEXT: strb w8, [sp, #54]
2213 ; NONEON-NOSVE-NEXT: add w8, w23, w23
2214 ; NONEON-NOSVE-NEXT: ldrb w2, [sp, #34]
2215 ; NONEON-NOSVE-NEXT: strb w8, [sp, #52]
2216 ; NONEON-NOSVE-NEXT: add w8, w21, w21
2217 ; NONEON-NOSVE-NEXT: ldrb w24, [sp, #29]
2218 ; NONEON-NOSVE-NEXT: strb w8, [sp, #50]
2219 ; NONEON-NOSVE-NEXT: add w8, w19, w19
2220 ; NONEON-NOSVE-NEXT: ldrb w17, [sp, #23]
2221 ; NONEON-NOSVE-NEXT: strb w9, [sp, #59]
2222 ; NONEON-NOSVE-NEXT: add w9, w28, w28
2223 ; NONEON-NOSVE-NEXT: add w18, w16, w16
2224 ; NONEON-NOSVE-NEXT: strb w8, [sp, #48]
2225 ; NONEON-NOSVE-NEXT: add w8, w6, w6
2226 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #32]
2227 ; NONEON-NOSVE-NEXT: ldrb w22, [sp, #27]
2228 ; NONEON-NOSVE-NEXT: strb w9, [sp, #57]
2229 ; NONEON-NOSVE-NEXT: add w9, w26, w26
2230 ; NONEON-NOSVE-NEXT: strb w8, [sp, #78]
2231 ; NONEON-NOSVE-NEXT: add w8, w4, w4
2232 ; NONEON-NOSVE-NEXT: ldrb w14, [sp, #46]
2233 ; NONEON-NOSVE-NEXT: ldrb w20, [sp, #25]
2234 ; NONEON-NOSVE-NEXT: ldrb w30, [sp, #21]
2235 ; NONEON-NOSVE-NEXT: strb w9, [sp, #55]
2236 ; NONEON-NOSVE-NEXT: add w9, w24, w24
2237 ; NONEON-NOSVE-NEXT: strb w8, [sp, #76]
2238 ; NONEON-NOSVE-NEXT: add w8, w2, w2
2239 ; NONEON-NOSVE-NEXT: ldrb w12, [sp, #44]
2240 ; NONEON-NOSVE-NEXT: add w17, w17, w17
2241 ; NONEON-NOSVE-NEXT: strb w9, [sp, #53]
2242 ; NONEON-NOSVE-NEXT: add w9, w22, w22
2243 ; NONEON-NOSVE-NEXT: strb w8, [sp, #74]
2244 ; NONEON-NOSVE-NEXT: add w8, w16, w16
2245 ; NONEON-NOSVE-NEXT: ldrb w10, [sp, #42]
2246 ; NONEON-NOSVE-NEXT: strb w17, [sp, #63]
2247 ; NONEON-NOSVE-NEXT: add w17, w30, w30
2248 ; NONEON-NOSVE-NEXT: strb w9, [sp, #51]
2249 ; NONEON-NOSVE-NEXT: add w9, w20, w20
2250 ; NONEON-NOSVE-NEXT: ldrb w7, [sp, #39]
2251 ; NONEON-NOSVE-NEXT: strb w8, [sp, #72]
2252 ; NONEON-NOSVE-NEXT: add w8, w14, w14
2253 ; NONEON-NOSVE-NEXT: ldrb w5, [sp, #37]
2254 ; NONEON-NOSVE-NEXT: strb w18, [sp, #62]
2255 ; NONEON-NOSVE-NEXT: ldrb w3, [sp, #35]
2256 ; NONEON-NOSVE-NEXT: ldrb w0, [sp, #33]
2257 ; NONEON-NOSVE-NEXT: strb w17, [sp, #61]
2258 ; NONEON-NOSVE-NEXT: ldrb w15, [sp, #47]
2259 ; NONEON-NOSVE-NEXT: ldrb w13, [sp, #45]
2260 ; NONEON-NOSVE-NEXT: strb w9, [sp, #49]
2261 ; NONEON-NOSVE-NEXT: add w9, w7, w7
2262 ; NONEON-NOSVE-NEXT: ldrb w11, [sp, #43]
2263 ; NONEON-NOSVE-NEXT: strb w8, [sp, #70]
2264 ; NONEON-NOSVE-NEXT: add w8, w12, w12
2265 ; NONEON-NOSVE-NEXT: strb w8, [sp, #68]
2266 ; NONEON-NOSVE-NEXT: add w8, w10, w10
2267 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
2268 ; NONEON-NOSVE-NEXT: strb w8, [sp, #66]
2269 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Folded Reload
2270 ; NONEON-NOSVE-NEXT: strb w9, [sp, #79]
2271 ; NONEON-NOSVE-NEXT: add w9, w5, w5
2272 ; NONEON-NOSVE-NEXT: strb w9, [sp, #77]
2273 ; NONEON-NOSVE-NEXT: add w9, w3, w3
2274 ; NONEON-NOSVE-NEXT: add w8, w8, w8
2275 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
2276 ; NONEON-NOSVE-NEXT: strb w8, [sp, #64]
2277 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #95]
2278 ; NONEON-NOSVE-NEXT: strb w9, [sp, #75]
2279 ; NONEON-NOSVE-NEXT: add w9, w0, w0
2280 ; NONEON-NOSVE-NEXT: strh w8, [sp, #142]
2281 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #94]
2282 ; NONEON-NOSVE-NEXT: strb w9, [sp, #73]
2283 ; NONEON-NOSVE-NEXT: add w9, w15, w15
2284 ; NONEON-NOSVE-NEXT: strh w8, [sp, #140]
2285 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #93]
2286 ; NONEON-NOSVE-NEXT: strb w9, [sp, #71]
2287 ; NONEON-NOSVE-NEXT: add w9, w13, w13
2288 ; NONEON-NOSVE-NEXT: strh w8, [sp, #138]
2289 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #92]
2290 ; NONEON-NOSVE-NEXT: strb w9, [sp, #69]
2291 ; NONEON-NOSVE-NEXT: add w9, w11, w11
2292 ; NONEON-NOSVE-NEXT: strh w8, [sp, #136]
2293 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #91]
2294 ; NONEON-NOSVE-NEXT: strb w9, [sp, #67]
2295 ; NONEON-NOSVE-NEXT: ldr w9, [sp, #8] // 4-byte Folded Reload
2296 ; NONEON-NOSVE-NEXT: strh w8, [sp, #134]
2297 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #90]
2298 ; NONEON-NOSVE-NEXT: add w9, w9, w9
2299 ; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #256] // 16-byte Folded Reload
2300 ; NONEON-NOSVE-NEXT: strh w8, [sp, #132]
2301 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #89]
2302 ; NONEON-NOSVE-NEXT: strb w9, [sp, #65]
2303 ; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #240] // 16-byte Folded Reload
2304 ; NONEON-NOSVE-NEXT: strh w8, [sp, #130]
2305 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #88]
2306 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #64]
2307 ; NONEON-NOSVE-NEXT: strh w8, [sp, #128]
2308 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #87]
2309 ; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #224] // 16-byte Folded Reload
2310 ; NONEON-NOSVE-NEXT: strh w8, [sp, #126]
2311 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #86]
2312 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #96]
2313 ; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #208] // 16-byte Folded Reload
2314 ; NONEON-NOSVE-NEXT: strh w8, [sp, #124]
2315 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #85]
2316 ; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #192] // 16-byte Folded Reload
2317 ; NONEON-NOSVE-NEXT: strh w8, [sp, #122]
2318 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #84]
2319 ; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #176] // 16-byte Folded Reload
2320 ; NONEON-NOSVE-NEXT: strh w8, [sp, #120]
2321 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #83]
2322 ; NONEON-NOSVE-NEXT: strh w8, [sp, #118]
2323 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #82]
2324 ; NONEON-NOSVE-NEXT: strh w8, [sp, #116]
2325 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #81]
2326 ; NONEON-NOSVE-NEXT: strh w8, [sp, #114]
2327 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #80]
2328 ; NONEON-NOSVE-NEXT: strh w8, [sp, #112]
2329 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #111]
2330 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #112]
2331 ; NONEON-NOSVE-NEXT: strh w8, [sp, #174]
2332 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #110]
2333 ; NONEON-NOSVE-NEXT: strh w8, [sp, #172]
2334 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #109]
2335 ; NONEON-NOSVE-NEXT: strh w8, [sp, #170]
2336 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #108]
2337 ; NONEON-NOSVE-NEXT: strh w8, [sp, #168]
2338 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #107]
2339 ; NONEON-NOSVE-NEXT: strh w8, [sp, #166]
2340 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #106]
2341 ; NONEON-NOSVE-NEXT: strh w8, [sp, #164]
2342 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #105]
2343 ; NONEON-NOSVE-NEXT: strh w8, [sp, #162]
2344 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #104]
2345 ; NONEON-NOSVE-NEXT: strh w8, [sp, #160]
2346 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #103]
2347 ; NONEON-NOSVE-NEXT: strh w8, [sp, #158]
2348 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #102]
2349 ; NONEON-NOSVE-NEXT: strh w8, [sp, #156]
2350 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #101]
2351 ; NONEON-NOSVE-NEXT: strh w8, [sp, #154]
2352 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #100]
2353 ; NONEON-NOSVE-NEXT: strh w8, [sp, #152]
2354 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #99]
2355 ; NONEON-NOSVE-NEXT: strh w8, [sp, #150]
2356 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #98]
2357 ; NONEON-NOSVE-NEXT: strh w8, [sp, #148]
2358 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #97]
2359 ; NONEON-NOSVE-NEXT: strh w8, [sp, #146]
2360 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #96]
2361 ; NONEON-NOSVE-NEXT: strh w8, [sp, #144]
2362 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #144]
2363 ; NONEON-NOSVE-NEXT: stp q2, q3, [x1]
2364 ; NONEON-NOSVE-NEXT: stp q1, q0, [x1, #32]
2365 ; NONEON-NOSVE-NEXT: add sp, sp, #272
2366 ; NONEON-NOSVE-NEXT: ret
2367 %a = load <32 x i8>, ptr %in
2368 %b = add <32 x i8> %a, %a
2369 %c = zext <32 x i8> %b to <32 x i16>
2370 store <32 x i16> %c, ptr %out
2378 define void @zext_v8i8_v8i32(<8 x i8> %a, ptr %out) {
2379 ; CHECK-LABEL: zext_v8i8_v8i32:
2381 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
2382 ; CHECK-NEXT: uunpklo z0.h, z0.b
2383 ; CHECK-NEXT: uunpklo z1.s, z0.h
2384 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2385 ; CHECK-NEXT: uunpklo z0.s, z0.h
2386 ; CHECK-NEXT: stp q1, q0, [x0]
2389 ; NONEON-NOSVE-LABEL: zext_v8i8_v8i32:
2390 ; NONEON-NOSVE: // %bb.0:
2391 ; NONEON-NOSVE-NEXT: sub sp, sp, #80
2392 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 80
2393 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
2394 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]
2395 ; NONEON-NOSVE-NEXT: strh w8, [sp, #30]
2396 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]
2397 ; NONEON-NOSVE-NEXT: strh w8, [sp, #28]
2398 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]
2399 ; NONEON-NOSVE-NEXT: strh w8, [sp, #26]
2400 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]
2401 ; NONEON-NOSVE-NEXT: strh w8, [sp, #24]
2402 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]
2403 ; NONEON-NOSVE-NEXT: strh w8, [sp, #22]
2404 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]
2405 ; NONEON-NOSVE-NEXT: strh w8, [sp, #20]
2406 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]
2407 ; NONEON-NOSVE-NEXT: strh w8, [sp, #18]
2408 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]
2409 ; NONEON-NOSVE-NEXT: strh w8, [sp, #16]
2410 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #16]
2411 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #32]
2412 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #46]
2413 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #44]
2414 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #72]
2415 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #42]
2416 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #40]
2417 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #64]
2418 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #38]
2419 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #36]
2420 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
2421 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #34]
2422 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #32]
2423 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
2424 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #48]
2425 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
2426 ; NONEON-NOSVE-NEXT: add sp, sp, #80
2427 ; NONEON-NOSVE-NEXT: ret
2428 %b = zext <8 x i8> %a to <8 x i32>
2429 store <8 x i32>%b, ptr %out
2433 define void @zext_v16i8_v16i32(<16 x i8> %a, ptr %out) {
2434 ; CHECK-LABEL: zext_v16i8_v16i32:
2436 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
2437 ; CHECK-NEXT: uunpklo z1.h, z0.b
2438 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2439 ; CHECK-NEXT: uunpklo z0.h, z0.b
2440 ; CHECK-NEXT: uunpklo z2.s, z1.h
2441 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
2442 ; CHECK-NEXT: uunpklo z1.s, z1.h
2443 ; CHECK-NEXT: uunpklo z3.s, z0.h
2444 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2445 ; CHECK-NEXT: uunpklo z0.s, z0.h
2446 ; CHECK-NEXT: stp q2, q1, [x0]
2447 ; CHECK-NEXT: stp q3, q0, [x0, #32]
2450 ; NONEON-NOSVE-LABEL: zext_v16i8_v16i32:
2451 ; NONEON-NOSVE: // %bb.0:
2452 ; NONEON-NOSVE-NEXT: str q0, [sp, #-160]!
2453 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
2454 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
2455 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
2456 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]
2457 ; NONEON-NOSVE-NEXT: strh w8, [sp, #62]
2458 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]
2459 ; NONEON-NOSVE-NEXT: strh w8, [sp, #60]
2460 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]
2461 ; NONEON-NOSVE-NEXT: strh w8, [sp, #58]
2462 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]
2463 ; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
2464 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]
2465 ; NONEON-NOSVE-NEXT: strh w8, [sp, #54]
2466 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]
2467 ; NONEON-NOSVE-NEXT: strh w8, [sp, #52]
2468 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]
2469 ; NONEON-NOSVE-NEXT: strh w8, [sp, #50]
2470 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]
2471 ; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
2472 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]
2473 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
2474 ; NONEON-NOSVE-NEXT: strh w8, [sp, #46]
2475 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]
2476 ; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
2477 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]
2478 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
2479 ; NONEON-NOSVE-NEXT: strh w8, [sp, #42]
2480 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]
2481 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #94]
2482 ; NONEON-NOSVE-NEXT: strh w8, [sp, #40]
2483 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]
2484 ; NONEON-NOSVE-NEXT: strh w8, [sp, #38]
2485 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]
2486 ; NONEON-NOSVE-NEXT: strh w8, [sp, #36]
2487 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]
2488 ; NONEON-NOSVE-NEXT: strh w8, [sp, #34]
2489 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]
2490 ; NONEON-NOSVE-NEXT: strh w8, [sp, #32]
2491 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #92]
2492 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #32]
2493 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
2494 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #90]
2495 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #88]
2496 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
2497 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #86]
2498 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #84]
2499 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #64]
2500 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
2501 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #82]
2502 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #80]
2503 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
2504 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #78]
2505 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #76]
2506 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #128]
2507 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
2508 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #74]
2509 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #72]
2510 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
2511 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #70]
2512 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #68]
2513 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #104]
2514 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #66]
2515 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #64]
2516 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #96]
2517 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #96]
2518 ; NONEON-NOSVE-NEXT: stp q2, q3, [x0]
2519 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0, #32]
2520 ; NONEON-NOSVE-NEXT: add sp, sp, #160
2521 ; NONEON-NOSVE-NEXT: ret
2522 %b = zext <16 x i8> %a to <16 x i32>
2523 store <16 x i32> %b, ptr %out
2527 define void @zext_v32i8_v32i32(ptr %in, ptr %out) {
2528 ; CHECK-LABEL: zext_v32i8_v32i32:
2530 ; CHECK-NEXT: ldp q1, q0, [x0]
2531 ; CHECK-NEXT: add z0.b, z0.b, z0.b
2532 ; CHECK-NEXT: add z1.b, z1.b, z1.b
2533 ; CHECK-NEXT: uunpklo z2.h, z0.b
2534 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2535 ; CHECK-NEXT: uunpklo z3.h, z1.b
2536 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
2537 ; CHECK-NEXT: uunpklo z0.h, z0.b
2538 ; CHECK-NEXT: uunpklo z1.h, z1.b
2539 ; CHECK-NEXT: uunpklo z4.s, z2.h
2540 ; CHECK-NEXT: ext z2.b, z2.b, z2.b, #8
2541 ; CHECK-NEXT: uunpklo z5.s, z3.h
2542 ; CHECK-NEXT: ext z3.b, z3.b, z3.b, #8
2543 ; CHECK-NEXT: uunpklo z6.s, z0.h
2544 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2545 ; CHECK-NEXT: uunpklo z2.s, z2.h
2546 ; CHECK-NEXT: uunpklo z7.s, z1.h
2547 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
2548 ; CHECK-NEXT: uunpklo z3.s, z3.h
2549 ; CHECK-NEXT: uunpklo z0.s, z0.h
2550 ; CHECK-NEXT: uunpklo z1.s, z1.h
2551 ; CHECK-NEXT: stp q4, q2, [x1, #64]
2552 ; CHECK-NEXT: stp q5, q3, [x1]
2553 ; CHECK-NEXT: stp q6, q0, [x1, #96]
2554 ; CHECK-NEXT: stp q7, q1, [x1, #32]
2557 ; NONEON-NOSVE-LABEL: zext_v32i8_v32i32:
2558 ; NONEON-NOSVE: // %bb.0:
2559 ; NONEON-NOSVE-NEXT: sub sp, sp, #464
2560 ; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #368] // 16-byte Folded Spill
2561 ; NONEON-NOSVE-NEXT: stp x28, x27, [sp, #384] // 16-byte Folded Spill
2562 ; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #400] // 16-byte Folded Spill
2563 ; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #416] // 16-byte Folded Spill
2564 ; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #432] // 16-byte Folded Spill
2565 ; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #448] // 16-byte Folded Spill
2566 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 464
2567 ; NONEON-NOSVE-NEXT: .cfi_offset w19, -8
2568 ; NONEON-NOSVE-NEXT: .cfi_offset w20, -16
2569 ; NONEON-NOSVE-NEXT: .cfi_offset w21, -24
2570 ; NONEON-NOSVE-NEXT: .cfi_offset w22, -32
2571 ; NONEON-NOSVE-NEXT: .cfi_offset w23, -40
2572 ; NONEON-NOSVE-NEXT: .cfi_offset w24, -48
2573 ; NONEON-NOSVE-NEXT: .cfi_offset w25, -56
2574 ; NONEON-NOSVE-NEXT: .cfi_offset w26, -64
2575 ; NONEON-NOSVE-NEXT: .cfi_offset w27, -72
2576 ; NONEON-NOSVE-NEXT: .cfi_offset w28, -80
2577 ; NONEON-NOSVE-NEXT: .cfi_offset w30, -88
2578 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -96
2579 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
2580 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
2581 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]
2582 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #41]
2583 ; NONEON-NOSVE-NEXT: ldrb w29, [sp, #18]
2584 ; NONEON-NOSVE-NEXT: ldrb w27, [sp, #16]
2585 ; NONEON-NOSVE-NEXT: ldrb w25, [sp, #30]
2586 ; NONEON-NOSVE-NEXT: ldrb w23, [sp, #28]
2587 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
2588 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]
2589 ; NONEON-NOSVE-NEXT: ldrb w21, [sp, #26]
2590 ; NONEON-NOSVE-NEXT: ldrb w19, [sp, #24]
2591 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #19]
2592 ; NONEON-NOSVE-NEXT: ldrb w6, [sp, #38]
2593 ; NONEON-NOSVE-NEXT: add w8, w8, w8
2594 ; NONEON-NOSVE-NEXT: ldrb w28, [sp, #17]
2595 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #22]
2596 ; NONEON-NOSVE-NEXT: strb w8, [sp, #60]
2597 ; NONEON-NOSVE-NEXT: add w8, w29, w29
2598 ; NONEON-NOSVE-NEXT: ldrb w4, [sp, #36]
2599 ; NONEON-NOSVE-NEXT: strb w8, [sp, #58]
2600 ; NONEON-NOSVE-NEXT: add w8, w27, w27
2601 ; NONEON-NOSVE-NEXT: ldrb w26, [sp, #31]
2602 ; NONEON-NOSVE-NEXT: strb w8, [sp, #56]
2603 ; NONEON-NOSVE-NEXT: add w8, w25, w25
2604 ; NONEON-NOSVE-NEXT: add w9, w9, w9
2605 ; NONEON-NOSVE-NEXT: strb w8, [sp, #54]
2606 ; NONEON-NOSVE-NEXT: add w8, w23, w23
2607 ; NONEON-NOSVE-NEXT: ldrb w2, [sp, #34]
2608 ; NONEON-NOSVE-NEXT: strb w8, [sp, #52]
2609 ; NONEON-NOSVE-NEXT: add w8, w21, w21
2610 ; NONEON-NOSVE-NEXT: ldrb w24, [sp, #29]
2611 ; NONEON-NOSVE-NEXT: strb w8, [sp, #50]
2612 ; NONEON-NOSVE-NEXT: add w8, w19, w19
2613 ; NONEON-NOSVE-NEXT: ldrb w17, [sp, #23]
2614 ; NONEON-NOSVE-NEXT: strb w9, [sp, #59]
2615 ; NONEON-NOSVE-NEXT: add w9, w28, w28
2616 ; NONEON-NOSVE-NEXT: add w18, w16, w16
2617 ; NONEON-NOSVE-NEXT: strb w8, [sp, #48]
2618 ; NONEON-NOSVE-NEXT: add w8, w6, w6
2619 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #32]
2620 ; NONEON-NOSVE-NEXT: ldrb w22, [sp, #27]
2621 ; NONEON-NOSVE-NEXT: strb w9, [sp, #57]
2622 ; NONEON-NOSVE-NEXT: add w9, w26, w26
2623 ; NONEON-NOSVE-NEXT: strb w8, [sp, #78]
2624 ; NONEON-NOSVE-NEXT: add w8, w4, w4
2625 ; NONEON-NOSVE-NEXT: ldrb w14, [sp, #46]
2626 ; NONEON-NOSVE-NEXT: ldrb w20, [sp, #25]
2627 ; NONEON-NOSVE-NEXT: ldrb w30, [sp, #21]
2628 ; NONEON-NOSVE-NEXT: strb w9, [sp, #55]
2629 ; NONEON-NOSVE-NEXT: add w9, w24, w24
2630 ; NONEON-NOSVE-NEXT: strb w8, [sp, #76]
2631 ; NONEON-NOSVE-NEXT: add w8, w2, w2
2632 ; NONEON-NOSVE-NEXT: ldrb w12, [sp, #44]
2633 ; NONEON-NOSVE-NEXT: add w17, w17, w17
2634 ; NONEON-NOSVE-NEXT: strb w9, [sp, #53]
2635 ; NONEON-NOSVE-NEXT: add w9, w22, w22
2636 ; NONEON-NOSVE-NEXT: strb w8, [sp, #74]
2637 ; NONEON-NOSVE-NEXT: add w8, w16, w16
2638 ; NONEON-NOSVE-NEXT: ldrb w10, [sp, #42]
2639 ; NONEON-NOSVE-NEXT: strb w17, [sp, #63]
2640 ; NONEON-NOSVE-NEXT: add w17, w30, w30
2641 ; NONEON-NOSVE-NEXT: strb w9, [sp, #51]
2642 ; NONEON-NOSVE-NEXT: add w9, w20, w20
2643 ; NONEON-NOSVE-NEXT: ldrb w7, [sp, #39]
2644 ; NONEON-NOSVE-NEXT: strb w8, [sp, #72]
2645 ; NONEON-NOSVE-NEXT: add w8, w14, w14
2646 ; NONEON-NOSVE-NEXT: ldrb w5, [sp, #37]
2647 ; NONEON-NOSVE-NEXT: strb w18, [sp, #62]
2648 ; NONEON-NOSVE-NEXT: ldrb w3, [sp, #35]
2649 ; NONEON-NOSVE-NEXT: ldrb w0, [sp, #33]
2650 ; NONEON-NOSVE-NEXT: strb w17, [sp, #61]
2651 ; NONEON-NOSVE-NEXT: ldrb w15, [sp, #47]
2652 ; NONEON-NOSVE-NEXT: ldrb w13, [sp, #45]
2653 ; NONEON-NOSVE-NEXT: strb w9, [sp, #49]
2654 ; NONEON-NOSVE-NEXT: add w9, w7, w7
2655 ; NONEON-NOSVE-NEXT: ldrb w11, [sp, #43]
2656 ; NONEON-NOSVE-NEXT: strb w8, [sp, #70]
2657 ; NONEON-NOSVE-NEXT: add w8, w12, w12
2658 ; NONEON-NOSVE-NEXT: strb w8, [sp, #68]
2659 ; NONEON-NOSVE-NEXT: add w8, w10, w10
2660 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
2661 ; NONEON-NOSVE-NEXT: strb w8, [sp, #66]
2662 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Folded Reload
2663 ; NONEON-NOSVE-NEXT: strb w9, [sp, #79]
2664 ; NONEON-NOSVE-NEXT: add w9, w5, w5
2665 ; NONEON-NOSVE-NEXT: strb w9, [sp, #77]
2666 ; NONEON-NOSVE-NEXT: add w9, w3, w3
2667 ; NONEON-NOSVE-NEXT: add w8, w8, w8
2668 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
2669 ; NONEON-NOSVE-NEXT: strb w8, [sp, #64]
2670 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #91]
2671 ; NONEON-NOSVE-NEXT: strb w9, [sp, #75]
2672 ; NONEON-NOSVE-NEXT: add w9, w0, w0
2673 ; NONEON-NOSVE-NEXT: strh w8, [sp, #134]
2674 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #90]
2675 ; NONEON-NOSVE-NEXT: strb w9, [sp, #73]
2676 ; NONEON-NOSVE-NEXT: add w9, w15, w15
2677 ; NONEON-NOSVE-NEXT: strh w8, [sp, #132]
2678 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #89]
2679 ; NONEON-NOSVE-NEXT: strb w9, [sp, #71]
2680 ; NONEON-NOSVE-NEXT: add w9, w13, w13
2681 ; NONEON-NOSVE-NEXT: strh w8, [sp, #130]
2682 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #88]
2683 ; NONEON-NOSVE-NEXT: strb w9, [sp, #69]
2684 ; NONEON-NOSVE-NEXT: add w9, w11, w11
2685 ; NONEON-NOSVE-NEXT: strh w8, [sp, #128]
2686 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #95]
2687 ; NONEON-NOSVE-NEXT: strb w9, [sp, #67]
2688 ; NONEON-NOSVE-NEXT: ldr w9, [sp, #8] // 4-byte Folded Reload
2689 ; NONEON-NOSVE-NEXT: strh w8, [sp, #142]
2690 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #94]
2691 ; NONEON-NOSVE-NEXT: add w9, w9, w9
2692 ; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #448] // 16-byte Folded Reload
2693 ; NONEON-NOSVE-NEXT: strh w8, [sp, #140]
2694 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #93]
2695 ; NONEON-NOSVE-NEXT: strb w9, [sp, #65]
2696 ; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #432] // 16-byte Folded Reload
2697 ; NONEON-NOSVE-NEXT: strh w8, [sp, #138]
2698 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #92]
2699 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #64]
2700 ; NONEON-NOSVE-NEXT: strh w8, [sp, #136]
2701 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #83]
2702 ; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #416] // 16-byte Folded Reload
2703 ; NONEON-NOSVE-NEXT: strh w8, [sp, #118]
2704 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #82]
2705 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #96]
2706 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #128]
2707 ; NONEON-NOSVE-NEXT: strh w8, [sp, #116]
2708 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #81]
2709 ; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #400] // 16-byte Folded Reload
2710 ; NONEON-NOSVE-NEXT: strh w8, [sp, #114]
2711 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #80]
2712 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #192]
2713 ; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #384] // 16-byte Folded Reload
2714 ; NONEON-NOSVE-NEXT: strh w8, [sp, #112]
2715 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #87]
2716 ; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #368] // 16-byte Folded Reload
2717 ; NONEON-NOSVE-NEXT: strh w8, [sp, #126]
2718 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #86]
2719 ; NONEON-NOSVE-NEXT: strh w8, [sp, #124]
2720 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #85]
2721 ; NONEON-NOSVE-NEXT: strh w8, [sp, #122]
2722 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #84]
2723 ; NONEON-NOSVE-NEXT: strh w8, [sp, #120]
2724 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #107]
2725 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #112]
2726 ; NONEON-NOSVE-NEXT: strh w8, [sp, #166]
2727 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #106]
2728 ; NONEON-NOSVE-NEXT: strh w8, [sp, #164]
2729 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #105]
2730 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #176]
2731 ; NONEON-NOSVE-NEXT: strh w8, [sp, #162]
2732 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #104]
2733 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #182]
2734 ; NONEON-NOSVE-NEXT: strh w8, [sp, #160]
2735 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #111]
2736 ; NONEON-NOSVE-NEXT: strh w8, [sp, #174]
2737 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #110]
2738 ; NONEON-NOSVE-NEXT: strh w8, [sp, #172]
2739 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #109]
2740 ; NONEON-NOSVE-NEXT: strh w8, [sp, #170]
2741 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #108]
2742 ; NONEON-NOSVE-NEXT: strh w8, [sp, #168]
2743 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #99]
2744 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #160]
2745 ; NONEON-NOSVE-NEXT: strh w8, [sp, #150]
2746 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #98]
2747 ; NONEON-NOSVE-NEXT: strh w8, [sp, #148]
2748 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #97]
2749 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #224]
2750 ; NONEON-NOSVE-NEXT: strh w8, [sp, #146]
2751 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #96]
2752 ; NONEON-NOSVE-NEXT: strh w8, [sp, #144]
2753 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #103]
2754 ; NONEON-NOSVE-NEXT: strh w8, [sp, #158]
2755 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #102]
2756 ; NONEON-NOSVE-NEXT: strh w8, [sp, #156]
2757 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #101]
2758 ; NONEON-NOSVE-NEXT: strh w8, [sp, #154]
2759 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #100]
2760 ; NONEON-NOSVE-NEXT: strh w8, [sp, #152]
2761 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #198]
2762 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #144]
2763 ; NONEON-NOSVE-NEXT: str w8, [sp, #284]
2764 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #196]
2765 ; NONEON-NOSVE-NEXT: str w8, [sp, #280]
2766 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #194]
2767 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #208]
2768 ; NONEON-NOSVE-NEXT: str w8, [sp, #276]
2769 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #192]
2770 ; NONEON-NOSVE-NEXT: str w8, [sp, #272]
2771 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #206]
2772 ; NONEON-NOSVE-NEXT: str w8, [sp, #300]
2773 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #204]
2774 ; NONEON-NOSVE-NEXT: str w8, [sp, #296]
2775 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #202]
2776 ; NONEON-NOSVE-NEXT: str w8, [sp, #292]
2777 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #200]
2778 ; NONEON-NOSVE-NEXT: str w8, [sp, #288]
2779 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #180]
2780 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #272]
2781 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #248]
2782 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #178]
2783 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #176]
2784 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #240]
2785 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #190]
2786 ; NONEON-NOSVE-NEXT: str w8, [sp, #268]
2787 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #188]
2788 ; NONEON-NOSVE-NEXT: str w8, [sp, #264]
2789 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #186]
2790 ; NONEON-NOSVE-NEXT: str w8, [sp, #260]
2791 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #184]
2792 ; NONEON-NOSVE-NEXT: str w8, [sp, #256]
2793 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #230]
2794 ; NONEON-NOSVE-NEXT: ldp q3, q4, [sp, #240]
2795 ; NONEON-NOSVE-NEXT: str w8, [sp, #348]
2796 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #228]
2797 ; NONEON-NOSVE-NEXT: str w8, [sp, #344]
2798 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #226]
2799 ; NONEON-NOSVE-NEXT: str w8, [sp, #340]
2800 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #224]
2801 ; NONEON-NOSVE-NEXT: str w8, [sp, #336]
2802 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #238]
2803 ; NONEON-NOSVE-NEXT: str w8, [sp, #364]
2804 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #236]
2805 ; NONEON-NOSVE-NEXT: str w8, [sp, #360]
2806 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #234]
2807 ; NONEON-NOSVE-NEXT: str w8, [sp, #356]
2808 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #232]
2809 ; NONEON-NOSVE-NEXT: str w8, [sp, #352]
2810 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #214]
2811 ; NONEON-NOSVE-NEXT: ldp q6, q7, [sp, #336]
2812 ; NONEON-NOSVE-NEXT: str w8, [sp, #316]
2813 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #212]
2814 ; NONEON-NOSVE-NEXT: str w8, [sp, #312]
2815 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #210]
2816 ; NONEON-NOSVE-NEXT: str w8, [sp, #308]
2817 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #208]
2818 ; NONEON-NOSVE-NEXT: str w8, [sp, #304]
2819 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #222]
2820 ; NONEON-NOSVE-NEXT: str w8, [sp, #332]
2821 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #220]
2822 ; NONEON-NOSVE-NEXT: str w8, [sp, #328]
2823 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #218]
2824 ; NONEON-NOSVE-NEXT: str w8, [sp, #324]
2825 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #216]
2826 ; NONEON-NOSVE-NEXT: str w8, [sp, #320]
2827 ; NONEON-NOSVE-NEXT: ldp q5, q2, [sp, #304]
2828 ; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
2829 ; NONEON-NOSVE-NEXT: stp q3, q4, [x1, #32]
2830 ; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #64]
2831 ; NONEON-NOSVE-NEXT: stp q5, q2, [x1, #96]
2832 ; NONEON-NOSVE-NEXT: add sp, sp, #464
2833 ; NONEON-NOSVE-NEXT: ret
2834 %a = load <32 x i8>, ptr %in
2835 %b = add <32 x i8> %a, %a
2836 %c = zext <32 x i8> %b to <32 x i32>
2837 store <32 x i32> %c, ptr %out
2845 ; NOTE: v4i8 is an unpacked typed stored within a v4i16 container. The zero
2846 ; extend is a two step process where the container is zero_extend_inreg'd with
2847 ; the result feeding a normal zero extend from halfs to doublewords.
2848 define void @zext_v4i8_v4i64(<4 x i8> %a, ptr %out) {
2849 ; CHECK-LABEL: zext_v4i8_v4i64:
2851 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
2852 ; CHECK-NEXT: and z0.h, z0.h, #0xff
2853 ; CHECK-NEXT: uunpklo z0.s, z0.h
2854 ; CHECK-NEXT: uunpklo z1.d, z0.s
2855 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2856 ; CHECK-NEXT: uunpklo z0.d, z0.s
2857 ; CHECK-NEXT: stp q1, q0, [x0]
2860 ; NONEON-NOSVE-LABEL: zext_v4i8_v4i64:
2861 ; NONEON-NOSVE: // %bb.0:
2862 ; NONEON-NOSVE-NEXT: sub sp, sp, #80
2863 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 80
2864 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
2865 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]
2866 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]
2867 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #24]
2868 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]
2869 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]
2870 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #16]
2871 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #16]
2872 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #32]
2873 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #40]
2874 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #72]
2875 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #64]
2876 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #32]
2877 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #56]
2878 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #48]
2879 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #48]
2880 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
2881 ; NONEON-NOSVE-NEXT: add sp, sp, #80
2882 ; NONEON-NOSVE-NEXT: ret
2883 %b = zext <4 x i8> %a to <4 x i64>
2884 store <4 x i64>%b, ptr %out
2888 define void @zext_v8i8_v8i64(<8 x i8> %a, ptr %out) {
2889 ; CHECK-LABEL: zext_v8i8_v8i64:
2891 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
2892 ; CHECK-NEXT: uunpklo z0.h, z0.b
2893 ; CHECK-NEXT: uunpklo z1.s, z0.h
2894 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2895 ; CHECK-NEXT: uunpklo z0.s, z0.h
2896 ; CHECK-NEXT: uunpklo z2.d, z1.s
2897 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
2898 ; CHECK-NEXT: uunpklo z3.d, z0.s
2899 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2900 ; CHECK-NEXT: uunpklo z1.d, z1.s
2901 ; CHECK-NEXT: uunpklo z0.d, z0.s
2902 ; CHECK-NEXT: stp q2, q1, [x0]
2903 ; CHECK-NEXT: stp q3, q0, [x0, #32]
2906 ; NONEON-NOSVE-LABEL: zext_v8i8_v8i64:
2907 ; NONEON-NOSVE: // %bb.0:
2908 ; NONEON-NOSVE-NEXT: sub sp, sp, #176
2909 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 176
2910 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
2911 ; NONEON-NOSVE-NEXT: add x8, sp, #144
2912 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]
2913 ; NONEON-NOSVE-NEXT: strh w9, [sp, #30]
2914 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]
2915 ; NONEON-NOSVE-NEXT: strh w9, [sp, #28]
2916 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]
2917 ; NONEON-NOSVE-NEXT: strh w9, [sp, #26]
2918 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]
2919 ; NONEON-NOSVE-NEXT: strh w9, [sp, #24]
2920 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]
2921 ; NONEON-NOSVE-NEXT: strh w9, [sp, #22]
2922 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]
2923 ; NONEON-NOSVE-NEXT: strh w9, [sp, #20]
2924 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]
2925 ; NONEON-NOSVE-NEXT: strh w9, [sp, #18]
2926 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]
2927 ; NONEON-NOSVE-NEXT: strh w9, [sp, #16]
2928 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #16]
2929 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #32]
2930 ; NONEON-NOSVE-NEXT: ldrb w10, [sp, #42]
2931 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]
2932 ; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #64]
2933 ; NONEON-NOSVE-NEXT: ldrb w10, [sp, #46]
2934 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #44]
2935 ; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #72]
2936 ; NONEON-NOSVE-NEXT: ldrb w10, [sp, #34]
2937 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #32]
2938 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #64]
2939 ; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #48]
2940 ; NONEON-NOSVE-NEXT: ldrb w10, [sp, #38]
2941 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #36]
2942 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #96]
2943 ; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #56]
2944 ; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #96]
2945 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #48]
2946 ; NONEON-NOSVE-NEXT: stp w10, wzr, [sp, #152]
2947 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #144]
2948 ; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #104]
2949 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #80]
2950 ; NONEON-NOSVE-NEXT: stp w10, wzr, [sp, #168]
2951 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #160]
2952 ; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #80]
2953 ; NONEON-NOSVE-NEXT: stp w10, wzr, [sp, #120]
2954 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #112]
2955 ; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #88]
2956 ; NONEON-NOSVE-NEXT: stp w10, wzr, [sp, #136]
2957 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #128]
2958 ; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #112]
2959 ; NONEON-NOSVE-NEXT: ldp q2, q3, [x8]
2960 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0, #32]
2961 ; NONEON-NOSVE-NEXT: stp q2, q3, [x0]
2962 ; NONEON-NOSVE-NEXT: add sp, sp, #176
2963 ; NONEON-NOSVE-NEXT: ret
2964 %b = zext <8 x i8> %a to <8 x i64>
2965 store <8 x i64>%b, ptr %out
2969 define void @zext_v16i8_v16i64(<16 x i8> %a, ptr %out) {
2970 ; CHECK-LABEL: zext_v16i8_v16i64:
2972 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
2973 ; CHECK-NEXT: uunpklo z1.h, z0.b
2974 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2975 ; CHECK-NEXT: uunpklo z0.h, z0.b
2976 ; CHECK-NEXT: uunpklo z2.s, z1.h
2977 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
2978 ; CHECK-NEXT: uunpklo z1.s, z1.h
2979 ; CHECK-NEXT: uunpklo z3.s, z0.h
2980 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2981 ; CHECK-NEXT: uunpklo z4.d, z2.s
2982 ; CHECK-NEXT: ext z2.b, z2.b, z2.b, #8
2983 ; CHECK-NEXT: uunpklo z0.s, z0.h
2984 ; CHECK-NEXT: uunpklo z6.d, z1.s
2985 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
2986 ; CHECK-NEXT: uunpklo z5.d, z3.s
2987 ; CHECK-NEXT: ext z3.b, z3.b, z3.b, #8
2988 ; CHECK-NEXT: uunpklo z2.d, z2.s
2989 ; CHECK-NEXT: uunpklo z1.d, z1.s
2990 ; CHECK-NEXT: uunpklo z7.d, z0.s
2991 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
2992 ; CHECK-NEXT: uunpklo z3.d, z3.s
2993 ; CHECK-NEXT: stp q4, q2, [x0]
2994 ; CHECK-NEXT: uunpklo z0.d, z0.s
2995 ; CHECK-NEXT: stp q6, q1, [x0, #32]
2996 ; CHECK-NEXT: stp q5, q3, [x0, #64]
2997 ; CHECK-NEXT: stp q7, q0, [x0, #96]
3000 ; NONEON-NOSVE-LABEL: zext_v16i8_v16i64:
3001 ; NONEON-NOSVE: // %bb.0:
3002 ; NONEON-NOSVE-NEXT: sub sp, sp, #368
3003 ; NONEON-NOSVE-NEXT: str x29, [sp, #352] // 8-byte Folded Spill
3004 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 368
3005 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
3006 ; NONEON-NOSVE-NEXT: str q0, [sp]
3007 ; NONEON-NOSVE-NEXT: ldr x29, [sp, #352] // 8-byte Folded Reload
3008 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
3009 ; NONEON-NOSVE-NEXT: str wzr, [sp, #332]
3010 ; NONEON-NOSVE-NEXT: str wzr, [sp, #324]
3011 ; NONEON-NOSVE-NEXT: str wzr, [sp, #348]
3012 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #24]
3013 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #35]
3014 ; NONEON-NOSVE-NEXT: str wzr, [sp, #340]
3015 ; NONEON-NOSVE-NEXT: str wzr, [sp, #300]
3016 ; NONEON-NOSVE-NEXT: strh w8, [sp, #70]
3017 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #34]
3018 ; NONEON-NOSVE-NEXT: str wzr, [sp, #292]
3019 ; NONEON-NOSVE-NEXT: strh w8, [sp, #68]
3020 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #33]
3021 ; NONEON-NOSVE-NEXT: str wzr, [sp, #316]
3022 ; NONEON-NOSVE-NEXT: strh w8, [sp, #66]
3023 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #32]
3024 ; NONEON-NOSVE-NEXT: str wzr, [sp, #308]
3025 ; NONEON-NOSVE-NEXT: strh w8, [sp, #64]
3026 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #39]
3027 ; NONEON-NOSVE-NEXT: str wzr, [sp, #268]
3028 ; NONEON-NOSVE-NEXT: strh w8, [sp, #62]
3029 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #38]
3030 ; NONEON-NOSVE-NEXT: str wzr, [sp, #260]
3031 ; NONEON-NOSVE-NEXT: strh w8, [sp, #60]
3032 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #37]
3033 ; NONEON-NOSVE-NEXT: str wzr, [sp, #284]
3034 ; NONEON-NOSVE-NEXT: strh w8, [sp, #58]
3035 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #36]
3036 ; NONEON-NOSVE-NEXT: str wzr, [sp, #276]
3037 ; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
3038 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]
3039 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #56]
3040 ; NONEON-NOSVE-NEXT: strh w8, [sp, #54]
3041 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]
3042 ; NONEON-NOSVE-NEXT: strh w8, [sp, #52]
3043 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]
3044 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #88]
3045 ; NONEON-NOSVE-NEXT: strh w8, [sp, #50]
3046 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]
3047 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #98]
3048 ; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
3049 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]
3050 ; NONEON-NOSVE-NEXT: strh w8, [sp, #46]
3051 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]
3052 ; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
3053 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]
3054 ; NONEON-NOSVE-NEXT: strh w8, [sp, #42]
3055 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]
3056 ; NONEON-NOSVE-NEXT: strh w8, [sp, #40]
3057 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #96]
3058 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #40]
3059 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
3060 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #102]
3061 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #100]
3062 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #160]
3063 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #90]
3064 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #88]
3065 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #72]
3066 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #152]
3067 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
3068 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #94]
3069 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #92]
3070 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
3071 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #82]
3072 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #80]
3073 ; NONEON-NOSVE-NEXT: str d0, [sp, #360]
3074 ; NONEON-NOSVE-NEXT: ldp d2, d0, [sp, #136]
3075 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
3076 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #86]
3077 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #84]
3078 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
3079 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #74]
3080 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #72]
3081 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #208]
3082 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #120]
3083 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #104]
3084 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #78]
3085 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #76]
3086 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
3087 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #216]
3088 ; NONEON-NOSVE-NEXT: stp d0, d2, [sp, #192]
3089 ; NONEON-NOSVE-NEXT: ldp d2, d0, [sp, #104]
3090 ; NONEON-NOSVE-NEXT: str w8, [sp, #320]
3091 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #364]
3092 ; NONEON-NOSVE-NEXT: str w9, [sp, #328]
3093 ; NONEON-NOSVE-NEXT: str w8, [sp, #344]
3094 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #360]
3095 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #176]
3096 ; NONEON-NOSVE-NEXT: str w8, [sp, #336]
3097 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #200]
3098 ; NONEON-NOSVE-NEXT: str d2, [sp, #168]
3099 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #320]
3100 ; NONEON-NOSVE-NEXT: str w9, [sp, #296]
3101 ; NONEON-NOSVE-NEXT: str w8, [sp, #288]
3102 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #208]
3103 ; NONEON-NOSVE-NEXT: str w9, [sp, #312]
3104 ; NONEON-NOSVE-NEXT: str w8, [sp, #304]
3105 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #184]
3106 ; NONEON-NOSVE-NEXT: ldp q3, q4, [sp, #288]
3107 ; NONEON-NOSVE-NEXT: str w9, [sp, #264]
3108 ; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #252]
3109 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #192]
3110 ; NONEON-NOSVE-NEXT: str w9, [sp, #280]
3111 ; NONEON-NOSVE-NEXT: str w8, [sp, #272]
3112 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #168]
3113 ; NONEON-NOSVE-NEXT: ldp q6, q7, [sp, #256]
3114 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #232]
3115 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #224]
3116 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #176]
3117 ; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #244]
3118 ; NONEON-NOSVE-NEXT: str w8, [sp, #240]
3119 ; NONEON-NOSVE-NEXT: ldp q5, q2, [sp, #224]
3120 ; NONEON-NOSVE-NEXT: stp q0, q1, [x0]
3121 ; NONEON-NOSVE-NEXT: stp q3, q4, [x0, #32]
3122 ; NONEON-NOSVE-NEXT: stp q6, q7, [x0, #64]
3123 ; NONEON-NOSVE-NEXT: stp q5, q2, [x0, #96]
3124 ; NONEON-NOSVE-NEXT: add sp, sp, #368
3125 ; NONEON-NOSVE-NEXT: ret
3126 %b = zext <16 x i8> %a to <16 x i64>
3127 store <16 x i64> %b, ptr %out
3131 define void @zext_v32i8_v32i64(ptr %in, ptr %out) {
3132 ; CHECK-LABEL: zext_v32i8_v32i64:
3134 ; CHECK-NEXT: ldp q1, q0, [x0]
3135 ; CHECK-NEXT: add z0.b, z0.b, z0.b
3136 ; CHECK-NEXT: add z1.b, z1.b, z1.b
3137 ; CHECK-NEXT: mov z2.d, z0.d
3138 ; CHECK-NEXT: uunpklo z0.h, z0.b
3139 ; CHECK-NEXT: mov z3.d, z1.d
3140 ; CHECK-NEXT: uunpklo z1.h, z1.b
3141 ; CHECK-NEXT: ext z2.b, z2.b, z2.b, #8
3142 ; CHECK-NEXT: ext z3.b, z3.b, z3.b, #8
3143 ; CHECK-NEXT: uunpklo z4.s, z0.h
3144 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
3145 ; CHECK-NEXT: uunpklo z5.s, z1.h
3146 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
3147 ; CHECK-NEXT: uunpklo z2.h, z2.b
3148 ; CHECK-NEXT: uunpklo z3.h, z3.b
3149 ; CHECK-NEXT: uunpklo z0.s, z0.h
3150 ; CHECK-NEXT: uunpklo z16.d, z4.s
3151 ; CHECK-NEXT: ext z4.b, z4.b, z4.b, #8
3152 ; CHECK-NEXT: uunpklo z1.s, z1.h
3153 ; CHECK-NEXT: uunpklo z17.d, z5.s
3154 ; CHECK-NEXT: ext z5.b, z5.b, z5.b, #8
3155 ; CHECK-NEXT: uunpklo z6.s, z2.h
3156 ; CHECK-NEXT: uunpklo z7.s, z3.h
3157 ; CHECK-NEXT: ext z2.b, z2.b, z2.b, #8
3158 ; CHECK-NEXT: uunpklo z4.d, z4.s
3159 ; CHECK-NEXT: ext z3.b, z3.b, z3.b, #8
3160 ; CHECK-NEXT: uunpklo z19.d, z0.s
3161 ; CHECK-NEXT: uunpklo z5.d, z5.s
3162 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
3163 ; CHECK-NEXT: uunpklo z2.s, z2.h
3164 ; CHECK-NEXT: uunpklo z18.d, z6.s
3165 ; CHECK-NEXT: ext z6.b, z6.b, z6.b, #8
3166 ; CHECK-NEXT: uunpklo z3.s, z3.h
3167 ; CHECK-NEXT: stp q16, q4, [x1, #128]
3168 ; CHECK-NEXT: mov z16.d, z7.d
3169 ; CHECK-NEXT: uunpklo z0.d, z0.s
3170 ; CHECK-NEXT: stp q17, q5, [x1]
3171 ; CHECK-NEXT: uunpklo z5.d, z7.s
3172 ; CHECK-NEXT: uunpklo z4.d, z6.s
3173 ; CHECK-NEXT: mov z6.d, z1.d
3174 ; CHECK-NEXT: ext z16.b, z16.b, z7.b, #8
3175 ; CHECK-NEXT: mov z7.d, z2.d
3176 ; CHECK-NEXT: stp q19, q0, [x1, #160]
3177 ; CHECK-NEXT: uunpklo z0.d, z2.s
3178 ; CHECK-NEXT: ext z6.b, z6.b, z1.b, #8
3179 ; CHECK-NEXT: uunpklo z1.d, z1.s
3180 ; CHECK-NEXT: stp q18, q4, [x1, #192]
3181 ; CHECK-NEXT: mov z4.d, z3.d
3182 ; CHECK-NEXT: ext z7.b, z7.b, z2.b, #8
3183 ; CHECK-NEXT: uunpklo z16.d, z16.s
3184 ; CHECK-NEXT: uunpklo z6.d, z6.s
3185 ; CHECK-NEXT: ext z4.b, z4.b, z3.b, #8
3186 ; CHECK-NEXT: uunpklo z2.d, z7.s
3187 ; CHECK-NEXT: uunpklo z3.d, z3.s
3188 ; CHECK-NEXT: stp q5, q16, [x1, #64]
3189 ; CHECK-NEXT: stp q1, q6, [x1, #32]
3190 ; CHECK-NEXT: uunpklo z1.d, z4.s
3191 ; CHECK-NEXT: stp q0, q2, [x1, #224]
3192 ; CHECK-NEXT: stp q3, q1, [x1, #96]
3195 ; NONEON-NOSVE-LABEL: zext_v32i8_v32i64:
3196 ; NONEON-NOSVE: // %bb.0:
3197 ; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #-96]! // 16-byte Folded Spill
3198 ; NONEON-NOSVE-NEXT: stp x28, x27, [sp, #16] // 16-byte Folded Spill
3199 ; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #32] // 16-byte Folded Spill
3200 ; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #48] // 16-byte Folded Spill
3201 ; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #64] // 16-byte Folded Spill
3202 ; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill
3203 ; NONEON-NOSVE-NEXT: sub sp, sp, #752
3204 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 848
3205 ; NONEON-NOSVE-NEXT: .cfi_offset w19, -8
3206 ; NONEON-NOSVE-NEXT: .cfi_offset w20, -16
3207 ; NONEON-NOSVE-NEXT: .cfi_offset w21, -24
3208 ; NONEON-NOSVE-NEXT: .cfi_offset w22, -32
3209 ; NONEON-NOSVE-NEXT: .cfi_offset w23, -40
3210 ; NONEON-NOSVE-NEXT: .cfi_offset w24, -48
3211 ; NONEON-NOSVE-NEXT: .cfi_offset w25, -56
3212 ; NONEON-NOSVE-NEXT: .cfi_offset w26, -64
3213 ; NONEON-NOSVE-NEXT: .cfi_offset w27, -72
3214 ; NONEON-NOSVE-NEXT: .cfi_offset w28, -80
3215 ; NONEON-NOSVE-NEXT: .cfi_offset w30, -88
3216 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -96
3217 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
3218 ; NONEON-NOSVE-NEXT: str wzr, [sp, #572]
3219 ; NONEON-NOSVE-NEXT: str wzr, [sp, #564]
3220 ; NONEON-NOSVE-NEXT: str wzr, [sp, #588]
3221 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
3222 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]
3223 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #41]
3224 ; NONEON-NOSVE-NEXT: ldrb w29, [sp, #18]
3225 ; NONEON-NOSVE-NEXT: ldrb w27, [sp, #16]
3226 ; NONEON-NOSVE-NEXT: ldrb w25, [sp, #30]
3227 ; NONEON-NOSVE-NEXT: ldrb w23, [sp, #28]
3228 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
3229 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]
3230 ; NONEON-NOSVE-NEXT: ldrb w21, [sp, #26]
3231 ; NONEON-NOSVE-NEXT: ldrb w19, [sp, #24]
3232 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #19]
3233 ; NONEON-NOSVE-NEXT: ldrb w6, [sp, #38]
3234 ; NONEON-NOSVE-NEXT: add w8, w8, w8
3235 ; NONEON-NOSVE-NEXT: ldrb w28, [sp, #17]
3236 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #22]
3237 ; NONEON-NOSVE-NEXT: add w9, w9, w9
3238 ; NONEON-NOSVE-NEXT: strb w8, [sp, #60]
3239 ; NONEON-NOSVE-NEXT: add w8, w29, w29
3240 ; NONEON-NOSVE-NEXT: strb w8, [sp, #58]
3241 ; NONEON-NOSVE-NEXT: add w8, w27, w27
3242 ; NONEON-NOSVE-NEXT: add w18, w16, w16
3243 ; NONEON-NOSVE-NEXT: strb w8, [sp, #56]
3244 ; NONEON-NOSVE-NEXT: add w8, w25, w25
3245 ; NONEON-NOSVE-NEXT: ldrb w4, [sp, #36]
3246 ; NONEON-NOSVE-NEXT: strb w8, [sp, #54]
3247 ; NONEON-NOSVE-NEXT: add w8, w23, w23
3248 ; NONEON-NOSVE-NEXT: ldrb w26, [sp, #31]
3249 ; NONEON-NOSVE-NEXT: strb w8, [sp, #52]
3250 ; NONEON-NOSVE-NEXT: add w8, w21, w21
3251 ; NONEON-NOSVE-NEXT: ldrb w2, [sp, #34]
3252 ; NONEON-NOSVE-NEXT: strb w8, [sp, #50]
3253 ; NONEON-NOSVE-NEXT: add w8, w19, w19
3254 ; NONEON-NOSVE-NEXT: ldrb w24, [sp, #29]
3255 ; NONEON-NOSVE-NEXT: strb w9, [sp, #59]
3256 ; NONEON-NOSVE-NEXT: add w9, w28, w28
3257 ; NONEON-NOSVE-NEXT: ldrb w17, [sp, #23]
3258 ; NONEON-NOSVE-NEXT: strb w8, [sp, #48]
3259 ; NONEON-NOSVE-NEXT: add w8, w6, w6
3260 ; NONEON-NOSVE-NEXT: ldrb w16, [sp, #32]
3261 ; NONEON-NOSVE-NEXT: ldrb w22, [sp, #27]
3262 ; NONEON-NOSVE-NEXT: strb w9, [sp, #57]
3263 ; NONEON-NOSVE-NEXT: add w9, w26, w26
3264 ; NONEON-NOSVE-NEXT: strb w8, [sp, #78]
3265 ; NONEON-NOSVE-NEXT: add w8, w4, w4
3266 ; NONEON-NOSVE-NEXT: ldrb w14, [sp, #46]
3267 ; NONEON-NOSVE-NEXT: ldrb w20, [sp, #25]
3268 ; NONEON-NOSVE-NEXT: ldrb w30, [sp, #21]
3269 ; NONEON-NOSVE-NEXT: add w17, w17, w17
3270 ; NONEON-NOSVE-NEXT: strb w9, [sp, #55]
3271 ; NONEON-NOSVE-NEXT: add w9, w24, w24
3272 ; NONEON-NOSVE-NEXT: ldrb w12, [sp, #44]
3273 ; NONEON-NOSVE-NEXT: strb w8, [sp, #76]
3274 ; NONEON-NOSVE-NEXT: add w8, w2, w2
3275 ; NONEON-NOSVE-NEXT: ldrb w10, [sp, #42]
3276 ; NONEON-NOSVE-NEXT: strb w9, [sp, #53]
3277 ; NONEON-NOSVE-NEXT: add w9, w22, w22
3278 ; NONEON-NOSVE-NEXT: ldrb w7, [sp, #39]
3279 ; NONEON-NOSVE-NEXT: strb w8, [sp, #74]
3280 ; NONEON-NOSVE-NEXT: add w8, w16, w16
3281 ; NONEON-NOSVE-NEXT: ldrb w5, [sp, #37]
3282 ; NONEON-NOSVE-NEXT: strb w17, [sp, #63]
3283 ; NONEON-NOSVE-NEXT: add w17, w30, w30
3284 ; NONEON-NOSVE-NEXT: ldrb w3, [sp, #35]
3285 ; NONEON-NOSVE-NEXT: strb w9, [sp, #51]
3286 ; NONEON-NOSVE-NEXT: add w9, w20, w20
3287 ; NONEON-NOSVE-NEXT: ldrb w0, [sp, #33]
3288 ; NONEON-NOSVE-NEXT: strb w8, [sp, #72]
3289 ; NONEON-NOSVE-NEXT: add w8, w14, w14
3290 ; NONEON-NOSVE-NEXT: ldrb w15, [sp, #47]
3291 ; NONEON-NOSVE-NEXT: strb w18, [sp, #62]
3292 ; NONEON-NOSVE-NEXT: ldrb w13, [sp, #45]
3293 ; NONEON-NOSVE-NEXT: ldrb w11, [sp, #43]
3294 ; NONEON-NOSVE-NEXT: strb w17, [sp, #61]
3295 ; NONEON-NOSVE-NEXT: strb w9, [sp, #49]
3296 ; NONEON-NOSVE-NEXT: add w9, w7, w7
3297 ; NONEON-NOSVE-NEXT: strb w8, [sp, #70]
3298 ; NONEON-NOSVE-NEXT: add w8, w12, w12
3299 ; NONEON-NOSVE-NEXT: strb w8, [sp, #68]
3300 ; NONEON-NOSVE-NEXT: add w8, w10, w10
3301 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
3302 ; NONEON-NOSVE-NEXT: strb w8, [sp, #66]
3303 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Folded Reload
3304 ; NONEON-NOSVE-NEXT: strb w9, [sp, #79]
3305 ; NONEON-NOSVE-NEXT: add w9, w5, w5
3306 ; NONEON-NOSVE-NEXT: strb w9, [sp, #77]
3307 ; NONEON-NOSVE-NEXT: add w9, w3, w3
3308 ; NONEON-NOSVE-NEXT: add w8, w8, w8
3309 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
3310 ; NONEON-NOSVE-NEXT: strb w8, [sp, #64]
3311 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #91]
3312 ; NONEON-NOSVE-NEXT: strb w9, [sp, #75]
3313 ; NONEON-NOSVE-NEXT: add w9, w0, w0
3314 ; NONEON-NOSVE-NEXT: strh w8, [sp, #134]
3315 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #90]
3316 ; NONEON-NOSVE-NEXT: strb w9, [sp, #73]
3317 ; NONEON-NOSVE-NEXT: add w9, w15, w15
3318 ; NONEON-NOSVE-NEXT: strh w8, [sp, #132]
3319 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #89]
3320 ; NONEON-NOSVE-NEXT: strb w9, [sp, #71]
3321 ; NONEON-NOSVE-NEXT: add w9, w13, w13
3322 ; NONEON-NOSVE-NEXT: strh w8, [sp, #130]
3323 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #88]
3324 ; NONEON-NOSVE-NEXT: strb w9, [sp, #69]
3325 ; NONEON-NOSVE-NEXT: add w9, w11, w11
3326 ; NONEON-NOSVE-NEXT: strh w8, [sp, #128]
3327 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #95]
3328 ; NONEON-NOSVE-NEXT: strb w9, [sp, #67]
3329 ; NONEON-NOSVE-NEXT: ldr w9, [sp, #8] // 4-byte Folded Reload
3330 ; NONEON-NOSVE-NEXT: strh w8, [sp, #142]
3331 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #94]
3332 ; NONEON-NOSVE-NEXT: add w9, w9, w9
3333 ; NONEON-NOSVE-NEXT: str wzr, [sp, #580]
3334 ; NONEON-NOSVE-NEXT: strh w8, [sp, #140]
3335 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #93]
3336 ; NONEON-NOSVE-NEXT: strb w9, [sp, #65]
3337 ; NONEON-NOSVE-NEXT: strh w8, [sp, #138]
3338 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #92]
3339 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #64]
3340 ; NONEON-NOSVE-NEXT: str wzr, [sp, #604]
3341 ; NONEON-NOSVE-NEXT: strh w8, [sp, #136]
3342 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #83]
3343 ; NONEON-NOSVE-NEXT: str wzr, [sp, #596]
3344 ; NONEON-NOSVE-NEXT: strh w8, [sp, #118]
3345 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #82]
3346 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #96]
3347 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #128]
3348 ; NONEON-NOSVE-NEXT: strh w8, [sp, #116]
3349 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #81]
3350 ; NONEON-NOSVE-NEXT: str wzr, [sp, #620]
3351 ; NONEON-NOSVE-NEXT: strh w8, [sp, #114]
3352 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #80]
3353 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #192]
3354 ; NONEON-NOSVE-NEXT: strh w8, [sp, #112]
3355 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #87]
3356 ; NONEON-NOSVE-NEXT: str wzr, [sp, #612]
3357 ; NONEON-NOSVE-NEXT: strh w8, [sp, #126]
3358 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #86]
3359 ; NONEON-NOSVE-NEXT: str wzr, [sp, #508]
3360 ; NONEON-NOSVE-NEXT: strh w8, [sp, #124]
3361 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #85]
3362 ; NONEON-NOSVE-NEXT: str wzr, [sp, #500]
3363 ; NONEON-NOSVE-NEXT: strh w8, [sp, #122]
3364 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #84]
3365 ; NONEON-NOSVE-NEXT: str wzr, [sp, #524]
3366 ; NONEON-NOSVE-NEXT: strh w8, [sp, #120]
3367 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #107]
3368 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #112]
3369 ; NONEON-NOSVE-NEXT: str wzr, [sp, #516]
3370 ; NONEON-NOSVE-NEXT: strh w8, [sp, #166]
3371 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #106]
3372 ; NONEON-NOSVE-NEXT: str wzr, [sp, #540]
3373 ; NONEON-NOSVE-NEXT: strh w8, [sp, #164]
3374 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #105]
3375 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #176]
3376 ; NONEON-NOSVE-NEXT: strh w8, [sp, #162]
3377 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #104]
3378 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #178]
3379 ; NONEON-NOSVE-NEXT: str wzr, [sp, #532]
3380 ; NONEON-NOSVE-NEXT: strh w8, [sp, #160]
3381 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #111]
3382 ; NONEON-NOSVE-NEXT: str wzr, [sp, #556]
3383 ; NONEON-NOSVE-NEXT: strh w8, [sp, #174]
3384 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #110]
3385 ; NONEON-NOSVE-NEXT: str wzr, [sp, #548]
3386 ; NONEON-NOSVE-NEXT: strh w8, [sp, #172]
3387 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #109]
3388 ; NONEON-NOSVE-NEXT: str wzr, [sp, #700]
3389 ; NONEON-NOSVE-NEXT: strh w8, [sp, #170]
3390 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #108]
3391 ; NONEON-NOSVE-NEXT: str wzr, [sp, #692]
3392 ; NONEON-NOSVE-NEXT: strh w8, [sp, #168]
3393 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #99]
3394 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #160]
3395 ; NONEON-NOSVE-NEXT: str wzr, [sp, #716]
3396 ; NONEON-NOSVE-NEXT: strh w8, [sp, #150]
3397 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #98]
3398 ; NONEON-NOSVE-NEXT: str wzr, [sp, #708]
3399 ; NONEON-NOSVE-NEXT: strh w8, [sp, #148]
3400 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #97]
3401 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #224]
3402 ; NONEON-NOSVE-NEXT: strh w8, [sp, #146]
3403 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #96]
3404 ; NONEON-NOSVE-NEXT: str wzr, [sp, #732]
3405 ; NONEON-NOSVE-NEXT: strh w8, [sp, #144]
3406 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #103]
3407 ; NONEON-NOSVE-NEXT: str wzr, [sp, #724]
3408 ; NONEON-NOSVE-NEXT: strh w8, [sp, #158]
3409 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #102]
3410 ; NONEON-NOSVE-NEXT: str wzr, [sp, #748]
3411 ; NONEON-NOSVE-NEXT: strh w8, [sp, #156]
3412 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #101]
3413 ; NONEON-NOSVE-NEXT: str wzr, [sp, #740]
3414 ; NONEON-NOSVE-NEXT: strh w8, [sp, #154]
3415 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #100]
3416 ; NONEON-NOSVE-NEXT: str wzr, [sp, #636]
3417 ; NONEON-NOSVE-NEXT: strh w8, [sp, #152]
3418 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #194]
3419 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #144]
3420 ; NONEON-NOSVE-NEXT: str wzr, [sp, #628]
3421 ; NONEON-NOSVE-NEXT: str w8, [sp, #276]
3422 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #192]
3423 ; NONEON-NOSVE-NEXT: str wzr, [sp, #652]
3424 ; NONEON-NOSVE-NEXT: str w8, [sp, #272]
3425 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #198]
3426 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #208]
3427 ; NONEON-NOSVE-NEXT: str w8, [sp, #284]
3428 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #196]
3429 ; NONEON-NOSVE-NEXT: str wzr, [sp, #644]
3430 ; NONEON-NOSVE-NEXT: str w8, [sp, #280]
3431 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #202]
3432 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #272]
3433 ; NONEON-NOSVE-NEXT: str wzr, [sp, #668]
3434 ; NONEON-NOSVE-NEXT: str w8, [sp, #292]
3435 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #200]
3436 ; NONEON-NOSVE-NEXT: str wzr, [sp, #660]
3437 ; NONEON-NOSVE-NEXT: str w8, [sp, #288]
3438 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #206]
3439 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #400]
3440 ; NONEON-NOSVE-NEXT: str w8, [sp, #300]
3441 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #204]
3442 ; NONEON-NOSVE-NEXT: str wzr, [sp, #684]
3443 ; NONEON-NOSVE-NEXT: str w8, [sp, #296]
3444 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #176]
3445 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #288]
3446 ; NONEON-NOSVE-NEXT: str wzr, [sp, #676]
3447 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #240]
3448 ; NONEON-NOSVE-NEXT: ldrb w9, [sp, #182]
3449 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #180]
3450 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #248]
3451 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #186]
3452 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #416]
3453 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #240]
3454 ; NONEON-NOSVE-NEXT: str w8, [sp, #260]
3455 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #184]
3456 ; NONEON-NOSVE-NEXT: str w8, [sp, #256]
3457 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #190]
3458 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #368]
3459 ; NONEON-NOSVE-NEXT: str w8, [sp, #268]
3460 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #188]
3461 ; NONEON-NOSVE-NEXT: str w8, [sp, #264]
3462 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #226]
3463 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #256]
3464 ; NONEON-NOSVE-NEXT: str w8, [sp, #340]
3465 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #224]
3466 ; NONEON-NOSVE-NEXT: str w8, [sp, #336]
3467 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #230]
3468 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #384]
3469 ; NONEON-NOSVE-NEXT: str w8, [sp, #348]
3470 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #228]
3471 ; NONEON-NOSVE-NEXT: str w8, [sp, #344]
3472 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #234]
3473 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #336]
3474 ; NONEON-NOSVE-NEXT: str w8, [sp, #356]
3475 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #232]
3476 ; NONEON-NOSVE-NEXT: str w8, [sp, #352]
3477 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #238]
3478 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #464]
3479 ; NONEON-NOSVE-NEXT: str w8, [sp, #364]
3480 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #236]
3481 ; NONEON-NOSVE-NEXT: str w8, [sp, #360]
3482 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #210]
3483 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #352]
3484 ; NONEON-NOSVE-NEXT: str w8, [sp, #308]
3485 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #208]
3486 ; NONEON-NOSVE-NEXT: str w8, [sp, #304]
3487 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #214]
3488 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #480]
3489 ; NONEON-NOSVE-NEXT: str w8, [sp, #316]
3490 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #212]
3491 ; NONEON-NOSVE-NEXT: str w8, [sp, #312]
3492 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #218]
3493 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #304]
3494 ; NONEON-NOSVE-NEXT: str w8, [sp, #324]
3495 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #216]
3496 ; NONEON-NOSVE-NEXT: str w8, [sp, #320]
3497 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #222]
3498 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #432]
3499 ; NONEON-NOSVE-NEXT: str w8, [sp, #332]
3500 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #220]
3501 ; NONEON-NOSVE-NEXT: str w8, [sp, #328]
3502 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #404]
3503 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #320]
3504 ; NONEON-NOSVE-NEXT: str w8, [sp, #568]
3505 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #400]
3506 ; NONEON-NOSVE-NEXT: str w8, [sp, #560]
3507 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #412]
3508 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #448]
3509 ; NONEON-NOSVE-NEXT: str w8, [sp, #584]
3510 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #408]
3511 ; NONEON-NOSVE-NEXT: str w8, [sp, #576]
3512 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #420]
3513 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #560]
3514 ; NONEON-NOSVE-NEXT: str w8, [sp, #600]
3515 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #416]
3516 ; NONEON-NOSVE-NEXT: str w8, [sp, #592]
3517 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #428]
3518 ; NONEON-NOSVE-NEXT: str w8, [sp, #616]
3519 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #424]
3520 ; NONEON-NOSVE-NEXT: str w8, [sp, #608]
3521 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #372]
3522 ; NONEON-NOSVE-NEXT: ldp q2, q3, [sp, #592]
3523 ; NONEON-NOSVE-NEXT: str w8, [sp, #504]
3524 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #368]
3525 ; NONEON-NOSVE-NEXT: str w8, [sp, #496]
3526 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #380]
3527 ; NONEON-NOSVE-NEXT: str w8, [sp, #520]
3528 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #376]
3529 ; NONEON-NOSVE-NEXT: str w8, [sp, #512]
3530 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #388]
3531 ; NONEON-NOSVE-NEXT: ldp q4, q5, [sp, #496]
3532 ; NONEON-NOSVE-NEXT: str w8, [sp, #536]
3533 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #384]
3534 ; NONEON-NOSVE-NEXT: str w8, [sp, #528]
3535 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #396]
3536 ; NONEON-NOSVE-NEXT: str w8, [sp, #552]
3537 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #392]
3538 ; NONEON-NOSVE-NEXT: str w8, [sp, #544]
3539 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #468]
3540 ; NONEON-NOSVE-NEXT: ldp q6, q7, [sp, #528]
3541 ; NONEON-NOSVE-NEXT: str w8, [sp, #696]
3542 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #464]
3543 ; NONEON-NOSVE-NEXT: str w8, [sp, #688]
3544 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #476]
3545 ; NONEON-NOSVE-NEXT: str w8, [sp, #712]
3546 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #472]
3547 ; NONEON-NOSVE-NEXT: str w8, [sp, #704]
3548 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #484]
3549 ; NONEON-NOSVE-NEXT: ldp q16, q17, [sp, #688]
3550 ; NONEON-NOSVE-NEXT: str w8, [sp, #728]
3551 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #480]
3552 ; NONEON-NOSVE-NEXT: str w8, [sp, #720]
3553 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #492]
3554 ; NONEON-NOSVE-NEXT: str w8, [sp, #744]
3555 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #488]
3556 ; NONEON-NOSVE-NEXT: str w8, [sp, #736]
3557 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #436]
3558 ; NONEON-NOSVE-NEXT: ldp q19, q20, [sp, #720]
3559 ; NONEON-NOSVE-NEXT: str w8, [sp, #632]
3560 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #432]
3561 ; NONEON-NOSVE-NEXT: str w8, [sp, #624]
3562 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #444]
3563 ; NONEON-NOSVE-NEXT: str w8, [sp, #648]
3564 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #440]
3565 ; NONEON-NOSVE-NEXT: str w8, [sp, #640]
3566 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #452]
3567 ; NONEON-NOSVE-NEXT: ldp q22, q23, [sp, #624]
3568 ; NONEON-NOSVE-NEXT: str w8, [sp, #664]
3569 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #448]
3570 ; NONEON-NOSVE-NEXT: str w8, [sp, #656]
3571 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #460]
3572 ; NONEON-NOSVE-NEXT: str w8, [sp, #680]
3573 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #456]
3574 ; NONEON-NOSVE-NEXT: str w8, [sp, #672]
3575 ; NONEON-NOSVE-NEXT: ldp q21, q18, [sp, #656]
3576 ; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
3577 ; NONEON-NOSVE-NEXT: stp q2, q3, [x1, #32]
3578 ; NONEON-NOSVE-NEXT: stp q4, q5, [x1, #64]
3579 ; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #96]
3580 ; NONEON-NOSVE-NEXT: stp q16, q17, [x1, #128]
3581 ; NONEON-NOSVE-NEXT: stp q19, q20, [x1, #160]
3582 ; NONEON-NOSVE-NEXT: stp q22, q23, [x1, #192]
3583 ; NONEON-NOSVE-NEXT: stp q21, q18, [x1, #224]
3584 ; NONEON-NOSVE-NEXT: add sp, sp, #752
3585 ; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload
3586 ; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #64] // 16-byte Folded Reload
3587 ; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #48] // 16-byte Folded Reload
3588 ; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #32] // 16-byte Folded Reload
3589 ; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #16] // 16-byte Folded Reload
3590 ; NONEON-NOSVE-NEXT: ldp x29, x30, [sp], #96 // 16-byte Folded Reload
3591 ; NONEON-NOSVE-NEXT: ret
3592 %a = load <32 x i8>, ptr %in
3593 %b = add <32 x i8> %a, %a
3594 %c = zext <32 x i8> %b to <32 x i64>
3595 store <32 x i64> %c, ptr %out
3603 define void @zext_v8i16_v8i32(<8 x i16> %a, ptr %out) {
3604 ; CHECK-LABEL: zext_v8i16_v8i32:
3606 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
3607 ; CHECK-NEXT: uunpklo z1.s, z0.h
3608 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
3609 ; CHECK-NEXT: uunpklo z0.s, z0.h
3610 ; CHECK-NEXT: stp q1, q0, [x0]
3613 ; NONEON-NOSVE-LABEL: zext_v8i16_v8i32:
3614 ; NONEON-NOSVE: // %bb.0:
3615 ; NONEON-NOSVE-NEXT: str q0, [sp, #-64]!
3616 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64
3617 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
3618 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
3619 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #30]
3620 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]
3621 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
3622 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #26]
3623 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]
3624 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
3625 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #22]
3626 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]
3627 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]
3628 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #18]
3629 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]
3630 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]
3631 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
3632 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
3633 ; NONEON-NOSVE-NEXT: add sp, sp, #64
3634 ; NONEON-NOSVE-NEXT: ret
3635 %b = zext <8 x i16> %a to <8 x i32>
3636 store <8 x i32>%b, ptr %out
3640 define void @zext_v16i16_v16i32(ptr %in, ptr %out) {
3641 ; CHECK-LABEL: zext_v16i16_v16i32:
3643 ; CHECK-NEXT: ldp q1, q0, [x0]
3644 ; CHECK-NEXT: add z0.h, z0.h, z0.h
3645 ; CHECK-NEXT: add z1.h, z1.h, z1.h
3646 ; CHECK-NEXT: uunpklo z2.s, z0.h
3647 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
3648 ; CHECK-NEXT: uunpklo z3.s, z1.h
3649 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
3650 ; CHECK-NEXT: uunpklo z0.s, z0.h
3651 ; CHECK-NEXT: uunpklo z1.s, z1.h
3652 ; CHECK-NEXT: stp q2, q0, [x1, #32]
3653 ; CHECK-NEXT: stp q3, q1, [x1]
3656 ; NONEON-NOSVE-LABEL: zext_v16i16_v16i32:
3657 ; NONEON-NOSVE: // %bb.0:
3658 ; NONEON-NOSVE-NEXT: sub sp, sp, #160
3659 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
3660 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
3661 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp]
3662 ; NONEON-NOSVE-NEXT: ldrh w13, [sp, #4]
3663 ; NONEON-NOSVE-NEXT: ldrh w14, [sp, #6]
3664 ; NONEON-NOSVE-NEXT: ldrh w3, [sp, #2]
3665 ; NONEON-NOSVE-NEXT: ldrh w5, [sp]
3666 ; NONEON-NOSVE-NEXT: ldrh w2, [sp, #12]
3667 ; NONEON-NOSVE-NEXT: ldrh w4, [sp, #14]
3668 ; NONEON-NOSVE-NEXT: add w13, w13, w13
3669 ; NONEON-NOSVE-NEXT: add w14, w14, w14
3670 ; NONEON-NOSVE-NEXT: ldrh w18, [sp, #8]
3671 ; NONEON-NOSVE-NEXT: ldrh w0, [sp, #10]
3672 ; NONEON-NOSVE-NEXT: strh w14, [sp, #46]
3673 ; NONEON-NOSVE-NEXT: add w14, w3, w3
3674 ; NONEON-NOSVE-NEXT: strh w13, [sp, #44]
3675 ; NONEON-NOSVE-NEXT: add w13, w5, w5
3676 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]
3677 ; NONEON-NOSVE-NEXT: strh w14, [sp, #42]
3678 ; NONEON-NOSVE-NEXT: add w14, w4, w4
3679 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #26]
3680 ; NONEON-NOSVE-NEXT: strh w13, [sp, #40]
3681 ; NONEON-NOSVE-NEXT: add w13, w2, w2
3682 ; NONEON-NOSVE-NEXT: ldrh w17, [sp, #22]
3683 ; NONEON-NOSVE-NEXT: strh w14, [sp, #38]
3684 ; NONEON-NOSVE-NEXT: add w14, w0, w0
3685 ; NONEON-NOSVE-NEXT: add w9, w9, w9
3686 ; NONEON-NOSVE-NEXT: strh w13, [sp, #36]
3687 ; NONEON-NOSVE-NEXT: add w13, w18, w18
3688 ; NONEON-NOSVE-NEXT: add w8, w8, w8
3689 ; NONEON-NOSVE-NEXT: strh w14, [sp, #34]
3690 ; NONEON-NOSVE-NEXT: ldrh w10, [sp, #28]
3691 ; NONEON-NOSVE-NEXT: ldrh w11, [sp, #30]
3692 ; NONEON-NOSVE-NEXT: strh w13, [sp, #32]
3693 ; NONEON-NOSVE-NEXT: ldrh w12, [sp, #16]
3694 ; NONEON-NOSVE-NEXT: ldrh w15, [sp, #18]
3695 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #32]
3696 ; NONEON-NOSVE-NEXT: ldrh w16, [sp, #20]
3697 ; NONEON-NOSVE-NEXT: strh w9, [sp, #50]
3698 ; NONEON-NOSVE-NEXT: add w14, w17, w17
3699 ; NONEON-NOSVE-NEXT: add w12, w12, w12
3700 ; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
3701 ; NONEON-NOSVE-NEXT: add w13, w16, w16
3702 ; NONEON-NOSVE-NEXT: add w11, w11, w11
3703 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #64]
3704 ; NONEON-NOSVE-NEXT: add w10, w10, w10
3705 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #78]
3706 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #76]
3707 ; NONEON-NOSVE-NEXT: strh w14, [sp, #62]
3708 ; NONEON-NOSVE-NEXT: add w14, w15, w15
3709 ; NONEON-NOSVE-NEXT: strh w13, [sp, #60]
3710 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
3711 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #74]
3712 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #72]
3713 ; NONEON-NOSVE-NEXT: strh w14, [sp, #58]
3714 ; NONEON-NOSVE-NEXT: strh w12, [sp, #56]
3715 ; NONEON-NOSVE-NEXT: strh w11, [sp, #54]
3716 ; NONEON-NOSVE-NEXT: strh w10, [sp, #52]
3717 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
3718 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
3719 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #70]
3720 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #68]
3721 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #104]
3722 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #66]
3723 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #64]
3724 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
3725 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #96]
3726 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #94]
3727 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #92]
3728 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #96]
3729 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
3730 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #90]
3731 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #88]
3732 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
3733 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #86]
3734 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #84]
3735 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
3736 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #82]
3737 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #80]
3738 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
3739 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #128]
3740 ; NONEON-NOSVE-NEXT: stp q2, q3, [x1]
3741 ; NONEON-NOSVE-NEXT: stp q1, q0, [x1, #32]
3742 ; NONEON-NOSVE-NEXT: add sp, sp, #160
3743 ; NONEON-NOSVE-NEXT: ret
3744 %a = load <16 x i16>, ptr %in
3745 %b = add <16 x i16> %a, %a
3746 %c = zext <16 x i16> %b to <16 x i32>
3747 store <16 x i32> %c, ptr %out
3755 define void @zext_v4i16_v4i64(<4 x i16> %a, ptr %out) {
3756 ; CHECK-LABEL: zext_v4i16_v4i64:
3758 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
3759 ; CHECK-NEXT: uunpklo z0.s, z0.h
3760 ; CHECK-NEXT: uunpklo z1.d, z0.s
3761 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
3762 ; CHECK-NEXT: uunpklo z0.d, z0.s
3763 ; CHECK-NEXT: stp q1, q0, [x0]
3766 ; NONEON-NOSVE-LABEL: zext_v4i16_v4i64:
3767 ; NONEON-NOSVE: // %bb.0:
3768 ; NONEON-NOSVE-NEXT: sub sp, sp, #80
3769 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 80
3770 ; NONEON-NOSVE-NEXT: str d0, [sp, #8]
3771 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]
3772 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]
3773 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #24]
3774 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]
3775 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]
3776 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #16]
3777 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #16]
3778 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #32]
3779 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #40]
3780 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #72]
3781 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #64]
3782 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #32]
3783 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #56]
3784 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #48]
3785 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #48]
3786 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
3787 ; NONEON-NOSVE-NEXT: add sp, sp, #80
3788 ; NONEON-NOSVE-NEXT: ret
3789 %b = zext <4 x i16> %a to <4 x i64>
3790 store <4 x i64>%b, ptr %out
3794 define void @zext_v8i16_v8i64(<8 x i16> %a, ptr %out) {
3795 ; CHECK-LABEL: zext_v8i16_v8i64:
3797 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
3798 ; CHECK-NEXT: uunpklo z1.s, z0.h
3799 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
3800 ; CHECK-NEXT: uunpklo z0.s, z0.h
3801 ; CHECK-NEXT: uunpklo z2.d, z1.s
3802 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
3803 ; CHECK-NEXT: uunpklo z1.d, z1.s
3804 ; CHECK-NEXT: uunpklo z3.d, z0.s
3805 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
3806 ; CHECK-NEXT: uunpklo z0.d, z0.s
3807 ; CHECK-NEXT: stp q2, q1, [x0]
3808 ; CHECK-NEXT: stp q3, q0, [x0, #32]
3811 ; NONEON-NOSVE-LABEL: zext_v8i16_v8i64:
3812 ; NONEON-NOSVE: // %bb.0:
3813 ; NONEON-NOSVE-NEXT: str q0, [sp, #-160]!
3814 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
3815 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
3816 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
3817 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #26]
3818 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]
3819 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
3820 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #30]
3821 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]
3822 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
3823 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #18]
3824 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]
3825 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
3826 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]
3827 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #22]
3828 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]
3829 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
3830 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]
3831 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #88]
3832 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #32]
3833 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #152]
3834 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #144]
3835 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #80]
3836 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #64]
3837 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #136]
3838 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #128]
3839 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #72]
3840 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #128]
3841 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #120]
3842 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #112]
3843 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #64]
3844 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #104]
3845 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #96]
3846 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #96]
3847 ; NONEON-NOSVE-NEXT: stp q2, q3, [x0]
3848 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0, #32]
3849 ; NONEON-NOSVE-NEXT: add sp, sp, #160
3850 ; NONEON-NOSVE-NEXT: ret
3851 %b = zext <8 x i16> %a to <8 x i64>
3852 store <8 x i64>%b, ptr %out
3856 define void @zext_v16i16_v16i64(ptr %in, ptr %out) {
3857 ; CHECK-LABEL: zext_v16i16_v16i64:
3859 ; CHECK-NEXT: ldp q1, q0, [x0]
3860 ; CHECK-NEXT: add z0.h, z0.h, z0.h
3861 ; CHECK-NEXT: add z1.h, z1.h, z1.h
3862 ; CHECK-NEXT: uunpklo z2.s, z0.h
3863 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
3864 ; CHECK-NEXT: uunpklo z3.s, z1.h
3865 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
3866 ; CHECK-NEXT: uunpklo z0.s, z0.h
3867 ; CHECK-NEXT: uunpklo z1.s, z1.h
3868 ; CHECK-NEXT: uunpklo z4.d, z2.s
3869 ; CHECK-NEXT: ext z2.b, z2.b, z2.b, #8
3870 ; CHECK-NEXT: uunpklo z5.d, z3.s
3871 ; CHECK-NEXT: ext z3.b, z3.b, z3.b, #8
3872 ; CHECK-NEXT: uunpklo z6.d, z0.s
3873 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
3874 ; CHECK-NEXT: uunpklo z2.d, z2.s
3875 ; CHECK-NEXT: uunpklo z7.d, z1.s
3876 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
3877 ; CHECK-NEXT: uunpklo z3.d, z3.s
3878 ; CHECK-NEXT: uunpklo z0.d, z0.s
3879 ; CHECK-NEXT: uunpklo z1.d, z1.s
3880 ; CHECK-NEXT: stp q4, q2, [x1, #64]
3881 ; CHECK-NEXT: stp q5, q3, [x1]
3882 ; CHECK-NEXT: stp q6, q0, [x1, #96]
3883 ; CHECK-NEXT: stp q7, q1, [x1, #32]
3886 ; NONEON-NOSVE-LABEL: zext_v16i16_v16i64:
3887 ; NONEON-NOSVE: // %bb.0:
3888 ; NONEON-NOSVE-NEXT: sub sp, sp, #368
3889 ; NONEON-NOSVE-NEXT: str x29, [sp, #352] // 8-byte Folded Spill
3890 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 368
3891 ; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
3892 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
3893 ; NONEON-NOSVE-NEXT: str wzr, [sp, #268]
3894 ; NONEON-NOSVE-NEXT: str wzr, [sp, #260]
3895 ; NONEON-NOSVE-NEXT: ldr x29, [sp, #352] // 8-byte Folded Reload
3896 ; NONEON-NOSVE-NEXT: str wzr, [sp, #284]
3897 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp]
3898 ; NONEON-NOSVE-NEXT: ldrh w13, [sp, #4]
3899 ; NONEON-NOSVE-NEXT: ldrh w14, [sp, #6]
3900 ; NONEON-NOSVE-NEXT: ldrh w3, [sp, #2]
3901 ; NONEON-NOSVE-NEXT: ldrh w5, [sp]
3902 ; NONEON-NOSVE-NEXT: ldrh w2, [sp, #12]
3903 ; NONEON-NOSVE-NEXT: ldrh w4, [sp, #14]
3904 ; NONEON-NOSVE-NEXT: add w13, w13, w13
3905 ; NONEON-NOSVE-NEXT: add w14, w14, w14
3906 ; NONEON-NOSVE-NEXT: ldrh w18, [sp, #8]
3907 ; NONEON-NOSVE-NEXT: ldrh w0, [sp, #10]
3908 ; NONEON-NOSVE-NEXT: strh w14, [sp, #54]
3909 ; NONEON-NOSVE-NEXT: add w14, w3, w3
3910 ; NONEON-NOSVE-NEXT: strh w13, [sp, #52]
3911 ; NONEON-NOSVE-NEXT: add w13, w5, w5
3912 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]
3913 ; NONEON-NOSVE-NEXT: strh w14, [sp, #50]
3914 ; NONEON-NOSVE-NEXT: add w14, w4, w4
3915 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #26]
3916 ; NONEON-NOSVE-NEXT: strh w13, [sp, #48]
3917 ; NONEON-NOSVE-NEXT: add w13, w2, w2
3918 ; NONEON-NOSVE-NEXT: ldrh w17, [sp, #22]
3919 ; NONEON-NOSVE-NEXT: strh w14, [sp, #46]
3920 ; NONEON-NOSVE-NEXT: add w14, w0, w0
3921 ; NONEON-NOSVE-NEXT: add w9, w9, w9
3922 ; NONEON-NOSVE-NEXT: strh w13, [sp, #44]
3923 ; NONEON-NOSVE-NEXT: add w13, w18, w18
3924 ; NONEON-NOSVE-NEXT: add w8, w8, w8
3925 ; NONEON-NOSVE-NEXT: strh w14, [sp, #42]
3926 ; NONEON-NOSVE-NEXT: ldrh w10, [sp, #28]
3927 ; NONEON-NOSVE-NEXT: ldrh w11, [sp, #30]
3928 ; NONEON-NOSVE-NEXT: strh w13, [sp, #40]
3929 ; NONEON-NOSVE-NEXT: ldrh w12, [sp, #16]
3930 ; NONEON-NOSVE-NEXT: ldrh w15, [sp, #18]
3931 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #40]
3932 ; NONEON-NOSVE-NEXT: add w14, w17, w17
3933 ; NONEON-NOSVE-NEXT: ldrh w16, [sp, #20]
3934 ; NONEON-NOSVE-NEXT: strh w9, [sp, #58]
3935 ; NONEON-NOSVE-NEXT: add w12, w12, w12
3936 ; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
3937 ; NONEON-NOSVE-NEXT: add w11, w11, w11
3938 ; NONEON-NOSVE-NEXT: add w10, w10, w10
3939 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #72]
3940 ; NONEON-NOSVE-NEXT: add w13, w16, w16
3941 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #82]
3942 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #80]
3943 ; NONEON-NOSVE-NEXT: strh w14, [sp, #70]
3944 ; NONEON-NOSVE-NEXT: add w14, w15, w15
3945 ; NONEON-NOSVE-NEXT: strh w13, [sp, #68]
3946 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
3947 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #86]
3948 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #84]
3949 ; NONEON-NOSVE-NEXT: strh w14, [sp, #66]
3950 ; NONEON-NOSVE-NEXT: strh w12, [sp, #64]
3951 ; NONEON-NOSVE-NEXT: strh w11, [sp, #62]
3952 ; NONEON-NOSVE-NEXT: strh w10, [sp, #60]
3953 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #56]
3954 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
3955 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #74]
3956 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #72]
3957 ; NONEON-NOSVE-NEXT: str wzr, [sp, #276]
3958 ; NONEON-NOSVE-NEXT: str wzr, [sp, #332]
3959 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #104]
3960 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #78]
3961 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #76]
3962 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #88]
3963 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #120]
3964 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
3965 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #98]
3966 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #96]
3967 ; NONEON-NOSVE-NEXT: str wzr, [sp, #324]
3968 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
3969 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #102]
3970 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #100]
3971 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #184]
3972 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #104]
3973 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #160]
3974 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #90]
3975 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #88]
3976 ; NONEON-NOSVE-NEXT: str wzr, [sp, #348]
3977 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
3978 ; NONEON-NOSVE-NEXT: ldrh w9, [sp, #94]
3979 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #92]
3980 ; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #168]
3981 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #152]
3982 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
3983 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #184]
3984 ; NONEON-NOSVE-NEXT: str d0, [sp, #360]
3985 ; NONEON-NOSVE-NEXT: ldp d2, d0, [sp, #136]
3986 ; NONEON-NOSVE-NEXT: str wzr, [sp, #340]
3987 ; NONEON-NOSVE-NEXT: str w9, [sp, #264]
3988 ; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #252]
3989 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #192]
3990 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #208]
3991 ; NONEON-NOSVE-NEXT: str d2, [sp, #200]
3992 ; NONEON-NOSVE-NEXT: str w9, [sp, #280]
3993 ; NONEON-NOSVE-NEXT: str w8, [sp, #272]
3994 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #168]
3995 ; NONEON-NOSVE-NEXT: str wzr, [sp, #300]
3996 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #256]
3997 ; NONEON-NOSVE-NEXT: str wzr, [sp, #292]
3998 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #232]
3999 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #224]
4000 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #176]
4001 ; NONEON-NOSVE-NEXT: str wzr, [sp, #316]
4002 ; NONEON-NOSVE-NEXT: str wzr, [sp, #308]
4003 ; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #244]
4004 ; NONEON-NOSVE-NEXT: str w8, [sp, #240]
4005 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #216]
4006 ; NONEON-NOSVE-NEXT: ldp q3, q4, [sp, #224]
4007 ; NONEON-NOSVE-NEXT: str w8, [sp, #320]
4008 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #364]
4009 ; NONEON-NOSVE-NEXT: str w9, [sp, #328]
4010 ; NONEON-NOSVE-NEXT: str w8, [sp, #344]
4011 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #360]
4012 ; NONEON-NOSVE-NEXT: str w8, [sp, #336]
4013 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #200]
4014 ; NONEON-NOSVE-NEXT: ldp q6, q7, [sp, #320]
4015 ; NONEON-NOSVE-NEXT: str w9, [sp, #296]
4016 ; NONEON-NOSVE-NEXT: str w8, [sp, #288]
4017 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #208]
4018 ; NONEON-NOSVE-NEXT: str w9, [sp, #312]
4019 ; NONEON-NOSVE-NEXT: str w8, [sp, #304]
4020 ; NONEON-NOSVE-NEXT: ldp q5, q2, [sp, #288]
4021 ; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
4022 ; NONEON-NOSVE-NEXT: stp q3, q4, [x1, #32]
4023 ; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #64]
4024 ; NONEON-NOSVE-NEXT: stp q5, q2, [x1, #96]
4025 ; NONEON-NOSVE-NEXT: add sp, sp, #368
4026 ; NONEON-NOSVE-NEXT: ret
4027 %a = load <16 x i16>, ptr %in
4028 %b = add <16 x i16> %a, %a
4029 %c = zext <16 x i16> %b to <16 x i64>
4030 store <16 x i64> %c, ptr %out
4038 define void @zext_v4i32_v4i64(<4 x i32> %a, ptr %out) {
4039 ; CHECK-LABEL: zext_v4i32_v4i64:
4041 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
4042 ; CHECK-NEXT: uunpklo z1.d, z0.s
4043 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
4044 ; CHECK-NEXT: uunpklo z0.d, z0.s
4045 ; CHECK-NEXT: stp q1, q0, [x0]
4048 ; NONEON-NOSVE-LABEL: zext_v4i32_v4i64:
4049 ; NONEON-NOSVE: // %bb.0:
4050 ; NONEON-NOSVE-NEXT: str q0, [sp, #-64]!
4051 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64
4052 ; NONEON-NOSVE-NEXT: ldp d1, d0, [sp]
4053 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #16]
4054 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #24]
4055 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #56]
4056 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #48]
4057 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #16]
4058 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #40]
4059 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #32]
4060 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
4061 ; NONEON-NOSVE-NEXT: stp q1, q0, [x0]
4062 ; NONEON-NOSVE-NEXT: add sp, sp, #64
4063 ; NONEON-NOSVE-NEXT: ret
4064 %b = zext <4 x i32> %a to <4 x i64>
4065 store <4 x i64>%b, ptr %out
4069 define void @zext_v8i32_v8i64(ptr %in, ptr %out) {
4070 ; CHECK-LABEL: zext_v8i32_v8i64:
4072 ; CHECK-NEXT: ldp q1, q0, [x0]
4073 ; CHECK-NEXT: add z0.s, z0.s, z0.s
4074 ; CHECK-NEXT: add z1.s, z1.s, z1.s
4075 ; CHECK-NEXT: uunpklo z2.d, z0.s
4076 ; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8
4077 ; CHECK-NEXT: uunpklo z3.d, z1.s
4078 ; CHECK-NEXT: ext z1.b, z1.b, z1.b, #8
4079 ; CHECK-NEXT: uunpklo z0.d, z0.s
4080 ; CHECK-NEXT: uunpklo z1.d, z1.s
4081 ; CHECK-NEXT: stp q2, q0, [x1, #32]
4082 ; CHECK-NEXT: stp q3, q1, [x1]
4085 ; NONEON-NOSVE-LABEL: zext_v8i32_v8i64:
4086 ; NONEON-NOSVE: // %bb.0:
4087 ; NONEON-NOSVE-NEXT: sub sp, sp, #160
4088 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
4089 ; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
4090 ; NONEON-NOSVE-NEXT: stp q1, q0, [sp]
4091 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp]
4092 ; NONEON-NOSVE-NEXT: ldp w12, w13, [sp, #8]
4093 ; NONEON-NOSVE-NEXT: ldp w14, w15, [sp, #16]
4094 ; NONEON-NOSVE-NEXT: add w9, w9, w9
4095 ; NONEON-NOSVE-NEXT: add w8, w8, w8
4096 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]
4097 ; NONEON-NOSVE-NEXT: add w9, w13, w13
4098 ; NONEON-NOSVE-NEXT: add w8, w12, w12
4099 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]
4100 ; NONEON-NOSVE-NEXT: add w9, w15, w15
4101 ; NONEON-NOSVE-NEXT: add w8, w14, w14
4102 ; NONEON-NOSVE-NEXT: ldp w10, w11, [sp, #24]
4103 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #32]
4104 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
4105 ; NONEON-NOSVE-NEXT: add w9, w11, w11
4106 ; NONEON-NOSVE-NEXT: add w8, w10, w10
4107 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #64]
4108 ; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
4109 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #72]
4110 ; NONEON-NOSVE-NEXT: ldp d0, d1, [sp, #48]
4111 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #120]
4112 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #112]
4113 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #64]
4114 ; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
4115 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #104]
4116 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #96]
4117 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #88]
4118 ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #96]
4119 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #152]
4120 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #144]
4121 ; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #80]
4122 ; NONEON-NOSVE-NEXT: stp w9, wzr, [sp, #136]
4123 ; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #128]
4124 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #128]
4125 ; NONEON-NOSVE-NEXT: stp q2, q3, [x1]
4126 ; NONEON-NOSVE-NEXT: stp q1, q0, [x1, #32]
4127 ; NONEON-NOSVE-NEXT: add sp, sp, #160
4128 ; NONEON-NOSVE-NEXT: ret
4129 %a = load <8 x i32>, ptr %in
4130 %b = add <8 x i32> %a, %a
4131 %c = zext <8 x i32> %b to <8 x i64>
4132 store <8 x i64> %c, ptr %out
4136 define void @extend_and_mul(i32 %0, <2 x i64> %1, ptr %2) {
4137 ; SVE-LABEL: extend_and_mul:
4139 ; SVE-NEXT: mov z1.s, w0
4140 ; SVE-NEXT: ptrue p0.d, vl2
4141 ; SVE-NEXT: // kill: def $q0 killed $q0 def $z0
4142 ; SVE-NEXT: uunpklo z1.d, z1.s
4143 ; SVE-NEXT: mul z0.d, p0/m, z0.d, z1.d
4144 ; SVE-NEXT: str q0, [x1]
4147 ; SVE2-LABEL: extend_and_mul:
4149 ; SVE2-NEXT: mov z1.s, w0
4150 ; SVE2-NEXT: // kill: def $q0 killed $q0 def $z0
4151 ; SVE2-NEXT: uunpklo z1.d, z1.s
4152 ; SVE2-NEXT: mul z0.d, z1.d, z0.d
4153 ; SVE2-NEXT: str q0, [x1]
4156 ; NONEON-NOSVE-LABEL: extend_and_mul:
4157 ; NONEON-NOSVE: // %bb.0:
4158 ; NONEON-NOSVE-NEXT: str q0, [sp, #-32]!
4159 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32
4160 ; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]
4161 ; NONEON-NOSVE-NEXT: mov w9, w0
4162 ; NONEON-NOSVE-NEXT: mul x10, x9, x8
4163 ; NONEON-NOSVE-NEXT: ldr x8, [sp]
4164 ; NONEON-NOSVE-NEXT: mul x8, x9, x8
4165 ; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #16]
4166 ; NONEON-NOSVE-NEXT: ldr q0, [sp, #16]
4167 ; NONEON-NOSVE-NEXT: str q0, [x1]
4168 ; NONEON-NOSVE-NEXT: add sp, sp, #32
4169 ; NONEON-NOSVE-NEXT: ret
4170 %broadcast.splatinsert2 = insertelement <2 x i32> poison, i32 %0, i64 0
4171 %broadcast.splat3 = shufflevector <2 x i32> %broadcast.splatinsert2, <2 x i32> poison, <2 x i32> zeroinitializer
4172 %4 = zext <2 x i32> %broadcast.splat3 to <2 x i64>
4173 %5 = mul <2 x i64> %4, %1
4174 store <2 x i64> %5, ptr %2, align 2
4178 define void @extend_no_mul(i32 %0, <2 x i64> %1, ptr %2) {
4179 ; CHECK-LABEL: extend_no_mul:
4180 ; CHECK: // %bb.0: // %entry
4181 ; CHECK-NEXT: mov w8, w0
4182 ; CHECK-NEXT: mov z0.d, x8
4183 ; CHECK-NEXT: str q0, [x1]
4186 ; NONEON-NOSVE-LABEL: extend_no_mul:
4187 ; NONEON-NOSVE: // %bb.0: // %entry
4188 ; NONEON-NOSVE-NEXT: mov w8, w0
4189 ; NONEON-NOSVE-NEXT: stp x8, x8, [sp, #-16]!
4190 ; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
4191 ; NONEON-NOSVE-NEXT: ldr q0, [sp]
4192 ; NONEON-NOSVE-NEXT: str q0, [x1]
4193 ; NONEON-NOSVE-NEXT: add sp, sp, #16
4194 ; NONEON-NOSVE-NEXT: ret
4196 %broadcast.splatinsert2 = insertelement <2 x i32> poison, i32 %0, i64 0
4197 %broadcast.splat3 = shufflevector <2 x i32> %broadcast.splatinsert2, <2 x i32> poison, <2 x i32> zeroinitializer
4198 %3 = zext <2 x i32> %broadcast.splat3 to <2 x i64>
4199 store <2 x i64> %3, ptr %2, align 2