[Transforms] Silence a warning in SROA.cpp (NFC)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-intrinsics-while.ll
blobab4554428be450b94d9f20bd1296fff7ccb2b957
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s
3 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -force-streaming < %s | FileCheck %s
6 ; WHILELE
9 define <vscale x 16 x i1> @whilele_b_ww(i32 %a, i32 %b) {
10 ; CHECK-LABEL: whilele_b_ww:
11 ; CHECK:       // %bb.0:
12 ; CHECK-NEXT:    whilele p0.b, w0, w1
13 ; CHECK-NEXT:    ret
14   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32 %a, i32 %b)
15   ret <vscale x 16 x i1> %out
18 define <vscale x 16 x i1> @whilele_b_xx(i64 %a, i64 %b) {
19 ; CHECK-LABEL: whilele_b_xx:
20 ; CHECK:       // %bb.0:
21 ; CHECK-NEXT:    whilele p0.b, x0, x1
22 ; CHECK-NEXT:    ret
23   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64 %a, i64 %b)
24   ret <vscale x 16 x i1> %out
27 define <vscale x 8 x i1> @whilele_h_ww(i32 %a, i32 %b) {
28 ; CHECK-LABEL: whilele_h_ww:
29 ; CHECK:       // %bb.0:
30 ; CHECK-NEXT:    whilele p0.h, w0, w1
31 ; CHECK-NEXT:    ret
32   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i32(i32 %a, i32 %b)
33   ret <vscale x 8 x i1> %out
36 define <vscale x 8 x i1> @whilele_h_xx(i64 %a, i64 %b) {
37 ; CHECK-LABEL: whilele_h_xx:
38 ; CHECK:       // %bb.0:
39 ; CHECK-NEXT:    whilele p0.h, x0, x1
40 ; CHECK-NEXT:    ret
41   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i64(i64 %a, i64 %b)
42   ret <vscale x 8 x i1> %out
45 define <vscale x 4 x i1> @whilele_s_ww(i32 %a, i32 %b) {
46 ; CHECK-LABEL: whilele_s_ww:
47 ; CHECK:       // %bb.0:
48 ; CHECK-NEXT:    whilele p0.s, w0, w1
49 ; CHECK-NEXT:    ret
50   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i32(i32 %a, i32 %b)
51   ret <vscale x 4 x i1> %out
54 define <vscale x 4 x i1> @whilele_s_xx(i64 %a, i64 %b) {
55 ; CHECK-LABEL: whilele_s_xx:
56 ; CHECK:       // %bb.0:
57 ; CHECK-NEXT:    whilele p0.s, x0, x1
58 ; CHECK-NEXT:    ret
59   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i64(i64 %a, i64 %b)
60   ret <vscale x 4 x i1> %out
63 define <vscale x 2 x i1> @whilele_d_ww(i32 %a, i32 %b) {
64 ; CHECK-LABEL: whilele_d_ww:
65 ; CHECK:       // %bb.0:
66 ; CHECK-NEXT:    whilele p0.d, w0, w1
67 ; CHECK-NEXT:    ret
68   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i32(i32 %a, i32 %b)
69   ret <vscale x 2 x i1> %out
72 define <vscale x 2 x i1> @whilele_d_xx(i64 %a, i64 %b) {
73 ; CHECK-LABEL: whilele_d_xx:
74 ; CHECK:       // %bb.0:
75 ; CHECK-NEXT:    whilele p0.d, x0, x1
76 ; CHECK-NEXT:    ret
77   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i64(i64 %a, i64 %b)
78   ret <vscale x 2 x i1> %out
81 define <vscale x 2 x i1> @whilele_d_ii_dont_fold_to_ptrue_larger_than_minvec() {
82 ; CHECK-LABEL: whilele_d_ii_dont_fold_to_ptrue_larger_than_minvec:
83 ; CHECK:       // %bb.0:
84 ; CHECK-NEXT:    mov w8, #3 // =0x3
85 ; CHECK-NEXT:    whilele p0.d, xzr, x8
86 ; CHECK-NEXT:    ret
87   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i64(i64 0, i64 3)
88   ret <vscale x 2 x i1> %out
91 define <vscale x 16 x i1> @whilele_b_ii() {
92 ; CHECK-LABEL: whilele_b_ii:
93 ; CHECK:       // %bb.0:
94 ; CHECK-NEXT:    ptrue p0.b, vl6
95 ; CHECK-NEXT:    ret
96   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64 -2, i64 3)
97   ret <vscale x 16 x i1> %out
100 define <vscale x 16 x i1> @whilele_b_ii_dont_fold_to_ptrue_nonexistent_vl9() {
101 ; CHECK-LABEL: whilele_b_ii_dont_fold_to_ptrue_nonexistent_vl9:
102 ; CHECK:       // %bb.0:
103 ; CHECK-NEXT:    mov w8, #9 // =0x9
104 ; CHECK-NEXT:    whilele p0.b, xzr, x8
105 ; CHECK-NEXT:    ret
106   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64 0, i64 9)
107   ret <vscale x 16 x i1> %out
110 define <vscale x 16 x i1> @whilele_b_vl_maximum() vscale_range(16, 16) {
111 ; CHECK-LABEL: whilele_b_vl_maximum:
112 ; CHECK:       // %bb.0:
113 ; CHECK-NEXT:    ptrue p0.b, vl256
114 ; CHECK-NEXT:    ret
115   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64 0, i64 255)
116   ret <vscale x 16 x i1> %out
119 define <vscale x 16 x i1> @whilele_b_ii_dont_fold_to_ptrue_overflow() {
120 ; CHECK-LABEL: whilele_b_ii_dont_fold_to_ptrue_overflow:
121 ; CHECK:       // %bb.0:
122 ; CHECK-NEXT:    mov w8, #2 // =0x2
123 ; CHECK-NEXT:    mov w9, #2147483647 // =0x7fffffff
124 ; CHECK-NEXT:    movk w8, #32768, lsl #16
125 ; CHECK-NEXT:    whilele p0.b, w9, w8
126 ; CHECK-NEXT:    ret
127   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32 2147483647, i32 -2147483646)
128   ret <vscale x 16 x i1> %out
131 define <vscale x 16 x i1> @whilele_b_ii_known_always_true() {
132 ; CHECK-LABEL: whilele_b_ii_known_always_true:
133 ; CHECK:       // %bb.0:
134 ; CHECK-NEXT:    ptrue p0.b
135 ; CHECK-NEXT:    ret
136   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32 2147483646, i32 2147483647)
137   ret <vscale x 16 x i1> %out
141 ; WHILELO
144 define <vscale x 16 x i1> @whilelo_b_ww(i32 %a, i32 %b) {
145 ; CHECK-LABEL: whilelo_b_ww:
146 ; CHECK:       // %bb.0:
147 ; CHECK-NEXT:    whilelo p0.b, w0, w1
148 ; CHECK-NEXT:    ret
149   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32 %a, i32 %b)
150   ret <vscale x 16 x i1> %out
153 define <vscale x 16 x i1> @whilelo_b_xx(i64 %a, i64 %b) {
154 ; CHECK-LABEL: whilelo_b_xx:
155 ; CHECK:       // %bb.0:
156 ; CHECK-NEXT:    whilelo p0.b, x0, x1
157 ; CHECK-NEXT:    ret
158   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 %a, i64 %b)
159   ret <vscale x 16 x i1> %out
162 define <vscale x 8 x i1> @whilelo_h_ww(i32 %a, i32 %b) {
163 ; CHECK-LABEL: whilelo_h_ww:
164 ; CHECK:       // %bb.0:
165 ; CHECK-NEXT:    whilelo p0.h, w0, w1
166 ; CHECK-NEXT:    ret
167   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i32(i32 %a, i32 %b)
168   ret <vscale x 8 x i1> %out
171 define <vscale x 8 x i1> @whilelo_h_xx(i64 %a, i64 %b) {
172 ; CHECK-LABEL: whilelo_h_xx:
173 ; CHECK:       // %bb.0:
174 ; CHECK-NEXT:    whilelo p0.h, x0, x1
175 ; CHECK-NEXT:    ret
176   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i64(i64 %a, i64 %b)
177   ret <vscale x 8 x i1> %out
180 define <vscale x 4 x i1> @whilelo_s_ww(i32 %a, i32 %b) {
181 ; CHECK-LABEL: whilelo_s_ww:
182 ; CHECK:       // %bb.0:
183 ; CHECK-NEXT:    whilelo p0.s, w0, w1
184 ; CHECK-NEXT:    ret
185   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i32(i32 %a, i32 %b)
186   ret <vscale x 4 x i1> %out
189 define <vscale x 4 x i1> @whilelo_s_xx(i64 %a, i64 %b) {
190 ; CHECK-LABEL: whilelo_s_xx:
191 ; CHECK:       // %bb.0:
192 ; CHECK-NEXT:    whilelo p0.s, x0, x1
193 ; CHECK-NEXT:    ret
194   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i64(i64 %a, i64 %b)
195   ret <vscale x 4 x i1> %out
198 define <vscale x 2 x i1> @whilelo_d_ww(i32 %a, i32 %b) {
199 ; CHECK-LABEL: whilelo_d_ww:
200 ; CHECK:       // %bb.0:
201 ; CHECK-NEXT:    whilelo p0.d, w0, w1
202 ; CHECK-NEXT:    ret
203   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i32(i32 %a, i32 %b)
204   ret <vscale x 2 x i1> %out
207 define <vscale x 2 x i1> @whilelo_d_xx(i64 %a, i64 %b) {
208 ; CHECK-LABEL: whilelo_d_xx:
209 ; CHECK:       // %bb.0:
210 ; CHECK-NEXT:    whilelo p0.d, x0, x1
211 ; CHECK-NEXT:    ret
212   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i64(i64 %a, i64 %b)
213   ret <vscale x 2 x i1> %out
216 define <vscale x 2 x i1> @whilelo_d_ii_dont_fold_to_ptrue_larger_than_minvec() {
217 ; CHECK-LABEL: whilelo_d_ii_dont_fold_to_ptrue_larger_than_minvec:
218 ; CHECK:       // %bb.0:
219 ; CHECK-NEXT:    mov w8, #3 // =0x3
220 ; CHECK-NEXT:    whilelo p0.d, xzr, x8
221 ; CHECK-NEXT:    ret
222   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i64(i64 0, i64 3)
223   ret <vscale x 2 x i1> %out
226 define <vscale x 16 x i1> @whilelo_b_ii() {
227 ; CHECK-LABEL: whilelo_b_ii:
228 ; CHECK:       // %bb.0:
229 ; CHECK-NEXT:    ptrue p0.b, vl6
230 ; CHECK-NEXT:    ret
231   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 2, i64 8)
232   ret <vscale x 16 x i1> %out
235 define <vscale x 16 x i1> @whilelo_b_ii_dont_fold_to_ptrue_nonexistent_vl9() {
236 ; CHECK-LABEL: whilelo_b_ii_dont_fold_to_ptrue_nonexistent_vl9:
237 ; CHECK:       // %bb.0:
238 ; CHECK-NEXT:    mov w8, #9 // =0x9
239 ; CHECK-NEXT:    whilelo p0.b, xzr, x8
240 ; CHECK-NEXT:    ret
241   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 0, i64 9)
242   ret <vscale x 16 x i1> %out
245 define <vscale x 16 x i1> @whilelo_b_vl_maximum() vscale_range(16, 16) {
246 ; CHECK-LABEL: whilelo_b_vl_maximum:
247 ; CHECK:       // %bb.0:
248 ; CHECK-NEXT:    ptrue p0.b, vl256
249 ; CHECK-NEXT:    ret
250   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 0, i64 256)
251   ret <vscale x 16 x i1> %out
254 define <vscale x 16 x i1> @whilelo_b_ii_dont_fold_to_ptrue_overflow() {
255 ; CHECK-LABEL: whilelo_b_ii_dont_fold_to_ptrue_overflow:
256 ; CHECK:       // %bb.0:
257 ; CHECK-NEXT:    mov w8, #6 // =0x6
258 ; CHECK-NEXT:    mov w9, #-1 // =0xffffffff
259 ; CHECK-NEXT:    whilelo p0.b, w9, w8
260 ; CHECK-NEXT:    ret
261   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32 4294967295, i32 6)
262   ret <vscale x 16 x i1> %out
266 ; WHILELS
269 define <vscale x 16 x i1> @whilels_b_ww(i32 %a, i32 %b) {
270 ; CHECK-LABEL: whilels_b_ww:
271 ; CHECK:       // %bb.0:
272 ; CHECK-NEXT:    whilels p0.b, w0, w1
273 ; CHECK-NEXT:    ret
274   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32 %a, i32 %b)
275   ret <vscale x 16 x i1> %out
278 define <vscale x 16 x i1> @whilels_b_xx(i64 %a, i64 %b) {
279 ; CHECK-LABEL: whilels_b_xx:
280 ; CHECK:       // %bb.0:
281 ; CHECK-NEXT:    whilels p0.b, x0, x1
282 ; CHECK-NEXT:    ret
283   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64 %a, i64 %b)
284   ret <vscale x 16 x i1> %out
287 define <vscale x 8 x i1> @whilels_h_ww(i32 %a, i32 %b) {
288 ; CHECK-LABEL: whilels_h_ww:
289 ; CHECK:       // %bb.0:
290 ; CHECK-NEXT:    whilels p0.h, w0, w1
291 ; CHECK-NEXT:    ret
292   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i32(i32 %a, i32 %b)
293   ret <vscale x 8 x i1> %out
296 define <vscale x 8 x i1> @whilels_h_xx(i64 %a, i64 %b) {
297 ; CHECK-LABEL: whilels_h_xx:
298 ; CHECK:       // %bb.0:
299 ; CHECK-NEXT:    whilels p0.h, x0, x1
300 ; CHECK-NEXT:    ret
301   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i64(i64 %a, i64 %b)
302   ret <vscale x 8 x i1> %out
305 define <vscale x 4 x i1> @whilels_s_ww(i32 %a, i32 %b) {
306 ; CHECK-LABEL: whilels_s_ww:
307 ; CHECK:       // %bb.0:
308 ; CHECK-NEXT:    whilels p0.s, w0, w1
309 ; CHECK-NEXT:    ret
310   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i32(i32 %a, i32 %b)
311   ret <vscale x 4 x i1> %out
314 define <vscale x 4 x i1> @whilels_s_xx(i64 %a, i64 %b) {
315 ; CHECK-LABEL: whilels_s_xx:
316 ; CHECK:       // %bb.0:
317 ; CHECK-NEXT:    whilels p0.s, x0, x1
318 ; CHECK-NEXT:    ret
319   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i64(i64 %a, i64 %b)
320   ret <vscale x 4 x i1> %out
323 define <vscale x 2 x i1> @whilels_d_ww(i32 %a, i32 %b) {
324 ; CHECK-LABEL: whilels_d_ww:
325 ; CHECK:       // %bb.0:
326 ; CHECK-NEXT:    whilels p0.d, w0, w1
327 ; CHECK-NEXT:    ret
328   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i32(i32 %a, i32 %b)
329   ret <vscale x 2 x i1> %out
332 define <vscale x 2 x i1> @whilels_d_xx(i64 %a, i64 %b) {
333 ; CHECK-LABEL: whilels_d_xx:
334 ; CHECK:       // %bb.0:
335 ; CHECK-NEXT:    whilels p0.d, x0, x1
336 ; CHECK-NEXT:    ret
337   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i64(i64 %a, i64 %b)
338   ret <vscale x 2 x i1> %out
341 define <vscale x 2 x i1> @whilels_d_ii_dont_fold_to_ptrue_larger_than_minvec() {
342 ; CHECK-LABEL: whilels_d_ii_dont_fold_to_ptrue_larger_than_minvec:
343 ; CHECK:       // %bb.0:
344 ; CHECK-NEXT:    mov w8, #3 // =0x3
345 ; CHECK-NEXT:    whilels p0.d, xzr, x8
346 ; CHECK-NEXT:    ret
347   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i64(i64 0, i64 3)
348   ret <vscale x 2 x i1> %out
351 define <vscale x 16 x i1> @whilels_b_ii() {
352 ; CHECK-LABEL: whilels_b_ii:
353 ; CHECK:       // %bb.0:
354 ; CHECK-NEXT:    ptrue p0.b, vl7
355 ; CHECK-NEXT:    ret
356   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64 2, i64 8)
357   ret <vscale x 16 x i1> %out
360 define <vscale x 16 x i1> @whilels_b_ii_dont_fold_to_ptrue_nonexistent_vl9() {
361 ; CHECK-LABEL: whilels_b_ii_dont_fold_to_ptrue_nonexistent_vl9:
362 ; CHECK:       // %bb.0:
363 ; CHECK-NEXT:    mov w8, #9 // =0x9
364 ; CHECK-NEXT:    whilels p0.b, xzr, x8
365 ; CHECK-NEXT:    ret
366   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64 0, i64 9)
367   ret <vscale x 16 x i1> %out
370 define <vscale x 16 x i1> @whilels_b_ii_vl_maximum() vscale_range(16, 16) {
371 ; CHECK-LABEL: whilels_b_ii_vl_maximum:
372 ; CHECK:       // %bb.0:
373 ; CHECK-NEXT:    ptrue p0.b, vl256
374 ; CHECK-NEXT:    ret
375   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64 0, i64 255)
376   ret <vscale x 16 x i1> %out
379 define <vscale x 16 x i1> @whilels_b_ii_dont_fold_to_ptrue_overflow() {
380 ; CHECK-LABEL: whilels_b_ii_dont_fold_to_ptrue_overflow:
381 ; CHECK:       // %bb.0:
382 ; CHECK-NEXT:    mov w8, #6 // =0x6
383 ; CHECK-NEXT:    mov w9, #-1 // =0xffffffff
384 ; CHECK-NEXT:    whilels p0.b, w9, w8
385 ; CHECK-NEXT:    ret
386   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32 4294967295, i32 6)
387   ret <vscale x 16 x i1> %out
390 define <vscale x 16 x i1> @whilels_b_ii_known_always_true() {
391 ; CHECK-LABEL: whilels_b_ii_known_always_true:
392 ; CHECK:       // %bb.0:
393 ; CHECK-NEXT:    ptrue p0.b
394 ; CHECK-NEXT:    ret
395   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32 4294967294, i32 4294967295)
396   ret <vscale x 16 x i1> %out
400 ; WHILELT
403 define <vscale x 16 x i1> @whilelt_b_ww(i32 %a, i32 %b) {
404 ; CHECK-LABEL: whilelt_b_ww:
405 ; CHECK:       // %bb.0:
406 ; CHECK-NEXT:    whilelt p0.b, w0, w1
407 ; CHECK-NEXT:    ret
408   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i32(i32 %a, i32 %b)
409   ret <vscale x 16 x i1> %out
412 define <vscale x 16 x i1> @whilelt_b_xx(i64 %a, i64 %b) {
413 ; CHECK-LABEL: whilelt_b_xx:
414 ; CHECK:       // %bb.0:
415 ; CHECK-NEXT:    whilelt p0.b, x0, x1
416 ; CHECK-NEXT:    ret
417   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64 %a, i64 %b)
418   ret <vscale x 16 x i1> %out
421 define <vscale x 8 x i1> @whilelt_h_ww(i32 %a, i32 %b) {
422 ; CHECK-LABEL: whilelt_h_ww:
423 ; CHECK:       // %bb.0:
424 ; CHECK-NEXT:    whilelt p0.h, w0, w1
425 ; CHECK-NEXT:    ret
426   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i32(i32 %a, i32 %b)
427   ret <vscale x 8 x i1> %out
430 define <vscale x 8 x i1> @whilelt_h_xx(i64 %a, i64 %b) {
431 ; CHECK-LABEL: whilelt_h_xx:
432 ; CHECK:       // %bb.0:
433 ; CHECK-NEXT:    whilelt p0.h, x0, x1
434 ; CHECK-NEXT:    ret
435   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i64(i64 %a, i64 %b)
436   ret <vscale x 8 x i1> %out
439 define <vscale x 4 x i1> @whilelt_s_ww(i32 %a, i32 %b) {
440 ; CHECK-LABEL: whilelt_s_ww:
441 ; CHECK:       // %bb.0:
442 ; CHECK-NEXT:    whilelt p0.s, w0, w1
443 ; CHECK-NEXT:    ret
444   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i32(i32 %a, i32 %b)
445   ret <vscale x 4 x i1> %out
448 define <vscale x 4 x i1> @whilelt_s_xx(i64 %a, i64 %b) {
449 ; CHECK-LABEL: whilelt_s_xx:
450 ; CHECK:       // %bb.0:
451 ; CHECK-NEXT:    whilelt p0.s, x0, x1
452 ; CHECK-NEXT:    ret
453   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i64(i64 %a, i64 %b)
454   ret <vscale x 4 x i1> %out
457 define <vscale x 2 x i1> @whilelt_d_ww(i32 %a, i32 %b) {
458 ; CHECK-LABEL: whilelt_d_ww:
459 ; CHECK:       // %bb.0:
460 ; CHECK-NEXT:    whilelt p0.d, w0, w1
461 ; CHECK-NEXT:    ret
462   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i32(i32 %a, i32 %b)
463   ret <vscale x 2 x i1> %out
466 define <vscale x 2 x i1> @whilelt_d_xx(i64 %a, i64 %b) {
467 ; CHECK-LABEL: whilelt_d_xx:
468 ; CHECK:       // %bb.0:
469 ; CHECK-NEXT:    whilelt p0.d, x0, x1
470 ; CHECK-NEXT:    ret
471   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i64(i64 %a, i64 %b)
472   ret <vscale x 2 x i1> %out
475 define <vscale x 2 x i1> @whilelt_d_ii_dont_fold_to_ptrue_larger_than_minvec() {
476 ; CHECK-LABEL: whilelt_d_ii_dont_fold_to_ptrue_larger_than_minvec:
477 ; CHECK:       // %bb.0:
478 ; CHECK-NEXT:    mov w8, #3 // =0x3
479 ; CHECK-NEXT:    whilelt p0.d, xzr, x8
480 ; CHECK-NEXT:    ret
481   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i64(i64 0, i64 3)
482   ret <vscale x 2 x i1> %out
485 define <vscale x 16 x i1> @whilelt_b_ii() {
486 ; CHECK-LABEL: whilelt_b_ii:
487 ; CHECK:       // %bb.0:
488 ; CHECK-NEXT:    ptrue p0.b, vl5
489 ; CHECK-NEXT:    ret
490   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64 -2, i64 3)
491   ret <vscale x 16 x i1> %out
494 define <vscale x 16 x i1> @whilelt_b_ii_dont_fold_to_ptrue_nonexistent_vl9() {
495 ; CHECK-LABEL: whilelt_b_ii_dont_fold_to_ptrue_nonexistent_vl9:
496 ; CHECK:       // %bb.0:
497 ; CHECK-NEXT:    mov w8, #9 // =0x9
498 ; CHECK-NEXT:    whilelt p0.b, xzr, x8
499 ; CHECK-NEXT:    ret
500   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64 0, i64 9)
501   ret <vscale x 16 x i1> %out
504 define <vscale x 16 x i1> @whilelt_b_ii_vl_maximum() vscale_range(16, 16) {
505 ; CHECK-LABEL: whilelt_b_ii_vl_maximum:
506 ; CHECK:       // %bb.0:
507 ; CHECK-NEXT:    ptrue p0.b, vl256
508 ; CHECK-NEXT:    ret
509   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64 0, i64 256)
510   ret <vscale x 16 x i1> %out
513 define <vscale x 16 x i1> @whilelt_b_ii_dont_fold_to_ptrue_overflow() {
514 ; CHECK-LABEL: whilelt_b_ii_dont_fold_to_ptrue_overflow:
515 ; CHECK:       // %bb.0:
516 ; CHECK-NEXT:    mov w8, #2 // =0x2
517 ; CHECK-NEXT:    mov w9, #2147483647 // =0x7fffffff
518 ; CHECK-NEXT:    movk w8, #32768, lsl #16
519 ; CHECK-NEXT:    whilelt p0.b, w9, w8
520 ; CHECK-NEXT:    ret
521   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i32(i32 2147483647, i32 -2147483646)
522   ret <vscale x 16 x i1> %out
525 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32, i32)
526 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64, i64)
527 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i32(i32, i32)
528 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i64(i64, i64)
529 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i32(i32, i32)
530 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i64(i64, i64)
531 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i32(i32, i32)
532 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i64(i64, i64)
534 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32, i32)
535 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64, i64)
536 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i32(i32, i32)
537 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i64(i64, i64)
538 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i32(i32, i32)
539 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i64(i64, i64)
540 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i32(i32, i32)
541 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i64(i64, i64)
543 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32, i32)
544 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64, i64)
545 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i32(i32, i32)
546 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i64(i64, i64)
547 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i32(i32, i32)
548 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i64(i64, i64)
549 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i32(i32, i32)
550 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i64(i64, i64)
552 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i32(i32, i32)
553 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64, i64)
554 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i32(i32, i32)
555 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i64(i64, i64)
556 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i32(i32, i32)
557 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i64(i64, i64)
558 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i32(i32, i32)
559 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i64(i64, i64)