[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vctz.ll
blob5089010e2663a24678fb99e6078c904dffb257ef
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+zvbb \
3 ; RUN:   -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+zvbb \
5 ; RUN:   -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK
7 declare <vscale x 1 x i8> @llvm.riscv.vctz.nxv1i8(
8   <vscale x 1 x i8>,
9   <vscale x 1 x i8>,
10   iXLen);
12 define <vscale x 1 x i8> @intrinsic_vctz_vs_nxv1i8(<vscale x 1 x i8> %0, iXLen %1) nounwind {
13 ; CHECK-LABEL: intrinsic_vctz_vs_nxv1i8:
14 ; CHECK:       # %bb.0: # %entry
15 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
16 ; CHECK-NEXT:    vctz.v v8, v8
17 ; CHECK-NEXT:    ret
18 entry:
19   %a = call <vscale x 1 x i8> @llvm.riscv.vctz.nxv1i8(
20     <vscale x 1 x i8> undef,
21     <vscale x 1 x i8> %0,
22     iXLen %1)
24   ret <vscale x 1 x i8> %a
27 declare <vscale x 1 x i8> @llvm.riscv.vctz.mask.nxv1i8(
28   <vscale x 1 x i8>,
29   <vscale x 1 x i8>,
30   <vscale x 1 x i1>,
31   iXLen,
32   iXLen);
34 define <vscale x 1 x i8> @intrinsic_vctz_mask_vs_nxv1i8(<vscale x 1 x i1> %0, <vscale x 1 x i8> %1, <vscale x 1 x i8> %2, iXLen %3) nounwind {
35 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv1i8:
36 ; CHECK:       # %bb.0: # %entry
37 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, mu
38 ; CHECK-NEXT:    vctz.v v8, v9, v0.t
39 ; CHECK-NEXT:    ret
40 entry:
41   %a = call <vscale x 1 x i8> @llvm.riscv.vctz.mask.nxv1i8(
42     <vscale x 1 x i8> %1,
43     <vscale x 1 x i8> %2,
44     <vscale x 1 x i1> %0,
45     iXLen %3, iXLen 1)
47   ret <vscale x 1 x i8> %a
50 declare <vscale x 2 x i8> @llvm.riscv.vctz.nxv2i8(
51   <vscale x 2 x i8>,
52   <vscale x 2 x i8>,
53   iXLen);
55 define <vscale x 2 x i8> @intrinsic_vctz_vs_nxv2i8(<vscale x 2 x i8> %0, iXLen %1) nounwind {
56 ; CHECK-LABEL: intrinsic_vctz_vs_nxv2i8:
57 ; CHECK:       # %bb.0: # %entry
58 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
59 ; CHECK-NEXT:    vctz.v v8, v8
60 ; CHECK-NEXT:    ret
61 entry:
62   %a = call <vscale x 2 x i8> @llvm.riscv.vctz.nxv2i8(
63     <vscale x 2 x i8> undef,
64     <vscale x 2 x i8> %0,
65     iXLen %1)
67   ret <vscale x 2 x i8> %a
70 declare <vscale x 2 x i8> @llvm.riscv.vctz.mask.nxv2i8(
71   <vscale x 2 x i8>,
72   <vscale x 2 x i8>,
73   <vscale x 2 x i1>,
74   iXLen,
75   iXLen);
77 define <vscale x 2 x i8> @intrinsic_vctz_mask_vs_nxv2i8(<vscale x 2 x i1> %0, <vscale x 2 x i8> %1, <vscale x 2 x i8> %2, iXLen %3) nounwind {
78 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv2i8:
79 ; CHECK:       # %bb.0: # %entry
80 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, mu
81 ; CHECK-NEXT:    vctz.v v8, v9, v0.t
82 ; CHECK-NEXT:    ret
83 entry:
84   %a = call <vscale x 2 x i8> @llvm.riscv.vctz.mask.nxv2i8(
85     <vscale x 2 x i8> %1,
86     <vscale x 2 x i8> %2,
87     <vscale x 2 x i1> %0,
88     iXLen %3, iXLen 1)
90   ret <vscale x 2 x i8> %a
93 declare <vscale x 4 x i8> @llvm.riscv.vctz.nxv4i8(
94   <vscale x 4 x i8>,
95   <vscale x 4 x i8>,
96   iXLen);
98 define <vscale x 4 x i8> @intrinsic_vctz_vs_nxv4i8(<vscale x 4 x i8> %0, iXLen %1) nounwind {
99 ; CHECK-LABEL: intrinsic_vctz_vs_nxv4i8:
100 ; CHECK:       # %bb.0: # %entry
101 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
102 ; CHECK-NEXT:    vctz.v v8, v8
103 ; CHECK-NEXT:    ret
104 entry:
105   %a = call <vscale x 4 x i8> @llvm.riscv.vctz.nxv4i8(
106     <vscale x 4 x i8> undef,
107     <vscale x 4 x i8> %0,
108     iXLen %1)
110   ret <vscale x 4 x i8> %a
113 declare <vscale x 4 x i8> @llvm.riscv.vctz.mask.nxv4i8(
114   <vscale x 4 x i8>,
115   <vscale x 4 x i8>,
116   <vscale x 4 x i1>,
117   iXLen,
118   iXLen);
120 define <vscale x 4 x i8> @intrinsic_vctz_mask_vs_nxv4i8(<vscale x 4 x i1> %0, <vscale x 4 x i8> %1, <vscale x 4 x i8> %2, iXLen %3) nounwind {
121 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv4i8:
122 ; CHECK:       # %bb.0: # %entry
123 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, mu
124 ; CHECK-NEXT:    vctz.v v8, v9, v0.t
125 ; CHECK-NEXT:    ret
126 entry:
127   %a = call <vscale x 4 x i8> @llvm.riscv.vctz.mask.nxv4i8(
128     <vscale x 4 x i8> %1,
129     <vscale x 4 x i8> %2,
130     <vscale x 4 x i1> %0,
131     iXLen %3, iXLen 1)
133   ret <vscale x 4 x i8> %a
136 declare <vscale x 8 x i8> @llvm.riscv.vctz.nxv8i8(
137   <vscale x 8 x i8>,
138   <vscale x 8 x i8>,
139   iXLen);
141 define <vscale x 8 x i8> @intrinsic_vctz_vs_nxv8i8(<vscale x 8 x i8> %0, iXLen %1) nounwind {
142 ; CHECK-LABEL: intrinsic_vctz_vs_nxv8i8:
143 ; CHECK:       # %bb.0: # %entry
144 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
145 ; CHECK-NEXT:    vctz.v v8, v8
146 ; CHECK-NEXT:    ret
147 entry:
148   %a = call <vscale x 8 x i8> @llvm.riscv.vctz.nxv8i8(
149     <vscale x 8 x i8> undef,
150     <vscale x 8 x i8> %0,
151     iXLen %1)
153   ret <vscale x 8 x i8> %a
156 declare <vscale x 8 x i8> @llvm.riscv.vctz.mask.nxv8i8(
157   <vscale x 8 x i8>,
158   <vscale x 8 x i8>,
159   <vscale x 8 x i1>,
160   iXLen,
161   iXLen);
163 define <vscale x 8 x i8> @intrinsic_vctz_mask_vs_nxv8i8(<vscale x 8 x i1> %0, <vscale x 8 x i8> %1, <vscale x 8 x i8> %2, iXLen %3) nounwind {
164 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv8i8:
165 ; CHECK:       # %bb.0: # %entry
166 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, mu
167 ; CHECK-NEXT:    vctz.v v8, v9, v0.t
168 ; CHECK-NEXT:    ret
169 entry:
170   %a = call <vscale x 8 x i8> @llvm.riscv.vctz.mask.nxv8i8(
171     <vscale x 8 x i8> %1,
172     <vscale x 8 x i8> %2,
173     <vscale x 8 x i1> %0,
174     iXLen %3, iXLen 1)
176   ret <vscale x 8 x i8> %a
179 declare <vscale x 16 x i8> @llvm.riscv.vctz.nxv16i8(
180   <vscale x 16 x i8>,
181   <vscale x 16 x i8>,
182   iXLen);
184 define <vscale x 16 x i8> @intrinsic_vctz_vs_nxv16i8(<vscale x 16 x i8> %0, iXLen %1) nounwind {
185 ; CHECK-LABEL: intrinsic_vctz_vs_nxv16i8:
186 ; CHECK:       # %bb.0: # %entry
187 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
188 ; CHECK-NEXT:    vctz.v v8, v8
189 ; CHECK-NEXT:    ret
190 entry:
191   %a = call <vscale x 16 x i8> @llvm.riscv.vctz.nxv16i8(
192     <vscale x 16 x i8> undef,
193     <vscale x 16 x i8> %0,
194     iXLen %1)
196   ret <vscale x 16 x i8> %a
199 declare <vscale x 16 x i8> @llvm.riscv.vctz.mask.nxv16i8(
200   <vscale x 16 x i8>,
201   <vscale x 16 x i8>,
202   <vscale x 16 x i1>,
203   iXLen,
204   iXLen);
206 define <vscale x 16 x i8> @intrinsic_vctz_mask_vs_nxv16i8(<vscale x 16 x i1> %0, <vscale x 16 x i8> %1, <vscale x 16 x i8> %2, iXLen %3) nounwind {
207 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv16i8:
208 ; CHECK:       # %bb.0: # %entry
209 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, mu
210 ; CHECK-NEXT:    vctz.v v8, v10, v0.t
211 ; CHECK-NEXT:    ret
212 entry:
213   %a = call <vscale x 16 x i8> @llvm.riscv.vctz.mask.nxv16i8(
214     <vscale x 16 x i8> %1,
215     <vscale x 16 x i8> %2,
216     <vscale x 16 x i1> %0,
217     iXLen %3, iXLen 1)
219   ret <vscale x 16 x i8> %a
222 declare <vscale x 32 x i8> @llvm.riscv.vctz.nxv32i8(
223   <vscale x 32 x i8>,
224   <vscale x 32 x i8>,
225   iXLen);
227 define <vscale x 32 x i8> @intrinsic_vctz_vs_nxv32i8(<vscale x 32 x i8> %0, iXLen %1) nounwind {
228 ; CHECK-LABEL: intrinsic_vctz_vs_nxv32i8:
229 ; CHECK:       # %bb.0: # %entry
230 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
231 ; CHECK-NEXT:    vctz.v v8, v8
232 ; CHECK-NEXT:    ret
233 entry:
234   %a = call <vscale x 32 x i8> @llvm.riscv.vctz.nxv32i8(
235     <vscale x 32 x i8> undef,
236     <vscale x 32 x i8> %0,
237     iXLen %1)
239   ret <vscale x 32 x i8> %a
242 declare <vscale x 32 x i8> @llvm.riscv.vctz.mask.nxv32i8(
243   <vscale x 32 x i8>,
244   <vscale x 32 x i8>,
245   <vscale x 32 x i1>,
246   iXLen,
247   iXLen);
249 define <vscale x 32 x i8> @intrinsic_vctz_mask_vs_nxv32i8(<vscale x 32 x i1> %0, <vscale x 32 x i8> %1, <vscale x 32 x i8> %2, iXLen %3) nounwind {
250 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv32i8:
251 ; CHECK:       # %bb.0: # %entry
252 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, mu
253 ; CHECK-NEXT:    vctz.v v8, v12, v0.t
254 ; CHECK-NEXT:    ret
255 entry:
256   %a = call <vscale x 32 x i8> @llvm.riscv.vctz.mask.nxv32i8(
257     <vscale x 32 x i8> %1,
258     <vscale x 32 x i8> %2,
259     <vscale x 32 x i1> %0,
260     iXLen %3, iXLen 1)
262   ret <vscale x 32 x i8> %a
265 declare <vscale x 64 x i8> @llvm.riscv.vctz.nxv64i8(
266   <vscale x 64 x i8>,
267   <vscale x 64 x i8>,
268   iXLen);
270 define <vscale x 64 x i8> @intrinsic_vctz_vs_nxv64i8(<vscale x 64 x i8> %0, iXLen %1) nounwind {
271 ; CHECK-LABEL: intrinsic_vctz_vs_nxv64i8:
272 ; CHECK:       # %bb.0: # %entry
273 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
274 ; CHECK-NEXT:    vctz.v v8, v8
275 ; CHECK-NEXT:    ret
276 entry:
277   %a = call <vscale x 64 x i8> @llvm.riscv.vctz.nxv64i8(
278     <vscale x 64 x i8> undef,
279     <vscale x 64 x i8> %0,
280     iXLen %1)
282   ret <vscale x 64 x i8> %a
285 declare <vscale x 64 x i8> @llvm.riscv.vctz.mask.nxv64i8(
286   <vscale x 64 x i8>,
287   <vscale x 64 x i8>,
288   <vscale x 64 x i1>,
289   iXLen,
290   iXLen);
292 define <vscale x 64 x i8> @intrinsic_vctz_mask_vs_nxv64i8(<vscale x 64 x i1> %0, <vscale x 64 x i8> %1, <vscale x 64 x i8> %2, iXLen %3) nounwind {
293 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv64i8:
294 ; CHECK:       # %bb.0: # %entry
295 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, mu
296 ; CHECK-NEXT:    vctz.v v8, v16, v0.t
297 ; CHECK-NEXT:    ret
298 entry:
299   %a = call <vscale x 64 x i8> @llvm.riscv.vctz.mask.nxv64i8(
300     <vscale x 64 x i8> %1,
301     <vscale x 64 x i8> %2,
302     <vscale x 64 x i1> %0,
303     iXLen %3, iXLen 1)
305   ret <vscale x 64 x i8> %a
308 declare <vscale x 1 x i16> @llvm.riscv.vctz.nxv1i16(
309   <vscale x 1 x i16>,
310   <vscale x 1 x i16>,
311   iXLen);
313 define <vscale x 1 x i16> @intrinsic_vctz_vs_nxv1i16(<vscale x 1 x i16> %0, iXLen %1) nounwind {
314 ; CHECK-LABEL: intrinsic_vctz_vs_nxv1i16:
315 ; CHECK:       # %bb.0: # %entry
316 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
317 ; CHECK-NEXT:    vctz.v v8, v8
318 ; CHECK-NEXT:    ret
319 entry:
320   %a = call <vscale x 1 x i16> @llvm.riscv.vctz.nxv1i16(
321     <vscale x 1 x i16> undef,
322     <vscale x 1 x i16> %0,
323     iXLen %1)
325   ret <vscale x 1 x i16> %a
328 declare <vscale x 1 x i16> @llvm.riscv.vctz.mask.nxv1i16(
329   <vscale x 1 x i16>,
330   <vscale x 1 x i16>,
331   <vscale x 1 x i1>,
332   iXLen,
333   iXLen);
335 define <vscale x 1 x i16> @intrinsic_vctz_mask_vs_nxv1i16(<vscale x 1 x i1> %0, <vscale x 1 x i16> %1, <vscale x 1 x i16> %2, iXLen %3) nounwind {
336 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv1i16:
337 ; CHECK:       # %bb.0: # %entry
338 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
339 ; CHECK-NEXT:    vctz.v v8, v9, v0.t
340 ; CHECK-NEXT:    ret
341 entry:
342   %a = call <vscale x 1 x i16> @llvm.riscv.vctz.mask.nxv1i16(
343     <vscale x 1 x i16> %1,
344     <vscale x 1 x i16> %2,
345     <vscale x 1 x i1> %0,
346     iXLen %3, iXLen 1)
348   ret <vscale x 1 x i16> %a
351 declare <vscale x 2 x i16> @llvm.riscv.vctz.nxv2i16(
352   <vscale x 2 x i16>,
353   <vscale x 2 x i16>,
354   iXLen);
356 define <vscale x 2 x i16> @intrinsic_vctz_vs_nxv2i16(<vscale x 2 x i16> %0, iXLen %1) nounwind {
357 ; CHECK-LABEL: intrinsic_vctz_vs_nxv2i16:
358 ; CHECK:       # %bb.0: # %entry
359 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
360 ; CHECK-NEXT:    vctz.v v8, v8
361 ; CHECK-NEXT:    ret
362 entry:
363   %a = call <vscale x 2 x i16> @llvm.riscv.vctz.nxv2i16(
364     <vscale x 2 x i16> undef,
365     <vscale x 2 x i16> %0,
366     iXLen %1)
368   ret <vscale x 2 x i16> %a
371 declare <vscale x 2 x i16> @llvm.riscv.vctz.mask.nxv2i16(
372   <vscale x 2 x i16>,
373   <vscale x 2 x i16>,
374   <vscale x 2 x i1>,
375   iXLen,
376   iXLen);
378 define <vscale x 2 x i16> @intrinsic_vctz_mask_vs_nxv2i16(<vscale x 2 x i1> %0, <vscale x 2 x i16> %1, <vscale x 2 x i16> %2, iXLen %3) nounwind {
379 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv2i16:
380 ; CHECK:       # %bb.0: # %entry
381 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
382 ; CHECK-NEXT:    vctz.v v8, v9, v0.t
383 ; CHECK-NEXT:    ret
384 entry:
385   %a = call <vscale x 2 x i16> @llvm.riscv.vctz.mask.nxv2i16(
386     <vscale x 2 x i16> %1,
387     <vscale x 2 x i16> %2,
388     <vscale x 2 x i1> %0,
389     iXLen %3, iXLen 1)
391   ret <vscale x 2 x i16> %a
394 declare <vscale x 4 x i16> @llvm.riscv.vctz.nxv4i16(
395   <vscale x 4 x i16>,
396   <vscale x 4 x i16>,
397   iXLen);
399 define <vscale x 4 x i16> @intrinsic_vctz_vs_nxv4i16(<vscale x 4 x i16> %0, iXLen %1) nounwind {
400 ; CHECK-LABEL: intrinsic_vctz_vs_nxv4i16:
401 ; CHECK:       # %bb.0: # %entry
402 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
403 ; CHECK-NEXT:    vctz.v v8, v8
404 ; CHECK-NEXT:    ret
405 entry:
406   %a = call <vscale x 4 x i16> @llvm.riscv.vctz.nxv4i16(
407     <vscale x 4 x i16> undef,
408     <vscale x 4 x i16> %0,
409     iXLen %1)
411   ret <vscale x 4 x i16> %a
414 declare <vscale x 4 x i16> @llvm.riscv.vctz.mask.nxv4i16(
415   <vscale x 4 x i16>,
416   <vscale x 4 x i16>,
417   <vscale x 4 x i1>,
418   iXLen,
419   iXLen);
421 define <vscale x 4 x i16> @intrinsic_vctz_mask_vs_nxv4i16(<vscale x 4 x i1> %0, <vscale x 4 x i16> %1, <vscale x 4 x i16> %2, iXLen %3) nounwind {
422 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv4i16:
423 ; CHECK:       # %bb.0: # %entry
424 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
425 ; CHECK-NEXT:    vctz.v v8, v9, v0.t
426 ; CHECK-NEXT:    ret
427 entry:
428   %a = call <vscale x 4 x i16> @llvm.riscv.vctz.mask.nxv4i16(
429     <vscale x 4 x i16> %1,
430     <vscale x 4 x i16> %2,
431     <vscale x 4 x i1> %0,
432     iXLen %3, iXLen 1)
434   ret <vscale x 4 x i16> %a
437 declare <vscale x 8 x i16> @llvm.riscv.vctz.nxv8i16(
438   <vscale x 8 x i16>,
439   <vscale x 8 x i16>,
440   iXLen);
442 define <vscale x 8 x i16> @intrinsic_vctz_vs_nxv8i16(<vscale x 8 x i16> %0, iXLen %1) nounwind {
443 ; CHECK-LABEL: intrinsic_vctz_vs_nxv8i16:
444 ; CHECK:       # %bb.0: # %entry
445 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
446 ; CHECK-NEXT:    vctz.v v8, v8
447 ; CHECK-NEXT:    ret
448 entry:
449   %a = call <vscale x 8 x i16> @llvm.riscv.vctz.nxv8i16(
450     <vscale x 8 x i16> undef,
451     <vscale x 8 x i16> %0,
452     iXLen %1)
454   ret <vscale x 8 x i16> %a
457 declare <vscale x 8 x i16> @llvm.riscv.vctz.mask.nxv8i16(
458   <vscale x 8 x i16>,
459   <vscale x 8 x i16>,
460   <vscale x 8 x i1>,
461   iXLen,
462   iXLen);
464 define <vscale x 8 x i16> @intrinsic_vctz_mask_vs_nxv8i16(<vscale x 8 x i1> %0, <vscale x 8 x i16> %1, <vscale x 8 x i16> %2, iXLen %3) nounwind {
465 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv8i16:
466 ; CHECK:       # %bb.0: # %entry
467 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
468 ; CHECK-NEXT:    vctz.v v8, v10, v0.t
469 ; CHECK-NEXT:    ret
470 entry:
471   %a = call <vscale x 8 x i16> @llvm.riscv.vctz.mask.nxv8i16(
472     <vscale x 8 x i16> %1,
473     <vscale x 8 x i16> %2,
474     <vscale x 8 x i1> %0,
475     iXLen %3, iXLen 1)
477   ret <vscale x 8 x i16> %a
480 declare <vscale x 16 x i16> @llvm.riscv.vctz.nxv16i16(
481   <vscale x 16 x i16>,
482   <vscale x 16 x i16>,
483   iXLen);
485 define <vscale x 16 x i16> @intrinsic_vctz_vs_nxv16i16(<vscale x 16 x i16> %0, iXLen %1) nounwind {
486 ; CHECK-LABEL: intrinsic_vctz_vs_nxv16i16:
487 ; CHECK:       # %bb.0: # %entry
488 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
489 ; CHECK-NEXT:    vctz.v v8, v8
490 ; CHECK-NEXT:    ret
491 entry:
492   %a = call <vscale x 16 x i16> @llvm.riscv.vctz.nxv16i16(
493     <vscale x 16 x i16> undef,
494     <vscale x 16 x i16> %0,
495     iXLen %1)
497   ret <vscale x 16 x i16> %a
500 declare <vscale x 16 x i16> @llvm.riscv.vctz.mask.nxv16i16(
501   <vscale x 16 x i16>,
502   <vscale x 16 x i16>,
503   <vscale x 16 x i1>,
504   iXLen,
505   iXLen);
507 define <vscale x 16 x i16> @intrinsic_vctz_mask_vs_nxv16i16(<vscale x 16 x i1> %0, <vscale x 16 x i16> %1, <vscale x 16 x i16> %2, iXLen %3) nounwind {
508 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv16i16:
509 ; CHECK:       # %bb.0: # %entry
510 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
511 ; CHECK-NEXT:    vctz.v v8, v12, v0.t
512 ; CHECK-NEXT:    ret
513 entry:
514   %a = call <vscale x 16 x i16> @llvm.riscv.vctz.mask.nxv16i16(
515     <vscale x 16 x i16> %1,
516     <vscale x 16 x i16> %2,
517     <vscale x 16 x i1> %0,
518     iXLen %3, iXLen 1)
520   ret <vscale x 16 x i16> %a
523 declare <vscale x 32 x i16> @llvm.riscv.vctz.nxv32i16(
524   <vscale x 32 x i16>,
525   <vscale x 32 x i16>,
526   iXLen);
528 define <vscale x 32 x i16> @intrinsic_vctz_vs_nxv32i16(<vscale x 32 x i16> %0, iXLen %1) nounwind {
529 ; CHECK-LABEL: intrinsic_vctz_vs_nxv32i16:
530 ; CHECK:       # %bb.0: # %entry
531 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
532 ; CHECK-NEXT:    vctz.v v8, v8
533 ; CHECK-NEXT:    ret
534 entry:
535   %a = call <vscale x 32 x i16> @llvm.riscv.vctz.nxv32i16(
536     <vscale x 32 x i16> undef,
537     <vscale x 32 x i16> %0,
538     iXLen %1)
540   ret <vscale x 32 x i16> %a
543 declare <vscale x 32 x i16> @llvm.riscv.vctz.mask.nxv32i16(
544   <vscale x 32 x i16>,
545   <vscale x 32 x i16>,
546   <vscale x 32 x i1>,
547   iXLen,
548   iXLen);
550 define <vscale x 32 x i16> @intrinsic_vctz_mask_vs_nxv32i16(<vscale x 32 x i1> %0, <vscale x 32 x i16> %1, <vscale x 32 x i16> %2, iXLen %3) nounwind {
551 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv32i16:
552 ; CHECK:       # %bb.0: # %entry
553 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, mu
554 ; CHECK-NEXT:    vctz.v v8, v16, v0.t
555 ; CHECK-NEXT:    ret
556 entry:
557   %a = call <vscale x 32 x i16> @llvm.riscv.vctz.mask.nxv32i16(
558     <vscale x 32 x i16> %1,
559     <vscale x 32 x i16> %2,
560     <vscale x 32 x i1> %0,
561     iXLen %3, iXLen 1)
563   ret <vscale x 32 x i16> %a
566 declare <vscale x 1 x i32> @llvm.riscv.vctz.nxv1i32(
567   <vscale x 1 x i32>,
568   <vscale x 1 x i32>,
569   iXLen);
571 define <vscale x 1 x i32> @intrinsic_vctz_vs_nxv1i32(<vscale x 1 x i32> %0, iXLen %1) nounwind {
572 ; CHECK-LABEL: intrinsic_vctz_vs_nxv1i32:
573 ; CHECK:       # %bb.0: # %entry
574 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
575 ; CHECK-NEXT:    vctz.v v8, v8
576 ; CHECK-NEXT:    ret
577 entry:
578   %a = call <vscale x 1 x i32> @llvm.riscv.vctz.nxv1i32(
579     <vscale x 1 x i32> undef,
580     <vscale x 1 x i32> %0,
581     iXLen %1)
583   ret <vscale x 1 x i32> %a
586 declare <vscale x 1 x i32> @llvm.riscv.vctz.mask.nxv1i32(
587   <vscale x 1 x i32>,
588   <vscale x 1 x i32>,
589   <vscale x 1 x i1>,
590   iXLen,
591   iXLen);
593 define <vscale x 1 x i32> @intrinsic_vctz_mask_vs_nxv1i32(<vscale x 1 x i1> %0, <vscale x 1 x i32> %1, <vscale x 1 x i32> %2, iXLen %3) nounwind {
594 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv1i32:
595 ; CHECK:       # %bb.0: # %entry
596 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
597 ; CHECK-NEXT:    vctz.v v8, v9, v0.t
598 ; CHECK-NEXT:    ret
599 entry:
600   %a = call <vscale x 1 x i32> @llvm.riscv.vctz.mask.nxv1i32(
601     <vscale x 1 x i32> %1,
602     <vscale x 1 x i32> %2,
603     <vscale x 1 x i1> %0,
604     iXLen %3, iXLen 1)
606   ret <vscale x 1 x i32> %a
609 declare <vscale x 2 x i32> @llvm.riscv.vctz.nxv2i32(
610   <vscale x 2 x i32>,
611   <vscale x 2 x i32>,
612   iXLen);
614 define <vscale x 2 x i32> @intrinsic_vctz_vs_nxv2i32(<vscale x 2 x i32> %0, iXLen %1) nounwind {
615 ; CHECK-LABEL: intrinsic_vctz_vs_nxv2i32:
616 ; CHECK:       # %bb.0: # %entry
617 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
618 ; CHECK-NEXT:    vctz.v v8, v8
619 ; CHECK-NEXT:    ret
620 entry:
621   %a = call <vscale x 2 x i32> @llvm.riscv.vctz.nxv2i32(
622     <vscale x 2 x i32> undef,
623     <vscale x 2 x i32> %0,
624     iXLen %1)
626   ret <vscale x 2 x i32> %a
629 declare <vscale x 2 x i32> @llvm.riscv.vctz.mask.nxv2i32(
630   <vscale x 2 x i32>,
631   <vscale x 2 x i32>,
632   <vscale x 2 x i1>,
633   iXLen,
634   iXLen);
636 define <vscale x 2 x i32> @intrinsic_vctz_mask_vs_nxv2i32(<vscale x 2 x i1> %0, <vscale x 2 x i32> %1, <vscale x 2 x i32> %2, iXLen %3) nounwind {
637 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv2i32:
638 ; CHECK:       # %bb.0: # %entry
639 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
640 ; CHECK-NEXT:    vctz.v v8, v9, v0.t
641 ; CHECK-NEXT:    ret
642 entry:
643   %a = call <vscale x 2 x i32> @llvm.riscv.vctz.mask.nxv2i32(
644     <vscale x 2 x i32> %1,
645     <vscale x 2 x i32> %2,
646     <vscale x 2 x i1> %0,
647     iXLen %3, iXLen 1)
649   ret <vscale x 2 x i32> %a
652 declare <vscale x 4 x i32> @llvm.riscv.vctz.nxv4i32(
653   <vscale x 4 x i32>,
654   <vscale x 4 x i32>,
655   iXLen);
657 define <vscale x 4 x i32> @intrinsic_vctz_vs_nxv4i32(<vscale x 4 x i32> %0, iXLen %1) nounwind {
658 ; CHECK-LABEL: intrinsic_vctz_vs_nxv4i32:
659 ; CHECK:       # %bb.0: # %entry
660 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
661 ; CHECK-NEXT:    vctz.v v8, v8
662 ; CHECK-NEXT:    ret
663 entry:
664   %a = call <vscale x 4 x i32> @llvm.riscv.vctz.nxv4i32(
665     <vscale x 4 x i32> undef,
666     <vscale x 4 x i32> %0,
667     iXLen %1)
669   ret <vscale x 4 x i32> %a
672 declare <vscale x 4 x i32> @llvm.riscv.vctz.mask.nxv4i32(
673   <vscale x 4 x i32>,
674   <vscale x 4 x i32>,
675   <vscale x 4 x i1>,
676   iXLen,
677   iXLen);
679 define <vscale x 4 x i32> @intrinsic_vctz_mask_vs_nxv4i32(<vscale x 4 x i1> %0, <vscale x 4 x i32> %1, <vscale x 4 x i32> %2, iXLen %3) nounwind {
680 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv4i32:
681 ; CHECK:       # %bb.0: # %entry
682 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
683 ; CHECK-NEXT:    vctz.v v8, v10, v0.t
684 ; CHECK-NEXT:    ret
685 entry:
686   %a = call <vscale x 4 x i32> @llvm.riscv.vctz.mask.nxv4i32(
687     <vscale x 4 x i32> %1,
688     <vscale x 4 x i32> %2,
689     <vscale x 4 x i1> %0,
690     iXLen %3, iXLen 1)
692   ret <vscale x 4 x i32> %a
695 declare <vscale x 8 x i32> @llvm.riscv.vctz.nxv8i32(
696   <vscale x 8 x i32>,
697   <vscale x 8 x i32>,
698   iXLen);
700 define <vscale x 8 x i32> @intrinsic_vctz_vs_nxv8i32(<vscale x 8 x i32> %0, iXLen %1) nounwind {
701 ; CHECK-LABEL: intrinsic_vctz_vs_nxv8i32:
702 ; CHECK:       # %bb.0: # %entry
703 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
704 ; CHECK-NEXT:    vctz.v v8, v8
705 ; CHECK-NEXT:    ret
706 entry:
707   %a = call <vscale x 8 x i32> @llvm.riscv.vctz.nxv8i32(
708     <vscale x 8 x i32> undef,
709     <vscale x 8 x i32> %0,
710     iXLen %1)
712   ret <vscale x 8 x i32> %a
715 declare <vscale x 8 x i32> @llvm.riscv.vctz.mask.nxv8i32(
716   <vscale x 8 x i32>,
717   <vscale x 8 x i32>,
718   <vscale x 8 x i1>,
719   iXLen,
720   iXLen);
722 define <vscale x 8 x i32> @intrinsic_vctz_mask_vs_nxv8i32(<vscale x 8 x i1> %0, <vscale x 8 x i32> %1, <vscale x 8 x i32> %2, iXLen %3) nounwind {
723 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv8i32:
724 ; CHECK:       # %bb.0: # %entry
725 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
726 ; CHECK-NEXT:    vctz.v v8, v12, v0.t
727 ; CHECK-NEXT:    ret
728 entry:
729   %a = call <vscale x 8 x i32> @llvm.riscv.vctz.mask.nxv8i32(
730     <vscale x 8 x i32> %1,
731     <vscale x 8 x i32> %2,
732     <vscale x 8 x i1> %0,
733     iXLen %3, iXLen 1)
735   ret <vscale x 8 x i32> %a
738 declare <vscale x 16 x i32> @llvm.riscv.vctz.nxv16i32(
739   <vscale x 16 x i32>,
740   <vscale x 16 x i32>,
741   iXLen);
743 define <vscale x 16 x i32> @intrinsic_vctz_vs_nxv16i32(<vscale x 16 x i32> %0, iXLen %1) nounwind {
744 ; CHECK-LABEL: intrinsic_vctz_vs_nxv16i32:
745 ; CHECK:       # %bb.0: # %entry
746 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
747 ; CHECK-NEXT:    vctz.v v8, v8
748 ; CHECK-NEXT:    ret
749 entry:
750   %a = call <vscale x 16 x i32> @llvm.riscv.vctz.nxv16i32(
751     <vscale x 16 x i32> undef,
752     <vscale x 16 x i32> %0,
753     iXLen %1)
755   ret <vscale x 16 x i32> %a
758 declare <vscale x 16 x i32> @llvm.riscv.vctz.mask.nxv16i32(
759   <vscale x 16 x i32>,
760   <vscale x 16 x i32>,
761   <vscale x 16 x i1>,
762   iXLen,
763   iXLen);
765 define <vscale x 16 x i32> @intrinsic_vctz_mask_vs_nxv16i32(<vscale x 16 x i1> %0, <vscale x 16 x i32> %1, <vscale x 16 x i32> %2, iXLen %3) nounwind {
766 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv16i32:
767 ; CHECK:       # %bb.0: # %entry
768 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, mu
769 ; CHECK-NEXT:    vctz.v v8, v16, v0.t
770 ; CHECK-NEXT:    ret
771 entry:
772   %a = call <vscale x 16 x i32> @llvm.riscv.vctz.mask.nxv16i32(
773     <vscale x 16 x i32> %1,
774     <vscale x 16 x i32> %2,
775     <vscale x 16 x i1> %0,
776     iXLen %3, iXLen 1)
778   ret <vscale x 16 x i32> %a
781 declare <vscale x 1 x i64> @llvm.riscv.vctz.nxv1i64(
782   <vscale x 1 x i64>,
783   <vscale x 1 x i64>,
784   iXLen);
786 define <vscale x 1 x i64> @intrinsic_vctz_vs_nxv1i64(<vscale x 1 x i64> %0, iXLen %1) nounwind {
787 ; CHECK-LABEL: intrinsic_vctz_vs_nxv1i64:
788 ; CHECK:       # %bb.0: # %entry
789 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
790 ; CHECK-NEXT:    vctz.v v8, v8
791 ; CHECK-NEXT:    ret
792 entry:
793   %a = call <vscale x 1 x i64> @llvm.riscv.vctz.nxv1i64(
794     <vscale x 1 x i64> undef,
795     <vscale x 1 x i64> %0,
796     iXLen %1)
798   ret <vscale x 1 x i64> %a
801 declare <vscale x 1 x i64> @llvm.riscv.vctz.mask.nxv1i64(
802   <vscale x 1 x i64>,
803   <vscale x 1 x i64>,
804   <vscale x 1 x i1>,
805   iXLen,
806   iXLen);
808 define <vscale x 1 x i64> @intrinsic_vctz_mask_vs_nxv1i64(<vscale x 1 x i1> %0, <vscale x 1 x i64> %1, <vscale x 1 x i64> %2, iXLen %3) nounwind {
809 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv1i64:
810 ; CHECK:       # %bb.0: # %entry
811 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
812 ; CHECK-NEXT:    vctz.v v8, v9, v0.t
813 ; CHECK-NEXT:    ret
814 entry:
815   %a = call <vscale x 1 x i64> @llvm.riscv.vctz.mask.nxv1i64(
816     <vscale x 1 x i64> %1,
817     <vscale x 1 x i64> %2,
818     <vscale x 1 x i1> %0,
819     iXLen %3, iXLen 1)
821   ret <vscale x 1 x i64> %a
824 declare <vscale x 2 x i64> @llvm.riscv.vctz.nxv2i64(
825   <vscale x 2 x i64>,
826   <vscale x 2 x i64>,
827   iXLen);
829 define <vscale x 2 x i64> @intrinsic_vctz_vs_nxv2i64(<vscale x 2 x i64> %0, iXLen %1) nounwind {
830 ; CHECK-LABEL: intrinsic_vctz_vs_nxv2i64:
831 ; CHECK:       # %bb.0: # %entry
832 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
833 ; CHECK-NEXT:    vctz.v v8, v8
834 ; CHECK-NEXT:    ret
835 entry:
836   %a = call <vscale x 2 x i64> @llvm.riscv.vctz.nxv2i64(
837     <vscale x 2 x i64> undef,
838     <vscale x 2 x i64> %0,
839     iXLen %1)
841   ret <vscale x 2 x i64> %a
844 declare <vscale x 2 x i64> @llvm.riscv.vctz.mask.nxv2i64(
845   <vscale x 2 x i64>,
846   <vscale x 2 x i64>,
847   <vscale x 2 x i1>,
848   iXLen,
849   iXLen);
851 define <vscale x 2 x i64> @intrinsic_vctz_mask_vs_nxv2i64(<vscale x 2 x i1> %0, <vscale x 2 x i64> %1, <vscale x 2 x i64> %2, iXLen %3) nounwind {
852 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv2i64:
853 ; CHECK:       # %bb.0: # %entry
854 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
855 ; CHECK-NEXT:    vctz.v v8, v10, v0.t
856 ; CHECK-NEXT:    ret
857 entry:
858   %a = call <vscale x 2 x i64> @llvm.riscv.vctz.mask.nxv2i64(
859     <vscale x 2 x i64> %1,
860     <vscale x 2 x i64> %2,
861     <vscale x 2 x i1> %0,
862     iXLen %3, iXLen 1)
864   ret <vscale x 2 x i64> %a
867 declare <vscale x 4 x i64> @llvm.riscv.vctz.nxv4i64(
868   <vscale x 4 x i64>,
869   <vscale x 4 x i64>,
870   iXLen);
872 define <vscale x 4 x i64> @intrinsic_vctz_vs_nxv4i64(<vscale x 4 x i64> %0, iXLen %1) nounwind {
873 ; CHECK-LABEL: intrinsic_vctz_vs_nxv4i64:
874 ; CHECK:       # %bb.0: # %entry
875 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
876 ; CHECK-NEXT:    vctz.v v8, v8
877 ; CHECK-NEXT:    ret
878 entry:
879   %a = call <vscale x 4 x i64> @llvm.riscv.vctz.nxv4i64(
880     <vscale x 4 x i64> undef,
881     <vscale x 4 x i64> %0,
882     iXLen %1)
884   ret <vscale x 4 x i64> %a
887 declare <vscale x 4 x i64> @llvm.riscv.vctz.mask.nxv4i64(
888   <vscale x 4 x i64>,
889   <vscale x 4 x i64>,
890   <vscale x 4 x i1>,
891   iXLen,
892   iXLen);
894 define <vscale x 4 x i64> @intrinsic_vctz_mask_vs_nxv4i64(<vscale x 4 x i1> %0, <vscale x 4 x i64> %1, <vscale x 4 x i64> %2, iXLen %3) nounwind {
895 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv4i64:
896 ; CHECK:       # %bb.0: # %entry
897 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
898 ; CHECK-NEXT:    vctz.v v8, v12, v0.t
899 ; CHECK-NEXT:    ret
900 entry:
901   %a = call <vscale x 4 x i64> @llvm.riscv.vctz.mask.nxv4i64(
902     <vscale x 4 x i64> %1,
903     <vscale x 4 x i64> %2,
904     <vscale x 4 x i1> %0,
905     iXLen %3, iXLen 1)
907   ret <vscale x 4 x i64> %a
910 declare <vscale x 8 x i64> @llvm.riscv.vctz.nxv8i64(
911   <vscale x 8 x i64>,
912   <vscale x 8 x i64>,
913   iXLen);
915 define <vscale x 8 x i64> @intrinsic_vctz_vs_nxv8i64(<vscale x 8 x i64> %0, iXLen %1) nounwind {
916 ; CHECK-LABEL: intrinsic_vctz_vs_nxv8i64:
917 ; CHECK:       # %bb.0: # %entry
918 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
919 ; CHECK-NEXT:    vctz.v v8, v8
920 ; CHECK-NEXT:    ret
921 entry:
922   %a = call <vscale x 8 x i64> @llvm.riscv.vctz.nxv8i64(
923     <vscale x 8 x i64> undef,
924     <vscale x 8 x i64> %0,
925     iXLen %1)
927   ret <vscale x 8 x i64> %a
930 declare <vscale x 8 x i64> @llvm.riscv.vctz.mask.nxv8i64(
931   <vscale x 8 x i64>,
932   <vscale x 8 x i64>,
933   <vscale x 8 x i1>,
934   iXLen,
935   iXLen);
937 define <vscale x 8 x i64> @intrinsic_vctz_mask_vs_nxv8i64(<vscale x 8 x i1> %0, <vscale x 8 x i64> %1, <vscale x 8 x i64> %2, iXLen %3) nounwind {
938 ; CHECK-LABEL: intrinsic_vctz_mask_vs_nxv8i64:
939 ; CHECK:       # %bb.0: # %entry
940 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, mu
941 ; CHECK-NEXT:    vctz.v v8, v16, v0.t
942 ; CHECK-NEXT:    ret
943 entry:
944   %a = call <vscale x 8 x i64> @llvm.riscv.vctz.mask.nxv8i64(
945     <vscale x 8 x i64> %1,
946     <vscale x 8 x i64> %2,
947     <vscale x 8 x i1> %0,
948     iXLen %3, iXLen 1)
950   ret <vscale x 8 x i64> %a