1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s
3 ; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s
4 ; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
6 target triple = "aarch64-unknown-linux-gnu"
9 define <4 x i8> @vls_sve_and_4xi8(<4 x i8> %b) nounwind {
10 ; CHECK-LABEL: vls_sve_and_4xi8:
12 ; CHECK-NEXT: adrp x8, .LCPI0_0
13 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
14 ; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI0_0]
15 ; CHECK-NEXT: and z0.d, z0.d, z1.d
16 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
19 ; NONEON-NOSVE-LABEL: vls_sve_and_4xi8:
20 ; NONEON-NOSVE: // %bb.0:
21 ; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
22 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6]
23 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #12]
24 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #8]
25 ; NONEON-NOSVE-NEXT: strh w8, [sp, #14]
26 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]
27 ; NONEON-NOSVE-NEXT: strh w8, [sp, #10]
28 ; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]
29 ; NONEON-NOSVE-NEXT: add sp, sp, #16
30 ; NONEON-NOSVE-NEXT: ret
31 %c = and <4 x i8> %b, <i8 0, i8 255, i8 0, i8 255>
35 define <8 x i8> @vls_sve_and_8xi8(<8 x i8> %b) nounwind {
36 ; CHECK-LABEL: vls_sve_and_8xi8:
38 ; CHECK-NEXT: adrp x8, .LCPI1_0
39 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
40 ; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI1_0]
41 ; CHECK-NEXT: and z0.d, z0.d, z1.d
42 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
45 ; NONEON-NOSVE-LABEL: vls_sve_and_8xi8:
46 ; NONEON-NOSVE: // %bb.0:
47 ; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
48 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]
49 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #14]
50 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #12]
51 ; NONEON-NOSVE-NEXT: strb w8, [sp, #15]
52 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]
53 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #10]
54 ; NONEON-NOSVE-NEXT: strb w8, [sp, #13]
55 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]
56 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #8]
57 ; NONEON-NOSVE-NEXT: strb w8, [sp, #11]
58 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]
59 ; NONEON-NOSVE-NEXT: strb w8, [sp, #9]
60 ; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]
61 ; NONEON-NOSVE-NEXT: add sp, sp, #16
62 ; NONEON-NOSVE-NEXT: ret
63 %c = and <8 x i8> %b, <i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
67 define <16 x i8> @vls_sve_and_16xi8(<16 x i8> %b) nounwind {
68 ; CHECK-LABEL: vls_sve_and_16xi8:
70 ; CHECK-NEXT: adrp x8, .LCPI2_0
71 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
72 ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI2_0]
73 ; CHECK-NEXT: and z0.d, z0.d, z1.d
74 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
77 ; NONEON-NOSVE-LABEL: vls_sve_and_16xi8:
78 ; NONEON-NOSVE: // %bb.0:
79 ; NONEON-NOSVE-NEXT: str q0, [sp, #-32]!
80 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]
81 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #30]
82 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #28]
83 ; NONEON-NOSVE-NEXT: strb w8, [sp, #31]
84 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]
85 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #26]
86 ; NONEON-NOSVE-NEXT: strb w8, [sp, #29]
87 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]
88 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #24]
89 ; NONEON-NOSVE-NEXT: strb w8, [sp, #27]
90 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]
91 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #22]
92 ; NONEON-NOSVE-NEXT: strb w8, [sp, #25]
93 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]
94 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #20]
95 ; NONEON-NOSVE-NEXT: strb w8, [sp, #23]
96 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]
97 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #18]
98 ; NONEON-NOSVE-NEXT: strb w8, [sp, #21]
99 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]
100 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #16]
101 ; NONEON-NOSVE-NEXT: strb w8, [sp, #19]
102 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]
103 ; NONEON-NOSVE-NEXT: strb w8, [sp, #17]
104 ; NONEON-NOSVE-NEXT: ldr q0, [sp, #16]
105 ; NONEON-NOSVE-NEXT: add sp, sp, #32
106 ; NONEON-NOSVE-NEXT: ret
107 %c = and <16 x i8> %b, <i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
111 define <32 x i8> @vls_sve_and_32xi8(<32 x i8> %ap) nounwind {
112 ; CHECK-LABEL: vls_sve_and_32xi8:
114 ; CHECK-NEXT: adrp x8, .LCPI3_0
115 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
116 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
117 ; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI3_0]
118 ; CHECK-NEXT: and z0.d, z0.d, z2.d
119 ; CHECK-NEXT: and z1.d, z1.d, z2.d
120 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
121 ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
124 ; NONEON-NOSVE-LABEL: vls_sve_and_32xi8:
125 ; NONEON-NOSVE: // %bb.0:
126 ; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-64]!
127 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]
128 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #46]
129 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #44]
130 ; NONEON-NOSVE-NEXT: strb w8, [sp, #47]
131 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]
132 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #42]
133 ; NONEON-NOSVE-NEXT: strb w8, [sp, #45]
134 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]
135 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #40]
136 ; NONEON-NOSVE-NEXT: strb w8, [sp, #43]
137 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]
138 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #38]
139 ; NONEON-NOSVE-NEXT: strb w8, [sp, #41]
140 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]
141 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #36]
142 ; NONEON-NOSVE-NEXT: strb w8, [sp, #39]
143 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]
144 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #34]
145 ; NONEON-NOSVE-NEXT: strb w8, [sp, #37]
146 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]
147 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #32]
148 ; NONEON-NOSVE-NEXT: strb w8, [sp, #35]
149 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]
150 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #62]
151 ; NONEON-NOSVE-NEXT: strb w8, [sp, #33]
152 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]
153 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #60]
154 ; NONEON-NOSVE-NEXT: strb w8, [sp, #63]
155 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]
156 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #58]
157 ; NONEON-NOSVE-NEXT: strb w8, [sp, #61]
158 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]
159 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #56]
160 ; NONEON-NOSVE-NEXT: strb w8, [sp, #59]
161 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]
162 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #54]
163 ; NONEON-NOSVE-NEXT: strb w8, [sp, #57]
164 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]
165 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #52]
166 ; NONEON-NOSVE-NEXT: strb w8, [sp, #55]
167 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]
168 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #50]
169 ; NONEON-NOSVE-NEXT: strb w8, [sp, #53]
170 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]
171 ; NONEON-NOSVE-NEXT: strb wzr, [sp, #48]
172 ; NONEON-NOSVE-NEXT: strb w8, [sp, #51]
173 ; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]
174 ; NONEON-NOSVE-NEXT: strb w8, [sp, #49]
175 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
176 ; NONEON-NOSVE-NEXT: add sp, sp, #64
177 ; NONEON-NOSVE-NEXT: ret
178 %b = and <32 x i8> %ap, <i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255,
179 i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
184 define <2 x i16> @vls_sve_and_2xi16(<2 x i16> %b) nounwind {
185 ; CHECK-LABEL: vls_sve_and_2xi16:
187 ; CHECK-NEXT: sub sp, sp, #16
188 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
189 ; CHECK-NEXT: mov z0.s, z0.s[1]
190 ; CHECK-NEXT: fmov w8, s0
191 ; CHECK-NEXT: stp wzr, w8, [sp, #8]
192 ; CHECK-NEXT: ldr d0, [sp, #8]
193 ; CHECK-NEXT: add sp, sp, #16
196 ; NONEON-NOSVE-LABEL: vls_sve_and_2xi16:
197 ; NONEON-NOSVE: // %bb.0:
198 ; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
199 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]
200 ; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #8]
201 ; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]
202 ; NONEON-NOSVE-NEXT: add sp, sp, #16
203 ; NONEON-NOSVE-NEXT: ret
204 %c = and <2 x i16> %b, <i16 0, i16 65535>
208 define <4 x i16> @vls_sve_and_4xi16(<4 x i16> %b) nounwind {
209 ; CHECK-LABEL: vls_sve_and_4xi16:
211 ; CHECK-NEXT: adrp x8, .LCPI5_0
212 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
213 ; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI5_0]
214 ; CHECK-NEXT: and z0.d, z0.d, z1.d
215 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
218 ; NONEON-NOSVE-LABEL: vls_sve_and_4xi16:
219 ; NONEON-NOSVE: // %bb.0:
220 ; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
221 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]
222 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #12]
223 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #8]
224 ; NONEON-NOSVE-NEXT: strh w8, [sp, #14]
225 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]
226 ; NONEON-NOSVE-NEXT: strh w8, [sp, #10]
227 ; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]
228 ; NONEON-NOSVE-NEXT: add sp, sp, #16
229 ; NONEON-NOSVE-NEXT: ret
230 %c = and <4 x i16> %b, <i16 0, i16 65535, i16 0, i16 65535>
234 define <8 x i16> @vls_sve_and_8xi16(<8 x i16> %b) nounwind {
235 ; CHECK-LABEL: vls_sve_and_8xi16:
237 ; CHECK-NEXT: adrp x8, .LCPI6_0
238 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
239 ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI6_0]
240 ; CHECK-NEXT: and z0.d, z0.d, z1.d
241 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
244 ; NONEON-NOSVE-LABEL: vls_sve_and_8xi16:
245 ; NONEON-NOSVE: // %bb.0:
246 ; NONEON-NOSVE-NEXT: str q0, [sp, #-32]!
247 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #14]
248 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #28]
249 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #24]
250 ; NONEON-NOSVE-NEXT: strh w8, [sp, #30]
251 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #10]
252 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #20]
253 ; NONEON-NOSVE-NEXT: strh w8, [sp, #26]
254 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]
255 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #16]
256 ; NONEON-NOSVE-NEXT: strh w8, [sp, #22]
257 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]
258 ; NONEON-NOSVE-NEXT: strh w8, [sp, #18]
259 ; NONEON-NOSVE-NEXT: ldr q0, [sp, #16]
260 ; NONEON-NOSVE-NEXT: add sp, sp, #32
261 ; NONEON-NOSVE-NEXT: ret
262 %c = and <8 x i16> %b, <i16 0, i16 65535, i16 0, i16 65535, i16 0, i16 65535, i16 0, i16 65535>
266 define <16 x i16> @vls_sve_and_16xi16(<16 x i16> %b) nounwind {
267 ; CHECK-LABEL: vls_sve_and_16xi16:
269 ; CHECK-NEXT: adrp x8, .LCPI7_0
270 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
271 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
272 ; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI7_0]
273 ; CHECK-NEXT: and z0.d, z0.d, z2.d
274 ; CHECK-NEXT: and z1.d, z1.d, z2.d
275 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
276 ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
279 ; NONEON-NOSVE-LABEL: vls_sve_and_16xi16:
280 ; NONEON-NOSVE: // %bb.0:
281 ; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-64]!
282 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #14]
283 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #44]
284 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #40]
285 ; NONEON-NOSVE-NEXT: strh w8, [sp, #46]
286 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #10]
287 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #36]
288 ; NONEON-NOSVE-NEXT: strh w8, [sp, #42]
289 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]
290 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #32]
291 ; NONEON-NOSVE-NEXT: strh w8, [sp, #38]
292 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]
293 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #60]
294 ; NONEON-NOSVE-NEXT: strh w8, [sp, #34]
295 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]
296 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #56]
297 ; NONEON-NOSVE-NEXT: strh w8, [sp, #62]
298 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]
299 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #52]
300 ; NONEON-NOSVE-NEXT: strh w8, [sp, #58]
301 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]
302 ; NONEON-NOSVE-NEXT: strh wzr, [sp, #48]
303 ; NONEON-NOSVE-NEXT: strh w8, [sp, #54]
304 ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]
305 ; NONEON-NOSVE-NEXT: strh w8, [sp, #50]
306 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
307 ; NONEON-NOSVE-NEXT: add sp, sp, #64
308 ; NONEON-NOSVE-NEXT: ret
309 %c = and <16 x i16> %b, <i16 0, i16 65535, i16 0, i16 65535, i16 0, i16 65535, i16 0, i16 65535, i16 0, i16 65535, i16 0, i16 65535, i16 0, i16 65535, i16 0, i16 65535>
314 define <2 x i32> @vls_sve_and_2xi32(<2 x i32> %b) nounwind {
315 ; CHECK-LABEL: vls_sve_and_2xi32:
317 ; CHECK-NEXT: index z1.s, #0, #-1
318 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
319 ; CHECK-NEXT: and z0.d, z0.d, z1.d
320 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
323 ; NONEON-NOSVE-LABEL: vls_sve_and_2xi32:
324 ; NONEON-NOSVE: // %bb.0:
325 ; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
326 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]
327 ; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #8]
328 ; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]
329 ; NONEON-NOSVE-NEXT: add sp, sp, #16
330 ; NONEON-NOSVE-NEXT: ret
331 %c = and <2 x i32> %b, <i32 0, i32 4294967295>
335 define <4 x i32> @vls_sve_and_4xi32(<4 x i32> %b) nounwind {
336 ; CHECK-LABEL: vls_sve_and_4xi32:
338 ; CHECK-NEXT: adrp x8, .LCPI9_0
339 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
340 ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI9_0]
341 ; CHECK-NEXT: and z0.d, z0.d, z1.d
342 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
345 ; NONEON-NOSVE-LABEL: vls_sve_and_4xi32:
346 ; NONEON-NOSVE: // %bb.0:
347 ; NONEON-NOSVE-NEXT: str q0, [sp, #-32]!
348 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]
349 ; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #24]
350 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]
351 ; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #16]
352 ; NONEON-NOSVE-NEXT: ldr q0, [sp, #16]
353 ; NONEON-NOSVE-NEXT: add sp, sp, #32
354 ; NONEON-NOSVE-NEXT: ret
355 %c = and <4 x i32> %b, <i32 0, i32 4294967295, i32 0, i32 4294967295>
359 define <8 x i32> @vls_sve_and_8xi32(<8 x i32> %b) nounwind {
360 ; CHECK-LABEL: vls_sve_and_8xi32:
362 ; CHECK-NEXT: adrp x8, .LCPI10_0
363 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
364 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
365 ; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI10_0]
366 ; CHECK-NEXT: and z0.d, z0.d, z2.d
367 ; CHECK-NEXT: and z1.d, z1.d, z2.d
368 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
369 ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
372 ; NONEON-NOSVE-LABEL: vls_sve_and_8xi32:
373 ; NONEON-NOSVE: // %bb.0:
374 ; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-64]!
375 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]
376 ; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #40]
377 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]
378 ; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #32]
379 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]
380 ; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #56]
381 ; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]
382 ; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #48]
383 ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]
384 ; NONEON-NOSVE-NEXT: add sp, sp, #64
385 ; NONEON-NOSVE-NEXT: ret
386 %c = and <8 x i32> %b, <i32 0, i32 4294967295, i32 0, i32 4294967295, i32 0, i32 4294967295, i32 0, i32 4294967295>
391 define <2 x i64> @vls_sve_and_2xi64(<2 x i64> %b) nounwind {
392 ; CHECK-LABEL: vls_sve_and_2xi64:
394 ; CHECK-NEXT: index z1.d, #0, #-1
395 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
396 ; CHECK-NEXT: and z0.d, z0.d, z1.d
397 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
400 ; NONEON-NOSVE-LABEL: vls_sve_and_2xi64:
401 ; NONEON-NOSVE: // %bb.0:
402 ; NONEON-NOSVE-NEXT: str q0, [sp, #-32]!
403 ; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]
404 ; NONEON-NOSVE-NEXT: stp xzr, x8, [sp, #16]
405 ; NONEON-NOSVE-NEXT: ldr q0, [sp, #16]
406 ; NONEON-NOSVE-NEXT: add sp, sp, #32
407 ; NONEON-NOSVE-NEXT: ret
408 %c = and <2 x i64> %b, <i64 0, i64 18446744073709551615>
412 define <4 x i64> @vls_sve_and_4xi64(<4 x i64> %b) nounwind {
413 ; CHECK-LABEL: vls_sve_and_4xi64:
415 ; CHECK-NEXT: index z2.d, #0, #-1
416 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
417 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
418 ; CHECK-NEXT: and z0.d, z0.d, z2.d
419 ; CHECK-NEXT: and z1.d, z1.d, z2.d
420 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
421 ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
424 ; NONEON-NOSVE-LABEL: vls_sve_and_4xi64:
425 ; NONEON-NOSVE: // %bb.0:
426 ; NONEON-NOSVE-NEXT: sub sp, sp, #64
427 ; NONEON-NOSVE-NEXT: str q0, [sp, #32]
428 ; NONEON-NOSVE-NEXT: ldr x8, [sp, #40]
429 ; NONEON-NOSVE-NEXT: str q1, [sp]
430 ; NONEON-NOSVE-NEXT: stp xzr, x8, [sp, #48]
431 ; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]
432 ; NONEON-NOSVE-NEXT: ldr q0, [sp, #48]
433 ; NONEON-NOSVE-NEXT: stp xzr, x8, [sp, #16]
434 ; NONEON-NOSVE-NEXT: ldr q1, [sp, #16]
435 ; NONEON-NOSVE-NEXT: add sp, sp, #64
436 ; NONEON-NOSVE-NEXT: ret
437 %c = and <4 x i64> %b, <i64 0, i64 18446744073709551615, i64 0, i64 18446744073709551615>