[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / viota.ll
blobdc88c3ff58cfa057daf43cd36e12cc9da828c118
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 \
3 ; RUN:   -verify-machineinstrs | FileCheck %s
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v \
5 ; RUN:   -verify-machineinstrs | FileCheck %s
7 declare <vscale x 1 x i8> @llvm.riscv.viota.nxv1i8(
8   <vscale x 1 x i8>,
9   <vscale x 1 x i1>,
10   iXLen);
12 define <vscale x 1 x i8> @intrinsic_viota_m_nxv1i8_nxv1i1(<vscale x 1 x i1> %0, iXLen %1) nounwind {
13 ; CHECK-LABEL: intrinsic_viota_m_nxv1i8_nxv1i1:
14 ; CHECK:       # %bb.0: # %entry
15 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
16 ; CHECK-NEXT:    viota.m v8, v0
17 ; CHECK-NEXT:    ret
18 entry:
19   %a = call <vscale x 1 x i8> @llvm.riscv.viota.nxv1i8(
20     <vscale x 1 x i8> undef,
21     <vscale x 1 x i1> %0,
22     iXLen %1)
24   ret <vscale x 1 x i8> %a
27 declare <vscale x 1 x i8> @llvm.riscv.viota.mask.nxv1i8(
28   <vscale x 1 x i8>,
29   <vscale x 1 x i1>,
30   <vscale x 1 x i1>,
31   iXLen, iXLen);
33 define <vscale x 1 x i8> @intrinsic_viota_mask_m_nxv1i8_nxv1i1(<vscale x 1 x i8> %0, <vscale x 1 x i1> %1, iXLen %2) nounwind {
34 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv1i8_nxv1i1:
35 ; CHECK:       # %bb.0: # %entry
36 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, tu, mu
37 ; CHECK-NEXT:    viota.m v8, v0, v0.t
38 ; CHECK-NEXT:    ret
39 entry:
40   %a = call <vscale x 1 x i8> @llvm.riscv.viota.mask.nxv1i8(
41     <vscale x 1 x i8> %0,
42     <vscale x 1 x i1> %1,
43     <vscale x 1 x i1> %1,
44     iXLen %2, iXLen 0)
46   ret <vscale x 1 x i8> %a
49 declare <vscale x 2 x i8> @llvm.riscv.viota.nxv2i8(
50   <vscale x 2 x i8>,
51   <vscale x 2 x i1>,
52   iXLen);
54 define <vscale x 2 x i8> @intrinsic_viota_m_nxv2i8_nxv2i1(<vscale x 2 x i1> %0, iXLen %1) nounwind {
55 ; CHECK-LABEL: intrinsic_viota_m_nxv2i8_nxv2i1:
56 ; CHECK:       # %bb.0: # %entry
57 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
58 ; CHECK-NEXT:    viota.m v8, v0
59 ; CHECK-NEXT:    ret
60 entry:
61   %a = call <vscale x 2 x i8> @llvm.riscv.viota.nxv2i8(
62     <vscale x 2 x i8> undef,
63     <vscale x 2 x i1> %0,
64     iXLen %1)
66   ret <vscale x 2 x i8> %a
69 declare <vscale x 2 x i8> @llvm.riscv.viota.mask.nxv2i8(
70   <vscale x 2 x i8>,
71   <vscale x 2 x i1>,
72   <vscale x 2 x i1>,
73   iXLen, iXLen);
75 define <vscale x 2 x i8> @intrinsic_viota_mask_m_nxv2i8_nxv2i1(<vscale x 2 x i8> %0, <vscale x 2 x i1> %1, iXLen %2) nounwind {
76 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv2i8_nxv2i1:
77 ; CHECK:       # %bb.0: # %entry
78 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, tu, mu
79 ; CHECK-NEXT:    viota.m v8, v0, v0.t
80 ; CHECK-NEXT:    ret
81 entry:
82   %a = call <vscale x 2 x i8> @llvm.riscv.viota.mask.nxv2i8(
83     <vscale x 2 x i8> %0,
84     <vscale x 2 x i1> %1,
85     <vscale x 2 x i1> %1,
86     iXLen %2, iXLen 0)
88   ret <vscale x 2 x i8> %a
91 declare <vscale x 4 x i8> @llvm.riscv.viota.nxv4i8(
92   <vscale x 4 x i8>,
93   <vscale x 4 x i1>,
94   iXLen);
96 define <vscale x 4 x i8> @intrinsic_viota_m_nxv4i8_nxv4i1(<vscale x 4 x i1> %0, iXLen %1) nounwind {
97 ; CHECK-LABEL: intrinsic_viota_m_nxv4i8_nxv4i1:
98 ; CHECK:       # %bb.0: # %entry
99 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
100 ; CHECK-NEXT:    viota.m v8, v0
101 ; CHECK-NEXT:    ret
102 entry:
103   %a = call <vscale x 4 x i8> @llvm.riscv.viota.nxv4i8(
104     <vscale x 4 x i8> undef,
105     <vscale x 4 x i1> %0,
106     iXLen %1)
108   ret <vscale x 4 x i8> %a
111 declare <vscale x 4 x i8> @llvm.riscv.viota.mask.nxv4i8(
112   <vscale x 4 x i8>,
113   <vscale x 4 x i1>,
114   <vscale x 4 x i1>,
115   iXLen, iXLen);
117 define <vscale x 4 x i8> @intrinsic_viota_mask_m_nxv4i8_nxv4i1(<vscale x 4 x i8> %0, <vscale x 4 x i1> %1, iXLen %2) nounwind {
118 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv4i8_nxv4i1:
119 ; CHECK:       # %bb.0: # %entry
120 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, mu
121 ; CHECK-NEXT:    viota.m v8, v0, v0.t
122 ; CHECK-NEXT:    ret
123 entry:
124   %a = call <vscale x 4 x i8> @llvm.riscv.viota.mask.nxv4i8(
125     <vscale x 4 x i8> %0,
126     <vscale x 4 x i1> %1,
127     <vscale x 4 x i1> %1,
128     iXLen %2, iXLen 0)
130   ret <vscale x 4 x i8> %a
133 declare <vscale x 8 x i8> @llvm.riscv.viota.nxv8i8(
134   <vscale x 8 x i8>,
135   <vscale x 8 x i1>,
136   iXLen);
138 define <vscale x 8 x i8> @intrinsic_viota_m_nxv8i8_nxv8i1(<vscale x 8 x i1> %0, iXLen %1) nounwind {
139 ; CHECK-LABEL: intrinsic_viota_m_nxv8i8_nxv8i1:
140 ; CHECK:       # %bb.0: # %entry
141 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
142 ; CHECK-NEXT:    viota.m v8, v0
143 ; CHECK-NEXT:    ret
144 entry:
145   %a = call <vscale x 8 x i8> @llvm.riscv.viota.nxv8i8(
146     <vscale x 8 x i8> undef,
147     <vscale x 8 x i1> %0,
148     iXLen %1)
150   ret <vscale x 8 x i8> %a
153 declare <vscale x 8 x i8> @llvm.riscv.viota.mask.nxv8i8(
154   <vscale x 8 x i8>,
155   <vscale x 8 x i1>,
156   <vscale x 8 x i1>,
157   iXLen, iXLen);
159 define <vscale x 8 x i8> @intrinsic_viota_mask_m_nxv8i8_nxv8i1(<vscale x 8 x i8> %0, <vscale x 8 x i1> %1, iXLen %2) nounwind {
160 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv8i8_nxv8i1:
161 ; CHECK:       # %bb.0: # %entry
162 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, tu, mu
163 ; CHECK-NEXT:    viota.m v8, v0, v0.t
164 ; CHECK-NEXT:    ret
165 entry:
166   %a = call <vscale x 8 x i8> @llvm.riscv.viota.mask.nxv8i8(
167     <vscale x 8 x i8> %0,
168     <vscale x 8 x i1> %1,
169     <vscale x 8 x i1> %1,
170     iXLen %2, iXLen 0)
172   ret <vscale x 8 x i8> %a
175 declare <vscale x 16 x i8> @llvm.riscv.viota.nxv16i8(
176   <vscale x 16 x i8>,
177   <vscale x 16 x i1>,
178   iXLen);
180 define <vscale x 16 x i8> @intrinsic_viota_m_nxv16i8_nxv16i1(<vscale x 16 x i1> %0, iXLen %1) nounwind {
181 ; CHECK-LABEL: intrinsic_viota_m_nxv16i8_nxv16i1:
182 ; CHECK:       # %bb.0: # %entry
183 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
184 ; CHECK-NEXT:    viota.m v8, v0
185 ; CHECK-NEXT:    ret
186 entry:
187   %a = call <vscale x 16 x i8> @llvm.riscv.viota.nxv16i8(
188     <vscale x 16 x i8> undef,
189     <vscale x 16 x i1> %0,
190     iXLen %1)
192   ret <vscale x 16 x i8> %a
195 declare <vscale x 16 x i8> @llvm.riscv.viota.mask.nxv16i8(
196   <vscale x 16 x i8>,
197   <vscale x 16 x i1>,
198   <vscale x 16 x i1>,
199   iXLen, iXLen);
201 define <vscale x 16 x i8> @intrinsic_viota_mask_m_nxv16i8_nxv16i1(<vscale x 16 x i8> %0, <vscale x 16 x i1> %1, iXLen %2) nounwind {
202 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv16i8_nxv16i1:
203 ; CHECK:       # %bb.0: # %entry
204 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, tu, mu
205 ; CHECK-NEXT:    viota.m v8, v0, v0.t
206 ; CHECK-NEXT:    ret
207 entry:
208   %a = call <vscale x 16 x i8> @llvm.riscv.viota.mask.nxv16i8(
209     <vscale x 16 x i8> %0,
210     <vscale x 16 x i1> %1,
211     <vscale x 16 x i1> %1,
212     iXLen %2, iXLen 0)
214   ret <vscale x 16 x i8> %a
217 declare <vscale x 32 x i8> @llvm.riscv.viota.nxv32i8(
218   <vscale x 32 x i8>,
219   <vscale x 32 x i1>,
220   iXLen);
222 define <vscale x 32 x i8> @intrinsic_viota_m_nxv32i8_nxv32i1(<vscale x 32 x i1> %0, iXLen %1) nounwind {
223 ; CHECK-LABEL: intrinsic_viota_m_nxv32i8_nxv32i1:
224 ; CHECK:       # %bb.0: # %entry
225 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
226 ; CHECK-NEXT:    viota.m v8, v0
227 ; CHECK-NEXT:    ret
228 entry:
229   %a = call <vscale x 32 x i8> @llvm.riscv.viota.nxv32i8(
230     <vscale x 32 x i8> undef,
231     <vscale x 32 x i1> %0,
232     iXLen %1)
234   ret <vscale x 32 x i8> %a
237 declare <vscale x 32 x i8> @llvm.riscv.viota.mask.nxv32i8(
238   <vscale x 32 x i8>,
239   <vscale x 32 x i1>,
240   <vscale x 32 x i1>,
241   iXLen, iXLen);
243 define <vscale x 32 x i8> @intrinsic_viota_mask_m_nxv32i8_nxv32i1(<vscale x 32 x i8> %0, <vscale x 32 x i1> %1, iXLen %2) nounwind {
244 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv32i8_nxv32i1:
245 ; CHECK:       # %bb.0: # %entry
246 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, tu, mu
247 ; CHECK-NEXT:    viota.m v8, v0, v0.t
248 ; CHECK-NEXT:    ret
249 entry:
250   %a = call <vscale x 32 x i8> @llvm.riscv.viota.mask.nxv32i8(
251     <vscale x 32 x i8> %0,
252     <vscale x 32 x i1> %1,
253     <vscale x 32 x i1> %1,
254     iXLen %2, iXLen 0)
256   ret <vscale x 32 x i8> %a
259 declare <vscale x 64 x i8> @llvm.riscv.viota.nxv64i8(
260   <vscale x 64 x i8>,
261   <vscale x 64 x i1>,
262   iXLen);
264 define <vscale x 64 x i8> @intrinsic_viota_m_nxv64i8_nxv64i1(<vscale x 64 x i1> %0, iXLen %1) nounwind {
265 ; CHECK-LABEL: intrinsic_viota_m_nxv64i8_nxv64i1:
266 ; CHECK:       # %bb.0: # %entry
267 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
268 ; CHECK-NEXT:    viota.m v8, v0
269 ; CHECK-NEXT:    ret
270 entry:
271   %a = call <vscale x 64 x i8> @llvm.riscv.viota.nxv64i8(
272     <vscale x 64 x i8> undef,
273     <vscale x 64 x i1> %0,
274     iXLen %1)
276   ret <vscale x 64 x i8> %a
279 declare <vscale x 64 x i8> @llvm.riscv.viota.mask.nxv64i8(
280   <vscale x 64 x i8>,
281   <vscale x 64 x i1>,
282   <vscale x 64 x i1>,
283   iXLen, iXLen);
285 define <vscale x 64 x i8> @intrinsic_viota_mask_m_nxv64i8_nxv64i1(<vscale x 64 x i8> %0, <vscale x 64 x i1> %1, iXLen %2) nounwind {
286 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv64i8_nxv64i1:
287 ; CHECK:       # %bb.0: # %entry
288 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, tu, mu
289 ; CHECK-NEXT:    viota.m v8, v0, v0.t
290 ; CHECK-NEXT:    ret
291 entry:
292   %a = call <vscale x 64 x i8> @llvm.riscv.viota.mask.nxv64i8(
293     <vscale x 64 x i8> %0,
294     <vscale x 64 x i1> %1,
295     <vscale x 64 x i1> %1,
296     iXLen %2, iXLen 0)
298   ret <vscale x 64 x i8> %a
301 declare <vscale x 1 x i16> @llvm.riscv.viota.nxv1i16(
302   <vscale x 1 x i16>,
303   <vscale x 1 x i1>,
304   iXLen);
306 define <vscale x 1 x i16> @intrinsic_viota_m_nxv1i16_nxv1i1(<vscale x 1 x i1> %0, iXLen %1) nounwind {
307 ; CHECK-LABEL: intrinsic_viota_m_nxv1i16_nxv1i1:
308 ; CHECK:       # %bb.0: # %entry
309 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
310 ; CHECK-NEXT:    viota.m v8, v0
311 ; CHECK-NEXT:    ret
312 entry:
313   %a = call <vscale x 1 x i16> @llvm.riscv.viota.nxv1i16(
314     <vscale x 1 x i16> undef,
315     <vscale x 1 x i1> %0,
316     iXLen %1)
318   ret <vscale x 1 x i16> %a
321 declare <vscale x 1 x i16> @llvm.riscv.viota.mask.nxv1i16(
322   <vscale x 1 x i16>,
323   <vscale x 1 x i1>,
324   <vscale x 1 x i1>,
325   iXLen, iXLen);
327 define <vscale x 1 x i16> @intrinsic_viota_mask_m_nxv1i16_nxv1i1(<vscale x 1 x i16> %0, <vscale x 1 x i1> %1, iXLen %2) nounwind {
328 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv1i16_nxv1i1:
329 ; CHECK:       # %bb.0: # %entry
330 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
331 ; CHECK-NEXT:    viota.m v8, v0, v0.t
332 ; CHECK-NEXT:    ret
333 entry:
334   %a = call <vscale x 1 x i16> @llvm.riscv.viota.mask.nxv1i16(
335     <vscale x 1 x i16> %0,
336     <vscale x 1 x i1> %1,
337     <vscale x 1 x i1> %1,
338     iXLen %2, iXLen 0)
340   ret <vscale x 1 x i16> %a
343 declare <vscale x 2 x i16> @llvm.riscv.viota.nxv2i16(
344   <vscale x 2 x i16>,
345   <vscale x 2 x i1>,
346   iXLen);
348 define <vscale x 2 x i16> @intrinsic_viota_m_nxv2i16_nxv2i1(<vscale x 2 x i1> %0, iXLen %1) nounwind {
349 ; CHECK-LABEL: intrinsic_viota_m_nxv2i16_nxv2i1:
350 ; CHECK:       # %bb.0: # %entry
351 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
352 ; CHECK-NEXT:    viota.m v8, v0
353 ; CHECK-NEXT:    ret
354 entry:
355   %a = call <vscale x 2 x i16> @llvm.riscv.viota.nxv2i16(
356     <vscale x 2 x i16> undef,
357     <vscale x 2 x i1> %0,
358     iXLen %1)
360   ret <vscale x 2 x i16> %a
363 declare <vscale x 2 x i16> @llvm.riscv.viota.mask.nxv2i16(
364   <vscale x 2 x i16>,
365   <vscale x 2 x i1>,
366   <vscale x 2 x i1>,
367   iXLen, iXLen);
369 define <vscale x 2 x i16> @intrinsic_viota_mask_m_nxv2i16_nxv2i1(<vscale x 2 x i16> %0, <vscale x 2 x i1> %1, iXLen %2) nounwind {
370 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv2i16_nxv2i1:
371 ; CHECK:       # %bb.0: # %entry
372 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
373 ; CHECK-NEXT:    viota.m v8, v0, v0.t
374 ; CHECK-NEXT:    ret
375 entry:
376   %a = call <vscale x 2 x i16> @llvm.riscv.viota.mask.nxv2i16(
377     <vscale x 2 x i16> %0,
378     <vscale x 2 x i1> %1,
379     <vscale x 2 x i1> %1,
380     iXLen %2, iXLen 0)
382   ret <vscale x 2 x i16> %a
385 declare <vscale x 4 x i16> @llvm.riscv.viota.nxv4i16(
386   <vscale x 4 x i16>,
387   <vscale x 4 x i1>,
388   iXLen);
390 define <vscale x 4 x i16> @intrinsic_viota_m_nxv4i16_nxv4i1(<vscale x 4 x i1> %0, iXLen %1) nounwind {
391 ; CHECK-LABEL: intrinsic_viota_m_nxv4i16_nxv4i1:
392 ; CHECK:       # %bb.0: # %entry
393 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
394 ; CHECK-NEXT:    viota.m v8, v0
395 ; CHECK-NEXT:    ret
396 entry:
397   %a = call <vscale x 4 x i16> @llvm.riscv.viota.nxv4i16(
398     <vscale x 4 x i16> undef,
399     <vscale x 4 x i1> %0,
400     iXLen %1)
402   ret <vscale x 4 x i16> %a
405 declare <vscale x 4 x i16> @llvm.riscv.viota.mask.nxv4i16(
406   <vscale x 4 x i16>,
407   <vscale x 4 x i1>,
408   <vscale x 4 x i1>,
409   iXLen, iXLen);
411 define <vscale x 4 x i16> @intrinsic_viota_mask_m_nxv4i16_nxv4i1(<vscale x 4 x i16> %0, <vscale x 4 x i1> %1, iXLen %2) nounwind {
412 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv4i16_nxv4i1:
413 ; CHECK:       # %bb.0: # %entry
414 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
415 ; CHECK-NEXT:    viota.m v8, v0, v0.t
416 ; CHECK-NEXT:    ret
417 entry:
418   %a = call <vscale x 4 x i16> @llvm.riscv.viota.mask.nxv4i16(
419     <vscale x 4 x i16> %0,
420     <vscale x 4 x i1> %1,
421     <vscale x 4 x i1> %1,
422     iXLen %2, iXLen 0)
424   ret <vscale x 4 x i16> %a
427 declare <vscale x 8 x i16> @llvm.riscv.viota.nxv8i16(
428   <vscale x 8 x i16>,
429   <vscale x 8 x i1>,
430   iXLen);
432 define <vscale x 8 x i16> @intrinsic_viota_m_nxv8i16_nxv8i1(<vscale x 8 x i1> %0, iXLen %1) nounwind {
433 ; CHECK-LABEL: intrinsic_viota_m_nxv8i16_nxv8i1:
434 ; CHECK:       # %bb.0: # %entry
435 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
436 ; CHECK-NEXT:    viota.m v8, v0
437 ; CHECK-NEXT:    ret
438 entry:
439   %a = call <vscale x 8 x i16> @llvm.riscv.viota.nxv8i16(
440     <vscale x 8 x i16> undef,
441     <vscale x 8 x i1> %0,
442     iXLen %1)
444   ret <vscale x 8 x i16> %a
447 declare <vscale x 8 x i16> @llvm.riscv.viota.mask.nxv8i16(
448   <vscale x 8 x i16>,
449   <vscale x 8 x i1>,
450   <vscale x 8 x i1>,
451   iXLen, iXLen);
453 define <vscale x 8 x i16> @intrinsic_viota_mask_m_nxv8i16_nxv8i1(<vscale x 8 x i16> %0, <vscale x 8 x i1> %1, iXLen %2) nounwind {
454 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv8i16_nxv8i1:
455 ; CHECK:       # %bb.0: # %entry
456 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
457 ; CHECK-NEXT:    viota.m v8, v0, v0.t
458 ; CHECK-NEXT:    ret
459 entry:
460   %a = call <vscale x 8 x i16> @llvm.riscv.viota.mask.nxv8i16(
461     <vscale x 8 x i16> %0,
462     <vscale x 8 x i1> %1,
463     <vscale x 8 x i1> %1,
464     iXLen %2, iXLen 0)
466   ret <vscale x 8 x i16> %a
469 declare <vscale x 16 x i16> @llvm.riscv.viota.nxv16i16(
470   <vscale x 16 x i16>,
471   <vscale x 16 x i1>,
472   iXLen);
474 define <vscale x 16 x i16> @intrinsic_viota_m_nxv16i16_nxv16i1(<vscale x 16 x i1> %0, iXLen %1) nounwind {
475 ; CHECK-LABEL: intrinsic_viota_m_nxv16i16_nxv16i1:
476 ; CHECK:       # %bb.0: # %entry
477 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
478 ; CHECK-NEXT:    viota.m v8, v0
479 ; CHECK-NEXT:    ret
480 entry:
481   %a = call <vscale x 16 x i16> @llvm.riscv.viota.nxv16i16(
482     <vscale x 16 x i16> undef,
483     <vscale x 16 x i1> %0,
484     iXLen %1)
486   ret <vscale x 16 x i16> %a
489 declare <vscale x 16 x i16> @llvm.riscv.viota.mask.nxv16i16(
490   <vscale x 16 x i16>,
491   <vscale x 16 x i1>,
492   <vscale x 16 x i1>,
493   iXLen, iXLen);
495 define <vscale x 16 x i16> @intrinsic_viota_mask_m_nxv16i16_nxv16i1(<vscale x 16 x i16> %0, <vscale x 16 x i1> %1, iXLen %2) nounwind {
496 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv16i16_nxv16i1:
497 ; CHECK:       # %bb.0: # %entry
498 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
499 ; CHECK-NEXT:    viota.m v8, v0, v0.t
500 ; CHECK-NEXT:    ret
501 entry:
502   %a = call <vscale x 16 x i16> @llvm.riscv.viota.mask.nxv16i16(
503     <vscale x 16 x i16> %0,
504     <vscale x 16 x i1> %1,
505     <vscale x 16 x i1> %1,
506     iXLen %2, iXLen 0)
508   ret <vscale x 16 x i16> %a
511 declare <vscale x 32 x i16> @llvm.riscv.viota.nxv32i16(
512   <vscale x 32 x i16>,
513   <vscale x 32 x i1>,
514   iXLen);
516 define <vscale x 32 x i16> @intrinsic_viota_m_nxv32i16_nxv32i1(<vscale x 32 x i1> %0, iXLen %1) nounwind {
517 ; CHECK-LABEL: intrinsic_viota_m_nxv32i16_nxv32i1:
518 ; CHECK:       # %bb.0: # %entry
519 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
520 ; CHECK-NEXT:    viota.m v8, v0
521 ; CHECK-NEXT:    ret
522 entry:
523   %a = call <vscale x 32 x i16> @llvm.riscv.viota.nxv32i16(
524     <vscale x 32 x i16> undef,
525     <vscale x 32 x i1> %0,
526     iXLen %1)
528   ret <vscale x 32 x i16> %a
531 declare <vscale x 32 x i16> @llvm.riscv.viota.mask.nxv32i16(
532   <vscale x 32 x i16>,
533   <vscale x 32 x i1>,
534   <vscale x 32 x i1>,
535   iXLen, iXLen);
537 define <vscale x 32 x i16> @intrinsic_viota_mask_m_nxv32i16_nxv32i1(<vscale x 32 x i16> %0, <vscale x 32 x i1> %1, iXLen %2) nounwind {
538 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv32i16_nxv32i1:
539 ; CHECK:       # %bb.0: # %entry
540 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, mu
541 ; CHECK-NEXT:    viota.m v8, v0, v0.t
542 ; CHECK-NEXT:    ret
543 entry:
544   %a = call <vscale x 32 x i16> @llvm.riscv.viota.mask.nxv32i16(
545     <vscale x 32 x i16> %0,
546     <vscale x 32 x i1> %1,
547     <vscale x 32 x i1> %1,
548     iXLen %2, iXLen 0)
550   ret <vscale x 32 x i16> %a
553 declare <vscale x 1 x i32> @llvm.riscv.viota.nxv1i32(
554   <vscale x 1 x i32>,
555   <vscale x 1 x i1>,
556   iXLen);
558 define <vscale x 1 x i32> @intrinsic_viota_m_nxv1i32_nxv1i1(<vscale x 1 x i1> %0, iXLen %1) nounwind {
559 ; CHECK-LABEL: intrinsic_viota_m_nxv1i32_nxv1i1:
560 ; CHECK:       # %bb.0: # %entry
561 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
562 ; CHECK-NEXT:    viota.m v8, v0
563 ; CHECK-NEXT:    ret
564 entry:
565   %a = call <vscale x 1 x i32> @llvm.riscv.viota.nxv1i32(
566     <vscale x 1 x i32> undef,
567     <vscale x 1 x i1> %0,
568     iXLen %1)
570   ret <vscale x 1 x i32> %a
573 declare <vscale x 1 x i32> @llvm.riscv.viota.mask.nxv1i32(
574   <vscale x 1 x i32>,
575   <vscale x 1 x i1>,
576   <vscale x 1 x i1>,
577   iXLen, iXLen);
579 define <vscale x 1 x i32> @intrinsic_viota_mask_m_nxv1i32_nxv1i1(<vscale x 1 x i32> %0, <vscale x 1 x i1> %1, iXLen %2) nounwind {
580 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv1i32_nxv1i1:
581 ; CHECK:       # %bb.0: # %entry
582 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
583 ; CHECK-NEXT:    viota.m v8, v0, v0.t
584 ; CHECK-NEXT:    ret
585 entry:
586   %a = call <vscale x 1 x i32> @llvm.riscv.viota.mask.nxv1i32(
587     <vscale x 1 x i32> %0,
588     <vscale x 1 x i1> %1,
589     <vscale x 1 x i1> %1,
590     iXLen %2, iXLen 0)
592   ret <vscale x 1 x i32> %a
595 declare <vscale x 2 x i32> @llvm.riscv.viota.nxv2i32(
596   <vscale x 2 x i32>,
597   <vscale x 2 x i1>,
598   iXLen);
600 define <vscale x 2 x i32> @intrinsic_viota_m_nxv2i32_nxv2i1(<vscale x 2 x i1> %0, iXLen %1) nounwind {
601 ; CHECK-LABEL: intrinsic_viota_m_nxv2i32_nxv2i1:
602 ; CHECK:       # %bb.0: # %entry
603 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
604 ; CHECK-NEXT:    viota.m v8, v0
605 ; CHECK-NEXT:    ret
606 entry:
607   %a = call <vscale x 2 x i32> @llvm.riscv.viota.nxv2i32(
608     <vscale x 2 x i32> undef,
609     <vscale x 2 x i1> %0,
610     iXLen %1)
612   ret <vscale x 2 x i32> %a
615 declare <vscale x 2 x i32> @llvm.riscv.viota.mask.nxv2i32(
616   <vscale x 2 x i32>,
617   <vscale x 2 x i1>,
618   <vscale x 2 x i1>,
619   iXLen, iXLen);
621 define <vscale x 2 x i32> @intrinsic_viota_mask_m_nxv2i32_nxv2i1(<vscale x 2 x i32> %0, <vscale x 2 x i1> %1, iXLen %2) nounwind {
622 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv2i32_nxv2i1:
623 ; CHECK:       # %bb.0: # %entry
624 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
625 ; CHECK-NEXT:    viota.m v8, v0, v0.t
626 ; CHECK-NEXT:    ret
627 entry:
628   %a = call <vscale x 2 x i32> @llvm.riscv.viota.mask.nxv2i32(
629     <vscale x 2 x i32> %0,
630     <vscale x 2 x i1> %1,
631     <vscale x 2 x i1> %1,
632     iXLen %2, iXLen 0)
634   ret <vscale x 2 x i32> %a
637 declare <vscale x 4 x i32> @llvm.riscv.viota.nxv4i32(
638   <vscale x 4 x i32>,
639   <vscale x 4 x i1>,
640   iXLen);
642 define <vscale x 4 x i32> @intrinsic_viota_m_nxv4i32_nxv4i1(<vscale x 4 x i1> %0, iXLen %1) nounwind {
643 ; CHECK-LABEL: intrinsic_viota_m_nxv4i32_nxv4i1:
644 ; CHECK:       # %bb.0: # %entry
645 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
646 ; CHECK-NEXT:    viota.m v8, v0
647 ; CHECK-NEXT:    ret
648 entry:
649   %a = call <vscale x 4 x i32> @llvm.riscv.viota.nxv4i32(
650     <vscale x 4 x i32> undef,
651     <vscale x 4 x i1> %0,
652     iXLen %1)
654   ret <vscale x 4 x i32> %a
657 declare <vscale x 4 x i32> @llvm.riscv.viota.mask.nxv4i32(
658   <vscale x 4 x i32>,
659   <vscale x 4 x i1>,
660   <vscale x 4 x i1>,
661   iXLen, iXLen);
663 define <vscale x 4 x i32> @intrinsic_viota_mask_m_nxv4i32_nxv4i1(<vscale x 4 x i32> %0, <vscale x 4 x i1> %1, iXLen %2) nounwind {
664 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv4i32_nxv4i1:
665 ; CHECK:       # %bb.0: # %entry
666 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
667 ; CHECK-NEXT:    viota.m v8, v0, v0.t
668 ; CHECK-NEXT:    ret
669 entry:
670   %a = call <vscale x 4 x i32> @llvm.riscv.viota.mask.nxv4i32(
671     <vscale x 4 x i32> %0,
672     <vscale x 4 x i1> %1,
673     <vscale x 4 x i1> %1,
674     iXLen %2, iXLen 0)
676   ret <vscale x 4 x i32> %a
679 declare <vscale x 8 x i32> @llvm.riscv.viota.nxv8i32(
680   <vscale x 8 x i32>,
681   <vscale x 8 x i1>,
682   iXLen);
684 define <vscale x 8 x i32> @intrinsic_viota_m_nxv8i32_nxv8i1(<vscale x 8 x i1> %0, iXLen %1) nounwind {
685 ; CHECK-LABEL: intrinsic_viota_m_nxv8i32_nxv8i1:
686 ; CHECK:       # %bb.0: # %entry
687 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
688 ; CHECK-NEXT:    viota.m v8, v0
689 ; CHECK-NEXT:    ret
690 entry:
691   %a = call <vscale x 8 x i32> @llvm.riscv.viota.nxv8i32(
692     <vscale x 8 x i32> undef,
693     <vscale x 8 x i1> %0,
694     iXLen %1)
696   ret <vscale x 8 x i32> %a
699 declare <vscale x 8 x i32> @llvm.riscv.viota.mask.nxv8i32(
700   <vscale x 8 x i32>,
701   <vscale x 8 x i1>,
702   <vscale x 8 x i1>,
703   iXLen, iXLen);
705 define <vscale x 8 x i32> @intrinsic_viota_mask_m_nxv8i32_nxv8i1(<vscale x 8 x i32> %0, <vscale x 8 x i1> %1, iXLen %2) nounwind {
706 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv8i32_nxv8i1:
707 ; CHECK:       # %bb.0: # %entry
708 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
709 ; CHECK-NEXT:    viota.m v8, v0, v0.t
710 ; CHECK-NEXT:    ret
711 entry:
712   %a = call <vscale x 8 x i32> @llvm.riscv.viota.mask.nxv8i32(
713     <vscale x 8 x i32> %0,
714     <vscale x 8 x i1> %1,
715     <vscale x 8 x i1> %1,
716     iXLen %2, iXLen 0)
718   ret <vscale x 8 x i32> %a
721 declare <vscale x 16 x i32> @llvm.riscv.viota.nxv16i32(
722   <vscale x 16 x i32>,
723   <vscale x 16 x i1>,
724   iXLen);
726 define <vscale x 16 x i32> @intrinsic_viota_m_nxv16i32_nxv16i1(<vscale x 16 x i1> %0, iXLen %1) nounwind {
727 ; CHECK-LABEL: intrinsic_viota_m_nxv16i32_nxv16i1:
728 ; CHECK:       # %bb.0: # %entry
729 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
730 ; CHECK-NEXT:    viota.m v8, v0
731 ; CHECK-NEXT:    ret
732 entry:
733   %a = call <vscale x 16 x i32> @llvm.riscv.viota.nxv16i32(
734     <vscale x 16 x i32> undef,
735     <vscale x 16 x i1> %0,
736     iXLen %1)
738   ret <vscale x 16 x i32> %a
741 declare <vscale x 16 x i32> @llvm.riscv.viota.mask.nxv16i32(
742   <vscale x 16 x i32>,
743   <vscale x 16 x i1>,
744   <vscale x 16 x i1>,
745   iXLen, iXLen);
747 define <vscale x 16 x i32> @intrinsic_viota_mask_m_nxv16i32_nxv16i1(<vscale x 16 x i32> %0, <vscale x 16 x i1> %1, iXLen %2) nounwind {
748 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv16i32_nxv16i1:
749 ; CHECK:       # %bb.0: # %entry
750 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, mu
751 ; CHECK-NEXT:    viota.m v8, v0, v0.t
752 ; CHECK-NEXT:    ret
753 entry:
754   %a = call <vscale x 16 x i32> @llvm.riscv.viota.mask.nxv16i32(
755     <vscale x 16 x i32> %0,
756     <vscale x 16 x i1> %1,
757     <vscale x 16 x i1> %1,
758     iXLen %2, iXLen 0)
760   ret <vscale x 16 x i32> %a
763 declare <vscale x 1 x i64> @llvm.riscv.viota.nxv1i64(
764   <vscale x 1 x i64>,
765   <vscale x 1 x i1>,
766   iXLen);
768 define <vscale x 1 x i64> @intrinsic_viota_m_nxv1i64_nxv1i1(<vscale x 1 x i1> %0, iXLen %1) nounwind {
769 ; CHECK-LABEL: intrinsic_viota_m_nxv1i64_nxv1i1:
770 ; CHECK:       # %bb.0: # %entry
771 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
772 ; CHECK-NEXT:    viota.m v8, v0
773 ; CHECK-NEXT:    ret
774 entry:
775   %a = call <vscale x 1 x i64> @llvm.riscv.viota.nxv1i64(
776     <vscale x 1 x i64> undef,
777     <vscale x 1 x i1> %0,
778     iXLen %1)
780   ret <vscale x 1 x i64> %a
783 declare <vscale x 1 x i64> @llvm.riscv.viota.mask.nxv1i64(
784   <vscale x 1 x i64>,
785   <vscale x 1 x i1>,
786   <vscale x 1 x i1>,
787   iXLen, iXLen);
789 define <vscale x 1 x i64> @intrinsic_viota_mask_m_nxv1i64_nxv1i1(<vscale x 1 x i64> %0, <vscale x 1 x i1> %1, iXLen %2) nounwind {
790 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv1i64_nxv1i1:
791 ; CHECK:       # %bb.0: # %entry
792 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
793 ; CHECK-NEXT:    viota.m v8, v0, v0.t
794 ; CHECK-NEXT:    ret
795 entry:
796   %a = call <vscale x 1 x i64> @llvm.riscv.viota.mask.nxv1i64(
797     <vscale x 1 x i64> %0,
798     <vscale x 1 x i1> %1,
799     <vscale x 1 x i1> %1,
800     iXLen %2, iXLen 0)
802   ret <vscale x 1 x i64> %a
805 declare <vscale x 2 x i64> @llvm.riscv.viota.nxv2i64(
806   <vscale x 2 x i64>,
807   <vscale x 2 x i1>,
808   iXLen);
810 define <vscale x 2 x i64> @intrinsic_viota_m_nxv2i64_nxv2i1(<vscale x 2 x i1> %0, iXLen %1) nounwind {
811 ; CHECK-LABEL: intrinsic_viota_m_nxv2i64_nxv2i1:
812 ; CHECK:       # %bb.0: # %entry
813 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
814 ; CHECK-NEXT:    viota.m v8, v0
815 ; CHECK-NEXT:    ret
816 entry:
817   %a = call <vscale x 2 x i64> @llvm.riscv.viota.nxv2i64(
818     <vscale x 2 x i64> undef,
819     <vscale x 2 x i1> %0,
820     iXLen %1)
822   ret <vscale x 2 x i64> %a
825 declare <vscale x 2 x i64> @llvm.riscv.viota.mask.nxv2i64(
826   <vscale x 2 x i64>,
827   <vscale x 2 x i1>,
828   <vscale x 2 x i1>,
829   iXLen, iXLen);
831 define <vscale x 2 x i64> @intrinsic_viota_mask_m_nxv2i64_nxv2i1(<vscale x 2 x i64> %0, <vscale x 2 x i1> %1, iXLen %2) nounwind {
832 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv2i64_nxv2i1:
833 ; CHECK:       # %bb.0: # %entry
834 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
835 ; CHECK-NEXT:    viota.m v8, v0, v0.t
836 ; CHECK-NEXT:    ret
837 entry:
838   %a = call <vscale x 2 x i64> @llvm.riscv.viota.mask.nxv2i64(
839     <vscale x 2 x i64> %0,
840     <vscale x 2 x i1> %1,
841     <vscale x 2 x i1> %1,
842     iXLen %2, iXLen 0)
844   ret <vscale x 2 x i64> %a
847 declare <vscale x 4 x i64> @llvm.riscv.viota.nxv4i64(
848   <vscale x 4 x i64>,
849   <vscale x 4 x i1>,
850   iXLen);
852 define <vscale x 4 x i64> @intrinsic_viota_m_nxv4i64_nxv4i1(<vscale x 4 x i1> %0, iXLen %1) nounwind {
853 ; CHECK-LABEL: intrinsic_viota_m_nxv4i64_nxv4i1:
854 ; CHECK:       # %bb.0: # %entry
855 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
856 ; CHECK-NEXT:    viota.m v8, v0
857 ; CHECK-NEXT:    ret
858 entry:
859   %a = call <vscale x 4 x i64> @llvm.riscv.viota.nxv4i64(
860     <vscale x 4 x i64> undef,
861     <vscale x 4 x i1> %0,
862     iXLen %1)
864   ret <vscale x 4 x i64> %a
867 declare <vscale x 4 x i64> @llvm.riscv.viota.mask.nxv4i64(
868   <vscale x 4 x i64>,
869   <vscale x 4 x i1>,
870   <vscale x 4 x i1>,
871   iXLen, iXLen);
873 define <vscale x 4 x i64> @intrinsic_viota_mask_m_nxv4i64_nxv4i1(<vscale x 4 x i64> %0, <vscale x 4 x i1> %1, iXLen %2) nounwind {
874 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv4i64_nxv4i1:
875 ; CHECK:       # %bb.0: # %entry
876 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
877 ; CHECK-NEXT:    viota.m v8, v0, v0.t
878 ; CHECK-NEXT:    ret
879 entry:
880   %a = call <vscale x 4 x i64> @llvm.riscv.viota.mask.nxv4i64(
881     <vscale x 4 x i64> %0,
882     <vscale x 4 x i1> %1,
883     <vscale x 4 x i1> %1,
884     iXLen %2, iXLen 0)
886   ret <vscale x 4 x i64> %a
889 declare <vscale x 8 x i64> @llvm.riscv.viota.nxv8i64(
890   <vscale x 8 x i64>,
891   <vscale x 8 x i1>,
892   iXLen);
894 define <vscale x 8 x i64> @intrinsic_viota_m_nxv8i64_nxv8i1(<vscale x 8 x i1> %0, iXLen %1) nounwind {
895 ; CHECK-LABEL: intrinsic_viota_m_nxv8i64_nxv8i1:
896 ; CHECK:       # %bb.0: # %entry
897 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
898 ; CHECK-NEXT:    viota.m v8, v0
899 ; CHECK-NEXT:    ret
900 entry:
901   %a = call <vscale x 8 x i64> @llvm.riscv.viota.nxv8i64(
902     <vscale x 8 x i64> undef,
903     <vscale x 8 x i1> %0,
904     iXLen %1)
906   ret <vscale x 8 x i64> %a
909 declare <vscale x 8 x i64> @llvm.riscv.viota.mask.nxv8i64(
910   <vscale x 8 x i64>,
911   <vscale x 8 x i1>,
912   <vscale x 8 x i1>,
913   iXLen, iXLen);
915 define <vscale x 8 x i64> @intrinsic_viota_mask_m_nxv8i64_nxv8i1(<vscale x 8 x i64> %0, <vscale x 8 x i1> %1, iXLen %2) nounwind {
916 ; CHECK-LABEL: intrinsic_viota_mask_m_nxv8i64_nxv8i1:
917 ; CHECK:       # %bb.0: # %entry
918 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, mu
919 ; CHECK-NEXT:    viota.m v8, v0, v0.t
920 ; CHECK-NEXT:    ret
921 entry:
922   %a = call <vscale x 8 x i64> @llvm.riscv.viota.mask.nxv8i64(
923     <vscale x 8 x i64> %0,
924     <vscale x 8 x i1> %1,
925     <vscale x 8 x i1> %1,
926     iXLen %2, iXLen 0)
928   ret <vscale x 8 x i64> %a