[RISCV] Change func to funct in RISCVInstrInfoXqci.td. NFC (#119669)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-streaming-mode-fixed-length-and-combine.ll
blob478072d33d8c9bce62572b158d886fd94214d488
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s
3 ; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s
4 ; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
6 target triple = "aarch64-unknown-linux-gnu"
8 ; i8
9 define <4 x i8> @vls_sve_and_4xi8(<4 x i8> %b) nounwind {
10 ; CHECK-LABEL: vls_sve_and_4xi8:
11 ; CHECK:       // %bb.0:
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
17 ; CHECK-NEXT:    ret
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>
32  ret <4 x i8> %c
35 define <8 x i8> @vls_sve_and_8xi8(<8 x i8> %b) nounwind {
36 ; CHECK-LABEL: vls_sve_and_8xi8:
37 ; CHECK:       // %bb.0:
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
43 ; CHECK-NEXT:    ret
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>
64  ret <8 x i8> %c
67 define <16 x i8> @vls_sve_and_16xi8(<16 x i8> %b) nounwind {
68 ; CHECK-LABEL: vls_sve_and_16xi8:
69 ; CHECK:       // %bb.0:
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
75 ; CHECK-NEXT:    ret
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>
108  ret <16 x i8> %c
111 define <32 x i8> @vls_sve_and_32xi8(<32 x i8> %ap) nounwind {
112 ; CHECK-LABEL: vls_sve_and_32xi8:
113 ; CHECK:       // %bb.0:
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
122 ; CHECK-NEXT:    ret
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>
180  ret <32 x i8> %b
183 ; i16
184 define <2 x i16> @vls_sve_and_2xi16(<2 x i16> %b) nounwind {
185 ; CHECK-LABEL: vls_sve_and_2xi16:
186 ; CHECK:       // %bb.0:
187 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
188 ; CHECK-NEXT:    fmov s1, wzr
189 ; CHECK-NEXT:    mov z0.s, z0.s[1]
190 ; CHECK-NEXT:    zip1 z0.s, z1.s, z0.s
191 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
192 ; CHECK-NEXT:    ret
194 ; NONEON-NOSVE-LABEL: vls_sve_and_2xi16:
195 ; NONEON-NOSVE:       // %bb.0:
196 ; NONEON-NOSVE-NEXT:    str d0, [sp, #-16]!
197 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #4]
198 ; NONEON-NOSVE-NEXT:    stp wzr, w8, [sp, #8]
199 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]
200 ; NONEON-NOSVE-NEXT:    add sp, sp, #16
201 ; NONEON-NOSVE-NEXT:    ret
202  %c = and <2 x i16> %b, <i16 0, i16 65535>
203  ret <2 x i16> %c
206 define <4 x i16> @vls_sve_and_4xi16(<4 x i16> %b) nounwind {
207 ; CHECK-LABEL: vls_sve_and_4xi16:
208 ; CHECK:       // %bb.0:
209 ; CHECK-NEXT:    adrp x8, .LCPI5_0
210 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
211 ; CHECK-NEXT:    ldr d1, [x8, :lo12:.LCPI5_0]
212 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
213 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
214 ; CHECK-NEXT:    ret
216 ; NONEON-NOSVE-LABEL: vls_sve_and_4xi16:
217 ; NONEON-NOSVE:       // %bb.0:
218 ; NONEON-NOSVE-NEXT:    str d0, [sp, #-16]!
219 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #6]
220 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #12]
221 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #8]
222 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #14]
223 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #2]
224 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #10]
225 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]
226 ; NONEON-NOSVE-NEXT:    add sp, sp, #16
227 ; NONEON-NOSVE-NEXT:    ret
228  %c = and <4 x i16> %b, <i16 0, i16 65535, i16 0, i16 65535>
229  ret <4 x i16> %c
232 define <8 x i16> @vls_sve_and_8xi16(<8 x i16> %b) nounwind {
233 ; CHECK-LABEL: vls_sve_and_8xi16:
234 ; CHECK:       // %bb.0:
235 ; CHECK-NEXT:    adrp x8, .LCPI6_0
236 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
237 ; CHECK-NEXT:    ldr q1, [x8, :lo12:.LCPI6_0]
238 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
239 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
240 ; CHECK-NEXT:    ret
242 ; NONEON-NOSVE-LABEL: vls_sve_and_8xi16:
243 ; NONEON-NOSVE:       // %bb.0:
244 ; NONEON-NOSVE-NEXT:    str q0, [sp, #-32]!
245 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #14]
246 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #28]
247 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #24]
248 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #30]
249 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #10]
250 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #20]
251 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #26]
252 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #6]
253 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #16]
254 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #22]
255 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #2]
256 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #18]
257 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #16]
258 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
259 ; NONEON-NOSVE-NEXT:    ret
260  %c = and <8 x i16> %b, <i16 0, i16 65535, i16 0, i16 65535, i16 0, i16 65535, i16 0, i16 65535>
261  ret <8 x i16> %c
264 define <16 x i16> @vls_sve_and_16xi16(<16 x i16> %b) nounwind {
265 ; CHECK-LABEL: vls_sve_and_16xi16:
266 ; CHECK:       // %bb.0:
267 ; CHECK-NEXT:    adrp x8, .LCPI7_0
268 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
269 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
270 ; CHECK-NEXT:    ldr q2, [x8, :lo12:.LCPI7_0]
271 ; CHECK-NEXT:    and z0.d, z0.d, z2.d
272 ; CHECK-NEXT:    and z1.d, z1.d, z2.d
273 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
274 ; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $z1
275 ; CHECK-NEXT:    ret
277 ; NONEON-NOSVE-LABEL: vls_sve_and_16xi16:
278 ; NONEON-NOSVE:       // %bb.0:
279 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-64]!
280 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #14]
281 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #44]
282 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #40]
283 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #46]
284 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #10]
285 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #36]
286 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #42]
287 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #6]
288 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #32]
289 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #38]
290 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #2]
291 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #60]
292 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #34]
293 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #30]
294 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #56]
295 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #62]
296 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #26]
297 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #52]
298 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #58]
299 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]
300 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #48]
301 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #54]
302 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]
303 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #50]
304 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #32]
305 ; NONEON-NOSVE-NEXT:    add sp, sp, #64
306 ; NONEON-NOSVE-NEXT:    ret
307  %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>
308  ret <16 x i16> %c
311 ; i32
312 define <2 x i32> @vls_sve_and_2xi32(<2 x i32> %b) nounwind {
313 ; CHECK-LABEL: vls_sve_and_2xi32:
314 ; CHECK:       // %bb.0:
315 ; CHECK-NEXT:    index z1.s, #0, #-1
316 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
317 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
318 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
319 ; CHECK-NEXT:    ret
321 ; NONEON-NOSVE-LABEL: vls_sve_and_2xi32:
322 ; NONEON-NOSVE:       // %bb.0:
323 ; NONEON-NOSVE-NEXT:    str d0, [sp, #-16]!
324 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #4]
325 ; NONEON-NOSVE-NEXT:    stp wzr, w8, [sp, #8]
326 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]
327 ; NONEON-NOSVE-NEXT:    add sp, sp, #16
328 ; NONEON-NOSVE-NEXT:    ret
329  %c = and <2 x i32> %b, <i32 0, i32 4294967295>
330  ret <2 x i32> %c
333 define <4 x i32> @vls_sve_and_4xi32(<4 x i32> %b) nounwind {
334 ; CHECK-LABEL: vls_sve_and_4xi32:
335 ; CHECK:       // %bb.0:
336 ; CHECK-NEXT:    adrp x8, .LCPI9_0
337 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
338 ; CHECK-NEXT:    ldr q1, [x8, :lo12:.LCPI9_0]
339 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
340 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
341 ; CHECK-NEXT:    ret
343 ; NONEON-NOSVE-LABEL: vls_sve_and_4xi32:
344 ; NONEON-NOSVE:       // %bb.0:
345 ; NONEON-NOSVE-NEXT:    str q0, [sp, #-32]!
346 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #12]
347 ; NONEON-NOSVE-NEXT:    stp wzr, w8, [sp, #24]
348 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #4]
349 ; NONEON-NOSVE-NEXT:    stp wzr, w8, [sp, #16]
350 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #16]
351 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
352 ; NONEON-NOSVE-NEXT:    ret
353  %c = and <4 x i32> %b, <i32 0, i32 4294967295, i32 0, i32 4294967295>
354  ret <4 x i32> %c
357 define <8 x i32> @vls_sve_and_8xi32(<8 x i32> %b) nounwind {
358 ; CHECK-LABEL: vls_sve_and_8xi32:
359 ; CHECK:       // %bb.0:
360 ; CHECK-NEXT:    adrp x8, .LCPI10_0
361 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
362 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
363 ; CHECK-NEXT:    ldr q2, [x8, :lo12:.LCPI10_0]
364 ; CHECK-NEXT:    and z0.d, z0.d, z2.d
365 ; CHECK-NEXT:    and z1.d, z1.d, z2.d
366 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
367 ; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $z1
368 ; CHECK-NEXT:    ret
370 ; NONEON-NOSVE-LABEL: vls_sve_and_8xi32:
371 ; NONEON-NOSVE:       // %bb.0:
372 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-64]!
373 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #12]
374 ; NONEON-NOSVE-NEXT:    stp wzr, w8, [sp, #40]
375 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #4]
376 ; NONEON-NOSVE-NEXT:    stp wzr, w8, [sp, #32]
377 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]
378 ; NONEON-NOSVE-NEXT:    stp wzr, w8, [sp, #56]
379 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
380 ; NONEON-NOSVE-NEXT:    stp wzr, w8, [sp, #48]
381 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #32]
382 ; NONEON-NOSVE-NEXT:    add sp, sp, #64
383 ; NONEON-NOSVE-NEXT:    ret
384  %c = and <8 x i32> %b, <i32 0, i32 4294967295, i32 0, i32 4294967295, i32 0, i32 4294967295, i32 0, i32 4294967295>
385  ret <8 x i32> %c
388 ; i64
389 define <2 x i64> @vls_sve_and_2xi64(<2 x i64> %b) nounwind {
390 ; CHECK-LABEL: vls_sve_and_2xi64:
391 ; CHECK:       // %bb.0:
392 ; CHECK-NEXT:    index z1.d, #0, #-1
393 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
394 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
395 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
396 ; CHECK-NEXT:    ret
398 ; NONEON-NOSVE-LABEL: vls_sve_and_2xi64:
399 ; NONEON-NOSVE:       // %bb.0:
400 ; NONEON-NOSVE-NEXT:    str q0, [sp, #-32]!
401 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #8]
402 ; NONEON-NOSVE-NEXT:    stp xzr, x8, [sp, #16]
403 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #16]
404 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
405 ; NONEON-NOSVE-NEXT:    ret
406  %c = and <2 x i64> %b, <i64 0, i64 18446744073709551615>
407  ret <2 x i64> %c
410 define <4 x i64> @vls_sve_and_4xi64(<4 x i64> %b) nounwind {
411 ; CHECK-LABEL: vls_sve_and_4xi64:
412 ; CHECK:       // %bb.0:
413 ; CHECK-NEXT:    index z2.d, #0, #-1
414 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
415 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
416 ; CHECK-NEXT:    and z0.d, z0.d, z2.d
417 ; CHECK-NEXT:    and z1.d, z1.d, z2.d
418 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
419 ; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $z1
420 ; CHECK-NEXT:    ret
422 ; NONEON-NOSVE-LABEL: vls_sve_and_4xi64:
423 ; NONEON-NOSVE:       // %bb.0:
424 ; NONEON-NOSVE-NEXT:    sub sp, sp, #64
425 ; NONEON-NOSVE-NEXT:    str q0, [sp, #32]
426 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #40]
427 ; NONEON-NOSVE-NEXT:    str q1, [sp]
428 ; NONEON-NOSVE-NEXT:    stp xzr, x8, [sp, #48]
429 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #8]
430 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #48]
431 ; NONEON-NOSVE-NEXT:    stp xzr, x8, [sp, #16]
432 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #16]
433 ; NONEON-NOSVE-NEXT:    add sp, sp, #64
434 ; NONEON-NOSVE-NEXT:    ret
435  %c = and <4 x i64> %b, <i64 0, i64 18446744073709551615, i64 0, i64 18446744073709551615>
436  ret <4 x i64> %c