[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve2p1-intrinsics-while-pn.ll
blobaae09255bb7ee898b04423cedcfe3a37df71f97e
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p1 < %s | FileCheck %s
3 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2 < %s | FileCheck %s
7 ; WHILEGE
10 define target("aarch64.svcount") @whilege_c8_vl2(i64 %a, i64 %b) nounwind {
11 ; CHECK-LABEL: whilege_c8_vl2:
12 ; CHECK:       // %bb.0:
13 ; CHECK-NEXT:    whilege pn8.b, x0, x1, vlx2
14 ; CHECK-NEXT:    mov p0.b, p8.b
15 ; CHECK-NEXT:    ret
16   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c8(i64 %a, i64 %b, i32 2)
17   ret target("aarch64.svcount") %out
20 define target("aarch64.svcount") @whilege_c8_vl4(i64 %a, i64 %b) nounwind {
21 ; CHECK-LABEL: whilege_c8_vl4:
22 ; CHECK:       // %bb.0:
23 ; CHECK-NEXT:    whilege pn8.b, x0, x1, vlx4
24 ; CHECK-NEXT:    mov p0.b, p8.b
25 ; CHECK-NEXT:    ret
26   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c8(i64 %a, i64 %b, i32 4)
27   ret target("aarch64.svcount") %out
30 define target("aarch64.svcount") @whilege_c16_vl2(i64 %a, i64 %b) nounwind {
31 ; CHECK-LABEL: whilege_c16_vl2:
32 ; CHECK:       // %bb.0:
33 ; CHECK-NEXT:    whilege pn8.h, x0, x1, vlx2
34 ; CHECK-NEXT:    mov p0.b, p8.b
35 ; CHECK-NEXT:    ret
36   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c16(i64 %a, i64 %b, i32 2)
37   ret target("aarch64.svcount") %out
40 define target("aarch64.svcount") @whilege_c16_vl4(i64 %a, i64 %b) nounwind {
41 ; CHECK-LABEL: whilege_c16_vl4:
42 ; CHECK:       // %bb.0:
43 ; CHECK-NEXT:    whilege pn8.h, x0, x1, vlx4
44 ; CHECK-NEXT:    mov p0.b, p8.b
45 ; CHECK-NEXT:    ret
46   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c16(i64 %a, i64 %b, i32 4)
47   ret target("aarch64.svcount") %out
50 define target("aarch64.svcount") @whilege_c32_vl2(i64 %a, i64 %b) nounwind {
51 ; CHECK-LABEL: whilege_c32_vl2:
52 ; CHECK:       // %bb.0:
53 ; CHECK-NEXT:    whilege pn8.s, x0, x1, vlx2
54 ; CHECK-NEXT:    mov p0.b, p8.b
55 ; CHECK-NEXT:    ret
56   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c32(i64 %a, i64 %b, i32 2)
57   ret target("aarch64.svcount") %out
60 define target("aarch64.svcount") @whilege_c32_vl4(i64 %a, i64 %b) nounwind {
61 ; CHECK-LABEL: whilege_c32_vl4:
62 ; CHECK:       // %bb.0:
63 ; CHECK-NEXT:    whilege pn8.s, x0, x1, vlx4
64 ; CHECK-NEXT:    mov p0.b, p8.b
65 ; CHECK-NEXT:    ret
66   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c32(i64 %a, i64 %b, i32 4)
67   ret target("aarch64.svcount") %out
70 define target("aarch64.svcount") @whilege_c64_vl2(i64 %a, i64 %b) nounwind {
71 ; CHECK-LABEL: whilege_c64_vl2:
72 ; CHECK:       // %bb.0:
73 ; CHECK-NEXT:    whilege pn8.d, x0, x1, vlx2
74 ; CHECK-NEXT:    mov p0.b, p8.b
75 ; CHECK-NEXT:    ret
76   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c64(i64 %a, i64 %b, i32 2)
77   ret target("aarch64.svcount") %out
80 define target("aarch64.svcount") @whilege_c64_vl4(i64 %a, i64 %b) nounwind {
81 ; CHECK-LABEL: whilege_c64_vl4:
82 ; CHECK:       // %bb.0:
83 ; CHECK-NEXT:    whilege pn8.d, x0, x1, vlx4
84 ; CHECK-NEXT:    mov p0.b, p8.b
85 ; CHECK-NEXT:    ret
86   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c64(i64 %a, i64 %b, i32 4)
87   ret target("aarch64.svcount") %out
92 ; WHILEGT
95 define target("aarch64.svcount") @whilegt_c8_vl2(i64 %a, i64 %b) nounwind {
96 ; CHECK-LABEL: whilegt_c8_vl2:
97 ; CHECK:       // %bb.0:
98 ; CHECK-NEXT:    whilegt pn8.b, x0, x1, vlx2
99 ; CHECK-NEXT:    mov p0.b, p8.b
100 ; CHECK-NEXT:    ret
101   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c8(i64 %a, i64 %b, i32 2)
102   ret target("aarch64.svcount") %out
105 define target("aarch64.svcount") @whilegt_c8_vl4(i64 %a, i64 %b) nounwind {
106 ; CHECK-LABEL: whilegt_c8_vl4:
107 ; CHECK:       // %bb.0:
108 ; CHECK-NEXT:    whilegt pn8.b, x0, x1, vlx4
109 ; CHECK-NEXT:    mov p0.b, p8.b
110 ; CHECK-NEXT:    ret
111   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c8(i64 %a, i64 %b, i32 4)
112   ret target("aarch64.svcount") %out
115 define target("aarch64.svcount") @whilegt_c16_vl2(i64 %a, i64 %b) nounwind {
116 ; CHECK-LABEL: whilegt_c16_vl2:
117 ; CHECK:       // %bb.0:
118 ; CHECK-NEXT:    whilegt pn8.h, x0, x1, vlx2
119 ; CHECK-NEXT:    mov p0.b, p8.b
120 ; CHECK-NEXT:    ret
121   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c16(i64 %a, i64 %b, i32 2)
122   ret target("aarch64.svcount") %out
125 define target("aarch64.svcount") @whilegt_c16_vl4(i64 %a, i64 %b) nounwind {
126 ; CHECK-LABEL: whilegt_c16_vl4:
127 ; CHECK:       // %bb.0:
128 ; CHECK-NEXT:    whilegt pn8.h, x0, x1, vlx4
129 ; CHECK-NEXT:    mov p0.b, p8.b
130 ; CHECK-NEXT:    ret
131   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c16(i64 %a, i64 %b, i32 4)
132   ret target("aarch64.svcount") %out
135 define target("aarch64.svcount") @whilegt_c32_vl2(i64 %a, i64 %b) nounwind {
136 ; CHECK-LABEL: whilegt_c32_vl2:
137 ; CHECK:       // %bb.0:
138 ; CHECK-NEXT:    whilegt pn8.s, x0, x1, vlx2
139 ; CHECK-NEXT:    mov p0.b, p8.b
140 ; CHECK-NEXT:    ret
141   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c32(i64 %a, i64 %b, i32 2)
142   ret target("aarch64.svcount") %out
145 define target("aarch64.svcount") @whilegt_c32_vl4(i64 %a, i64 %b) nounwind {
146 ; CHECK-LABEL: whilegt_c32_vl4:
147 ; CHECK:       // %bb.0:
148 ; CHECK-NEXT:    whilegt pn8.s, x0, x1, vlx4
149 ; CHECK-NEXT:    mov p0.b, p8.b
150 ; CHECK-NEXT:    ret
151   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c32(i64 %a, i64 %b, i32 4)
152   ret target("aarch64.svcount") %out
155 define target("aarch64.svcount") @whilegt_c64_vl2(i64 %a, i64 %b) nounwind {
156 ; CHECK-LABEL: whilegt_c64_vl2:
157 ; CHECK:       // %bb.0:
158 ; CHECK-NEXT:    whilegt pn8.d, x0, x1, vlx2
159 ; CHECK-NEXT:    mov p0.b, p8.b
160 ; CHECK-NEXT:    ret
161   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c64(i64 %a, i64 %b, i32 2)
162   ret target("aarch64.svcount") %out
165 define target("aarch64.svcount") @whilegt_c64_vl4(i64 %a, i64 %b) nounwind {
166 ; CHECK-LABEL: whilegt_c64_vl4:
167 ; CHECK:       // %bb.0:
168 ; CHECK-NEXT:    whilegt pn8.d, x0, x1, vlx4
169 ; CHECK-NEXT:    mov p0.b, p8.b
170 ; CHECK-NEXT:    ret
171   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c64(i64 %a, i64 %b, i32 4)
172   ret target("aarch64.svcount") %out
177 ; WHILEHI
180 define target("aarch64.svcount") @whilehi_c8_vl2(i64 %a, i64 %b) nounwind {
181 ; CHECK-LABEL: whilehi_c8_vl2:
182 ; CHECK:       // %bb.0:
183 ; CHECK-NEXT:    whilehi pn8.b, x0, x1, vlx2
184 ; CHECK-NEXT:    mov p0.b, p8.b
185 ; CHECK-NEXT:    ret
186   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c8(i64 %a, i64 %b, i32 2)
187   ret target("aarch64.svcount") %out
190 define target("aarch64.svcount") @whilehi_c8_vl4(i64 %a, i64 %b) nounwind {
191 ; CHECK-LABEL: whilehi_c8_vl4:
192 ; CHECK:       // %bb.0:
193 ; CHECK-NEXT:    whilehi pn8.b, x0, x1, vlx4
194 ; CHECK-NEXT:    mov p0.b, p8.b
195 ; CHECK-NEXT:    ret
196   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c8(i64 %a, i64 %b, i32 4)
197   ret target("aarch64.svcount") %out
200 define target("aarch64.svcount") @whilehi_c16_vl2(i64 %a, i64 %b) nounwind {
201 ; CHECK-LABEL: whilehi_c16_vl2:
202 ; CHECK:       // %bb.0:
203 ; CHECK-NEXT:    whilehi pn8.h, x0, x1, vlx2
204 ; CHECK-NEXT:    mov p0.b, p8.b
205 ; CHECK-NEXT:    ret
206   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c16(i64 %a, i64 %b, i32 2)
207   ret target("aarch64.svcount") %out
210 define target("aarch64.svcount") @whilehi_c16_vl4(i64 %a, i64 %b) nounwind {
211 ; CHECK-LABEL: whilehi_c16_vl4:
212 ; CHECK:       // %bb.0:
213 ; CHECK-NEXT:    whilehi pn8.h, x0, x1, vlx4
214 ; CHECK-NEXT:    mov p0.b, p8.b
215 ; CHECK-NEXT:    ret
216   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c16(i64 %a, i64 %b, i32 4)
217   ret target("aarch64.svcount") %out
220 define target("aarch64.svcount") @whilehi_c32_vl2(i64 %a, i64 %b) nounwind {
221 ; CHECK-LABEL: whilehi_c32_vl2:
222 ; CHECK:       // %bb.0:
223 ; CHECK-NEXT:    whilehi pn8.s, x0, x1, vlx2
224 ; CHECK-NEXT:    mov p0.b, p8.b
225 ; CHECK-NEXT:    ret
226   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c32(i64 %a, i64 %b, i32 2)
227   ret target("aarch64.svcount") %out
230 define target("aarch64.svcount") @whilehi_c32_vl4(i64 %a, i64 %b) nounwind {
231 ; CHECK-LABEL: whilehi_c32_vl4:
232 ; CHECK:       // %bb.0:
233 ; CHECK-NEXT:    whilehi pn8.s, x0, x1, vlx4
234 ; CHECK-NEXT:    mov p0.b, p8.b
235 ; CHECK-NEXT:    ret
236   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c32(i64 %a, i64 %b, i32 4)
237   ret target("aarch64.svcount") %out
240 define target("aarch64.svcount") @whilehi_c64_vl2(i64 %a, i64 %b) nounwind {
241 ; CHECK-LABEL: whilehi_c64_vl2:
242 ; CHECK:       // %bb.0:
243 ; CHECK-NEXT:    whilehi pn8.d, x0, x1, vlx2
244 ; CHECK-NEXT:    mov p0.b, p8.b
245 ; CHECK-NEXT:    ret
246   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c64(i64 %a, i64 %b, i32 2)
247   ret target("aarch64.svcount") %out
250 define target("aarch64.svcount") @whilehi_c64_vl4(i64 %a, i64 %b) nounwind {
251 ; CHECK-LABEL: whilehi_c64_vl4:
252 ; CHECK:       // %bb.0:
253 ; CHECK-NEXT:    whilehi pn8.d, x0, x1, vlx4
254 ; CHECK-NEXT:    mov p0.b, p8.b
255 ; CHECK-NEXT:    ret
256   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c64(i64 %a, i64 %b, i32 4)
257   ret target("aarch64.svcount") %out
262 ; WHILEHS
265 define target("aarch64.svcount") @whilehs_c8_vl2(i64 %a, i64 %b) nounwind {
266 ; CHECK-LABEL: whilehs_c8_vl2:
267 ; CHECK:       // %bb.0:
268 ; CHECK-NEXT:    whilehs pn8.b, x0, x1, vlx2
269 ; CHECK-NEXT:    mov p0.b, p8.b
270 ; CHECK-NEXT:    ret
271   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c8(i64 %a, i64 %b, i32 2)
272   ret target("aarch64.svcount") %out
275 define target("aarch64.svcount") @whilehs_c8_vl4(i64 %a, i64 %b) nounwind {
276 ; CHECK-LABEL: whilehs_c8_vl4:
277 ; CHECK:       // %bb.0:
278 ; CHECK-NEXT:    whilehs pn8.b, x0, x1, vlx4
279 ; CHECK-NEXT:    mov p0.b, p8.b
280 ; CHECK-NEXT:    ret
281   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c8(i64 %a, i64 %b, i32 4)
282   ret target("aarch64.svcount") %out
285 define target("aarch64.svcount") @whilehs_c16_vl2(i64 %a, i64 %b) nounwind {
286 ; CHECK-LABEL: whilehs_c16_vl2:
287 ; CHECK:       // %bb.0:
288 ; CHECK-NEXT:    whilehs pn8.h, x0, x1, vlx2
289 ; CHECK-NEXT:    mov p0.b, p8.b
290 ; CHECK-NEXT:    ret
291   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c16(i64 %a, i64 %b, i32 2)
292   ret target("aarch64.svcount") %out
295 define target("aarch64.svcount") @whilehs_c16_vl4(i64 %a, i64 %b) nounwind {
296 ; CHECK-LABEL: whilehs_c16_vl4:
297 ; CHECK:       // %bb.0:
298 ; CHECK-NEXT:    whilehs pn8.h, x0, x1, vlx4
299 ; CHECK-NEXT:    mov p0.b, p8.b
300 ; CHECK-NEXT:    ret
301   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c16(i64 %a, i64 %b, i32 4)
302   ret target("aarch64.svcount") %out
305 define target("aarch64.svcount") @whilehs_c32_vl2(i64 %a, i64 %b) nounwind {
306 ; CHECK-LABEL: whilehs_c32_vl2:
307 ; CHECK:       // %bb.0:
308 ; CHECK-NEXT:    whilehs pn8.s, x0, x1, vlx2
309 ; CHECK-NEXT:    mov p0.b, p8.b
310 ; CHECK-NEXT:    ret
311   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c32(i64 %a, i64 %b, i32 2)
312   ret target("aarch64.svcount") %out
315 define target("aarch64.svcount") @whilehs_c32_vl4(i64 %a, i64 %b) nounwind {
316 ; CHECK-LABEL: whilehs_c32_vl4:
317 ; CHECK:       // %bb.0:
318 ; CHECK-NEXT:    whilehs pn8.s, x0, x1, vlx4
319 ; CHECK-NEXT:    mov p0.b, p8.b
320 ; CHECK-NEXT:    ret
321   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c32(i64 %a, i64 %b, i32 4)
322   ret target("aarch64.svcount") %out
325 define target("aarch64.svcount") @whilehs_c64_vl2(i64 %a, i64 %b) nounwind {
326 ; CHECK-LABEL: whilehs_c64_vl2:
327 ; CHECK:       // %bb.0:
328 ; CHECK-NEXT:    whilehs pn8.d, x0, x1, vlx2
329 ; CHECK-NEXT:    mov p0.b, p8.b
330 ; CHECK-NEXT:    ret
331   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c64(i64 %a, i64 %b, i32 2)
332   ret target("aarch64.svcount") %out
335 define target("aarch64.svcount") @whilehs_c64_vl4(i64 %a, i64 %b) nounwind {
336 ; CHECK-LABEL: whilehs_c64_vl4:
337 ; CHECK:       // %bb.0:
338 ; CHECK-NEXT:    whilehs pn8.d, x0, x1, vlx4
339 ; CHECK-NEXT:    mov p0.b, p8.b
340 ; CHECK-NEXT:    ret
341   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c64(i64 %a, i64 %b, i32 4)
342   ret target("aarch64.svcount") %out
347 ; WHILELE
350 define target("aarch64.svcount") @whilele_c8_vl2(i64 %a, i64 %b) nounwind {
351 ; CHECK-LABEL: whilele_c8_vl2:
352 ; CHECK:       // %bb.0:
353 ; CHECK-NEXT:    whilele pn8.b, x0, x1, vlx2
354 ; CHECK-NEXT:    mov p0.b, p8.b
355 ; CHECK-NEXT:    ret
356   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c8(i64 %a, i64 %b, i32 2)
357   ret target("aarch64.svcount") %out
360 define target("aarch64.svcount") @whilele_c8_vl4(i64 %a, i64 %b) nounwind {
361 ; CHECK-LABEL: whilele_c8_vl4:
362 ; CHECK:       // %bb.0:
363 ; CHECK-NEXT:    whilele pn8.b, x0, x1, vlx4
364 ; CHECK-NEXT:    mov p0.b, p8.b
365 ; CHECK-NEXT:    ret
366   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c8(i64 %a, i64 %b, i32 4)
367   ret target("aarch64.svcount") %out
370 define target("aarch64.svcount") @whilele_c16_vl2(i64 %a, i64 %b) nounwind {
371 ; CHECK-LABEL: whilele_c16_vl2:
372 ; CHECK:       // %bb.0:
373 ; CHECK-NEXT:    whilele pn8.h, x0, x1, vlx2
374 ; CHECK-NEXT:    mov p0.b, p8.b
375 ; CHECK-NEXT:    ret
376   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c16(i64 %a, i64 %b, i32 2)
377   ret target("aarch64.svcount") %out
380 define target("aarch64.svcount") @whilele_c16_vl4(i64 %a, i64 %b) nounwind {
381 ; CHECK-LABEL: whilele_c16_vl4:
382 ; CHECK:       // %bb.0:
383 ; CHECK-NEXT:    whilele pn8.h, x0, x1, vlx4
384 ; CHECK-NEXT:    mov p0.b, p8.b
385 ; CHECK-NEXT:    ret
386   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c16(i64 %a, i64 %b, i32 4)
387   ret target("aarch64.svcount") %out
390 define target("aarch64.svcount") @whilele_c32_vl2(i64 %a, i64 %b) nounwind {
391 ; CHECK-LABEL: whilele_c32_vl2:
392 ; CHECK:       // %bb.0:
393 ; CHECK-NEXT:    whilele pn8.s, x0, x1, vlx2
394 ; CHECK-NEXT:    mov p0.b, p8.b
395 ; CHECK-NEXT:    ret
396   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c32(i64 %a, i64 %b, i32 2)
397   ret target("aarch64.svcount") %out
400 define target("aarch64.svcount") @whilele_c32_vl4(i64 %a, i64 %b) nounwind {
401 ; CHECK-LABEL: whilele_c32_vl4:
402 ; CHECK:       // %bb.0:
403 ; CHECK-NEXT:    whilele pn8.s, x0, x1, vlx4
404 ; CHECK-NEXT:    mov p0.b, p8.b
405 ; CHECK-NEXT:    ret
406   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c32(i64 %a, i64 %b, i32 4)
407   ret target("aarch64.svcount") %out
410 define target("aarch64.svcount") @whilele_c64_vl2(i64 %a, i64 %b) nounwind {
411 ; CHECK-LABEL: whilele_c64_vl2:
412 ; CHECK:       // %bb.0:
413 ; CHECK-NEXT:    whilele pn8.d, x0, x1, vlx2
414 ; CHECK-NEXT:    mov p0.b, p8.b
415 ; CHECK-NEXT:    ret
416   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c64(i64 %a, i64 %b, i32 2)
417   ret target("aarch64.svcount") %out
420 define target("aarch64.svcount") @whilele_c64_vl4(i64 %a, i64 %b) nounwind {
421 ; CHECK-LABEL: whilele_c64_vl4:
422 ; CHECK:       // %bb.0:
423 ; CHECK-NEXT:    whilele pn8.d, x0, x1, vlx4
424 ; CHECK-NEXT:    mov p0.b, p8.b
425 ; CHECK-NEXT:    ret
426   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c64(i64 %a, i64 %b, i32 4)
427   ret target("aarch64.svcount") %out
432 ; WHILELO
435 define target("aarch64.svcount") @whilelo_c8_vl2(i64 %a, i64 %b) nounwind {
436 ; CHECK-LABEL: whilelo_c8_vl2:
437 ; CHECK:       // %bb.0:
438 ; CHECK-NEXT:    whilelo pn8.b, x0, x1, vlx2
439 ; CHECK-NEXT:    mov p0.b, p8.b
440 ; CHECK-NEXT:    ret
441   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c8(i64 %a, i64 %b, i32 2)
442   ret target("aarch64.svcount") %out
445 define target("aarch64.svcount") @whilelo_c8_vl4(i64 %a, i64 %b) nounwind {
446 ; CHECK-LABEL: whilelo_c8_vl4:
447 ; CHECK:       // %bb.0:
448 ; CHECK-NEXT:    whilelo pn8.b, x0, x1, vlx4
449 ; CHECK-NEXT:    mov p0.b, p8.b
450 ; CHECK-NEXT:    ret
451   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c8(i64 %a, i64 %b, i32 4)
452   ret target("aarch64.svcount") %out
455 define target("aarch64.svcount") @whilelo_c16_vl2(i64 %a, i64 %b) nounwind {
456 ; CHECK-LABEL: whilelo_c16_vl2:
457 ; CHECK:       // %bb.0:
458 ; CHECK-NEXT:    whilelo pn8.h, x0, x1, vlx2
459 ; CHECK-NEXT:    mov p0.b, p8.b
460 ; CHECK-NEXT:    ret
461   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c16(i64 %a, i64 %b, i32 2)
462   ret target("aarch64.svcount") %out
465 define target("aarch64.svcount") @whilelo_c16_vl4(i64 %a, i64 %b) nounwind {
466 ; CHECK-LABEL: whilelo_c16_vl4:
467 ; CHECK:       // %bb.0:
468 ; CHECK-NEXT:    whilelo pn8.h, x0, x1, vlx4
469 ; CHECK-NEXT:    mov p0.b, p8.b
470 ; CHECK-NEXT:    ret
471   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c16(i64 %a, i64 %b, i32 4)
472   ret target("aarch64.svcount") %out
475 define target("aarch64.svcount") @whilelo_c32_vl2(i64 %a, i64 %b) nounwind {
476 ; CHECK-LABEL: whilelo_c32_vl2:
477 ; CHECK:       // %bb.0:
478 ; CHECK-NEXT:    whilelo pn8.s, x0, x1, vlx2
479 ; CHECK-NEXT:    mov p0.b, p8.b
480 ; CHECK-NEXT:    ret
481   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c32(i64 %a, i64 %b, i32 2)
482   ret target("aarch64.svcount") %out
485 define target("aarch64.svcount") @whilelo_c32_vl4(i64 %a, i64 %b) nounwind {
486 ; CHECK-LABEL: whilelo_c32_vl4:
487 ; CHECK:       // %bb.0:
488 ; CHECK-NEXT:    whilelo pn8.s, x0, x1, vlx4
489 ; CHECK-NEXT:    mov p0.b, p8.b
490 ; CHECK-NEXT:    ret
491   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c32(i64 %a, i64 %b, i32 4)
492   ret target("aarch64.svcount") %out
495 define target("aarch64.svcount") @whilelo_c64_vl2(i64 %a, i64 %b) nounwind {
496 ; CHECK-LABEL: whilelo_c64_vl2:
497 ; CHECK:       // %bb.0:
498 ; CHECK-NEXT:    whilelo pn8.d, x0, x1, vlx2
499 ; CHECK-NEXT:    mov p0.b, p8.b
500 ; CHECK-NEXT:    ret
501   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c64(i64 %a, i64 %b, i32 2)
502   ret target("aarch64.svcount") %out
505 define target("aarch64.svcount") @whilelo_c64_vl4(i64 %a, i64 %b) nounwind {
506 ; CHECK-LABEL: whilelo_c64_vl4:
507 ; CHECK:       // %bb.0:
508 ; CHECK-NEXT:    whilelo pn8.d, x0, x1, vlx4
509 ; CHECK-NEXT:    mov p0.b, p8.b
510 ; CHECK-NEXT:    ret
511   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c64(i64 %a, i64 %b, i32 4)
512   ret target("aarch64.svcount") %out
517 ; WHILELS
520 define target("aarch64.svcount") @whilels_c8_vl2(i64 %a, i64 %b) nounwind {
521 ; CHECK-LABEL: whilels_c8_vl2:
522 ; CHECK:       // %bb.0:
523 ; CHECK-NEXT:    whilels pn8.b, x0, x1, vlx2
524 ; CHECK-NEXT:    mov p0.b, p8.b
525 ; CHECK-NEXT:    ret
526   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c8(i64 %a, i64 %b, i32 2)
527   ret target("aarch64.svcount") %out
530 define target("aarch64.svcount") @whilels_c8_vl4(i64 %a, i64 %b) nounwind {
531 ; CHECK-LABEL: whilels_c8_vl4:
532 ; CHECK:       // %bb.0:
533 ; CHECK-NEXT:    whilels pn8.b, x0, x1, vlx4
534 ; CHECK-NEXT:    mov p0.b, p8.b
535 ; CHECK-NEXT:    ret
536   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c8(i64 %a, i64 %b, i32 4)
537   ret target("aarch64.svcount") %out
540 define target("aarch64.svcount") @whilels_c16_vl2(i64 %a, i64 %b) nounwind {
541 ; CHECK-LABEL: whilels_c16_vl2:
542 ; CHECK:       // %bb.0:
543 ; CHECK-NEXT:    whilels pn8.h, x0, x1, vlx2
544 ; CHECK-NEXT:    mov p0.b, p8.b
545 ; CHECK-NEXT:    ret
546   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c16(i64 %a, i64 %b, i32 2)
547   ret target("aarch64.svcount") %out
550 define target("aarch64.svcount") @whilels_c16_vl4(i64 %a, i64 %b) nounwind {
551 ; CHECK-LABEL: whilels_c16_vl4:
552 ; CHECK:       // %bb.0:
553 ; CHECK-NEXT:    whilels pn8.h, x0, x1, vlx4
554 ; CHECK-NEXT:    mov p0.b, p8.b
555 ; CHECK-NEXT:    ret
556   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c16(i64 %a, i64 %b, i32 4)
557   ret target("aarch64.svcount") %out
560 define target("aarch64.svcount") @whilels_c32_vl2(i64 %a, i64 %b) nounwind {
561 ; CHECK-LABEL: whilels_c32_vl2:
562 ; CHECK:       // %bb.0:
563 ; CHECK-NEXT:    whilels pn8.s, x0, x1, vlx2
564 ; CHECK-NEXT:    mov p0.b, p8.b
565 ; CHECK-NEXT:    ret
566   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c32(i64 %a, i64 %b, i32 2)
567   ret target("aarch64.svcount") %out
570 define target("aarch64.svcount") @whilels_c32_vl4(i64 %a, i64 %b) nounwind {
571 ; CHECK-LABEL: whilels_c32_vl4:
572 ; CHECK:       // %bb.0:
573 ; CHECK-NEXT:    whilels pn8.s, x0, x1, vlx4
574 ; CHECK-NEXT:    mov p0.b, p8.b
575 ; CHECK-NEXT:    ret
576   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c32(i64 %a, i64 %b, i32 4)
577   ret target("aarch64.svcount") %out
580 define target("aarch64.svcount") @whilels_c64_vl2(i64 %a, i64 %b) nounwind {
581 ; CHECK-LABEL: whilels_c64_vl2:
582 ; CHECK:       // %bb.0:
583 ; CHECK-NEXT:    whilels pn8.d, x0, x1, vlx2
584 ; CHECK-NEXT:    mov p0.b, p8.b
585 ; CHECK-NEXT:    ret
586   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c64(i64 %a, i64 %b, i32 2)
587   ret target("aarch64.svcount") %out
590 define target("aarch64.svcount") @whilels_c64_vl4(i64 %a, i64 %b) nounwind {
591 ; CHECK-LABEL: whilels_c64_vl4:
592 ; CHECK:       // %bb.0:
593 ; CHECK-NEXT:    whilels pn8.d, x0, x1, vlx4
594 ; CHECK-NEXT:    mov p0.b, p8.b
595 ; CHECK-NEXT:    ret
596   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c64(i64 %a, i64 %b, i32 4)
597   ret target("aarch64.svcount") %out
602 ; WHILELT
605 define target("aarch64.svcount") @whilelt_c8_vl2(i64 %a, i64 %b) nounwind {
606 ; CHECK-LABEL: whilelt_c8_vl2:
607 ; CHECK:       // %bb.0:
608 ; CHECK-NEXT:    whilelt pn8.b, x0, x1, vlx2
609 ; CHECK-NEXT:    mov p0.b, p8.b
610 ; CHECK-NEXT:    ret
611   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c8(i64 %a, i64 %b, i32 2)
612   ret target("aarch64.svcount") %out
615 define target("aarch64.svcount") @whilelt_c8_vl4(i64 %a, i64 %b) nounwind {
616 ; CHECK-LABEL: whilelt_c8_vl4:
617 ; CHECK:       // %bb.0:
618 ; CHECK-NEXT:    whilelt pn8.b, x0, x1, vlx4
619 ; CHECK-NEXT:    mov p0.b, p8.b
620 ; CHECK-NEXT:    ret
621   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c8(i64 %a, i64 %b, i32 4)
622   ret target("aarch64.svcount") %out
625 define target("aarch64.svcount") @whilelt_c16_vl2(i64 %a, i64 %b) nounwind {
626 ; CHECK-LABEL: whilelt_c16_vl2:
627 ; CHECK:       // %bb.0:
628 ; CHECK-NEXT:    whilelt pn8.h, x0, x1, vlx2
629 ; CHECK-NEXT:    mov p0.b, p8.b
630 ; CHECK-NEXT:    ret
631   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c16(i64 %a, i64 %b, i32 2)
632   ret target("aarch64.svcount") %out
635 define target("aarch64.svcount") @whilelt_c16_vl4(i64 %a, i64 %b) nounwind {
636 ; CHECK-LABEL: whilelt_c16_vl4:
637 ; CHECK:       // %bb.0:
638 ; CHECK-NEXT:    whilelt pn8.h, x0, x1, vlx4
639 ; CHECK-NEXT:    mov p0.b, p8.b
640 ; CHECK-NEXT:    ret
641   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c16(i64 %a, i64 %b, i32 4)
642   ret target("aarch64.svcount") %out
645 define target("aarch64.svcount") @whilelt_c32_vl2(i64 %a, i64 %b) nounwind {
646 ; CHECK-LABEL: whilelt_c32_vl2:
647 ; CHECK:       // %bb.0:
648 ; CHECK-NEXT:    whilelt pn8.s, x0, x1, vlx2
649 ; CHECK-NEXT:    mov p0.b, p8.b
650 ; CHECK-NEXT:    ret
651   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c32(i64 %a, i64 %b, i32 2)
652   ret target("aarch64.svcount") %out
655 define target("aarch64.svcount") @whilelt_c32_vl4(i64 %a, i64 %b) nounwind {
656 ; CHECK-LABEL: whilelt_c32_vl4:
657 ; CHECK:       // %bb.0:
658 ; CHECK-NEXT:    whilelt pn8.s, x0, x1, vlx4
659 ; CHECK-NEXT:    mov p0.b, p8.b
660 ; CHECK-NEXT:    ret
661   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c32(i64 %a, i64 %b, i32 4)
662   ret target("aarch64.svcount") %out
665 define target("aarch64.svcount") @whilelt_c64_vl2(i64 %a, i64 %b) nounwind {
666 ; CHECK-LABEL: whilelt_c64_vl2:
667 ; CHECK:       // %bb.0:
668 ; CHECK-NEXT:    whilelt pn8.d, x0, x1, vlx2
669 ; CHECK-NEXT:    mov p0.b, p8.b
670 ; CHECK-NEXT:    ret
671   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c64(i64 %a, i64 %b, i32 2)
672   ret target("aarch64.svcount") %out
675 define target("aarch64.svcount") @whilelt_c64_vl4(i64 %a, i64 %b) nounwind {
676 ; CHECK-LABEL: whilelt_c64_vl4:
677 ; CHECK:       // %bb.0:
678 ; CHECK-NEXT:    whilelt pn8.d, x0, x1, vlx4
679 ; CHECK-NEXT:    mov p0.b, p8.b
680 ; CHECK-NEXT:    ret
681   %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c64(i64 %a, i64 %b, i32 4)
682   ret target("aarch64.svcount") %out
686 declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c8(i64, i64, i32)
687 declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c16(i64, i64, i32)
688 declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c32(i64, i64, i32)
689 declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c64(i64, i64, i32)
690 declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c8(i64, i64, i32)
691 declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c16(i64, i64, i32)
692 declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c32(i64, i64, i32)
693 declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c64(i64, i64, i32)
694 declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c8(i64, i64, i32)
695 declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c16(i64, i64, i32)
696 declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c32(i64, i64, i32)
697 declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c64(i64, i64, i32)
698 declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c8(i64, i64, i32)
699 declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c16(i64, i64, i32)
700 declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c32(i64, i64, i32)
701 declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c64(i64, i64, i32)
702 declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c8(i64, i64, i32)
703 declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c16(i64, i64, i32)
704 declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c32(i64, i64, i32)
705 declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c64(i64, i64, i32)
706 declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c8(i64, i64, i32)
707 declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c16(i64, i64, i32)
708 declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c32(i64, i64, i32)
709 declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c64(i64, i64, i32)
710 declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c8(i64, i64, i32)
711 declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c16(i64, i64, i32)
712 declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c32(i64, i64, i32)
713 declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c64(i64, i64, i32)
714 declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c8(i64, i64, i32)
715 declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c16(i64, i64, i32)
716 declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c32(i64, i64, i32)
717 declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c64(i64, i64, i32)