Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfclass.ll
blob7c7cdab19aaead15781c625c3d8d1e631189cbb4
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,+zfh,+zvfh \
3 ; RUN:   -verify-machineinstrs -target-abi=ilp32d | FileCheck %s
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+zfh,+zvfh \
5 ; RUN:   -verify-machineinstrs -target-abi=lp64d | FileCheck %s
7 declare <vscale x 1 x i16> @llvm.riscv.vfclass.nxv1i16(
8   <vscale x 1 x i16>,
9   <vscale x 1 x half>,
10   iXLen);
12 define <vscale x 1 x i16> @intrinsic_vfclass_v_nxv1i16_nxv1f16(
13 ; CHECK-LABEL: intrinsic_vfclass_v_nxv1i16_nxv1f16:
14 ; CHECK:       # %bb.0: # %entry
15 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
16 ; CHECK-NEXT:    vfclass.v v8, v8
17 ; CHECK-NEXT:    ret
18   <vscale x 1 x half> %0,
19   iXLen %1) nounwind {
20 entry:
21   %a = call <vscale x 1 x i16> @llvm.riscv.vfclass.nxv1i16(
22     <vscale x 1 x i16> undef,
23     <vscale x 1 x half> %0,
24     iXLen %1)
26   ret <vscale x 1 x i16> %a
29 declare <vscale x 1 x i16> @llvm.riscv.vfclass.mask.nxv1i16(
30   <vscale x 1 x i16>,
31   <vscale x 1 x half>,
32   <vscale x 1 x i1>,
33   iXLen, iXLen);
35 define <vscale x 1 x i16> @intrinsic_vfclass_mask_v_nxv1i16_nxv1f16(
36 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv1i16_nxv1f16:
37 ; CHECK:       # %bb.0: # %entry
38 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
39 ; CHECK-NEXT:    vfclass.v v8, v9, v0.t
40 ; CHECK-NEXT:    ret
41   <vscale x 1 x i16> %0,
42   <vscale x 1 x half> %1,
43   <vscale x 1 x i1> %2,
44   iXLen %3) nounwind {
45 entry:
46   %a = call <vscale x 1 x i16> @llvm.riscv.vfclass.mask.nxv1i16(
47     <vscale x 1 x i16> %0,
48     <vscale x 1 x half> %1,
49     <vscale x 1 x i1> %2,
50     iXLen %3, iXLen 0)
52   ret <vscale x 1 x i16> %a
55 declare <vscale x 2 x i16> @llvm.riscv.vfclass.nxv2i16(
56   <vscale x 2 x i16>,
57   <vscale x 2 x half>,
58   iXLen);
60 define <vscale x 2 x i16> @intrinsic_vfclass_v_nxv2i16_nxv2f16(
61 ; CHECK-LABEL: intrinsic_vfclass_v_nxv2i16_nxv2f16:
62 ; CHECK:       # %bb.0: # %entry
63 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
64 ; CHECK-NEXT:    vfclass.v v8, v8
65 ; CHECK-NEXT:    ret
66   <vscale x 2 x half> %0,
67   iXLen %1) nounwind {
68 entry:
69   %a = call <vscale x 2 x i16> @llvm.riscv.vfclass.nxv2i16(
70     <vscale x 2 x i16> undef,
71     <vscale x 2 x half> %0,
72     iXLen %1)
74   ret <vscale x 2 x i16> %a
77 declare <vscale x 2 x i16> @llvm.riscv.vfclass.mask.nxv2i16(
78   <vscale x 2 x i16>,
79   <vscale x 2 x half>,
80   <vscale x 2 x i1>,
81   iXLen, iXLen);
83 define <vscale x 2 x i16> @intrinsic_vfclass_mask_v_nxv2i16_nxv2f16(
84 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv2i16_nxv2f16:
85 ; CHECK:       # %bb.0: # %entry
86 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
87 ; CHECK-NEXT:    vfclass.v v8, v9, v0.t
88 ; CHECK-NEXT:    ret
89   <vscale x 2 x i16> %0,
90   <vscale x 2 x half> %1,
91   <vscale x 2 x i1> %2,
92   iXLen %3) nounwind {
93 entry:
94   %a = call <vscale x 2 x i16> @llvm.riscv.vfclass.mask.nxv2i16(
95     <vscale x 2 x i16> %0,
96     <vscale x 2 x half> %1,
97     <vscale x 2 x i1> %2,
98     iXLen %3, iXLen 0)
100   ret <vscale x 2 x i16> %a
103 declare <vscale x 4 x i16> @llvm.riscv.vfclass.nxv4i16(
104   <vscale x 4 x i16>,
105   <vscale x 4 x half>,
106   iXLen);
108 define <vscale x 4 x i16> @intrinsic_vfclass_v_nxv4i16_nxv4f16(
109 ; CHECK-LABEL: intrinsic_vfclass_v_nxv4i16_nxv4f16:
110 ; CHECK:       # %bb.0: # %entry
111 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
112 ; CHECK-NEXT:    vfclass.v v8, v8
113 ; CHECK-NEXT:    ret
114   <vscale x 4 x half> %0,
115   iXLen %1) nounwind {
116 entry:
117   %a = call <vscale x 4 x i16> @llvm.riscv.vfclass.nxv4i16(
118     <vscale x 4 x i16> undef,
119     <vscale x 4 x half> %0,
120     iXLen %1)
122   ret <vscale x 4 x i16> %a
125 declare <vscale x 4 x i16> @llvm.riscv.vfclass.mask.nxv4i16(
126   <vscale x 4 x i16>,
127   <vscale x 4 x half>,
128   <vscale x 4 x i1>,
129   iXLen, iXLen);
131 define <vscale x 4 x i16> @intrinsic_vfclass_mask_v_nxv4i16_nxv4f16(
132 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv4i16_nxv4f16:
133 ; CHECK:       # %bb.0: # %entry
134 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
135 ; CHECK-NEXT:    vfclass.v v8, v9, v0.t
136 ; CHECK-NEXT:    ret
137   <vscale x 4 x i16> %0,
138   <vscale x 4 x half> %1,
139   <vscale x 4 x i1> %2,
140   iXLen %3) nounwind {
141 entry:
142   %a = call <vscale x 4 x i16> @llvm.riscv.vfclass.mask.nxv4i16(
143     <vscale x 4 x i16> %0,
144     <vscale x 4 x half> %1,
145     <vscale x 4 x i1> %2,
146     iXLen %3, iXLen 0)
148   ret <vscale x 4 x i16> %a
151 declare <vscale x 8 x i16> @llvm.riscv.vfclass.nxv8i16(
152   <vscale x 8 x i16>,
153   <vscale x 8 x half>,
154   iXLen);
156 define <vscale x 8 x i16> @intrinsic_vfclass_v_nxv8i16_nxv8f16(
157 ; CHECK-LABEL: intrinsic_vfclass_v_nxv8i16_nxv8f16:
158 ; CHECK:       # %bb.0: # %entry
159 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
160 ; CHECK-NEXT:    vfclass.v v8, v8
161 ; CHECK-NEXT:    ret
162   <vscale x 8 x half> %0,
163   iXLen %1) nounwind {
164 entry:
165   %a = call <vscale x 8 x i16> @llvm.riscv.vfclass.nxv8i16(
166     <vscale x 8 x i16> undef,
167     <vscale x 8 x half> %0,
168     iXLen %1)
170   ret <vscale x 8 x i16> %a
173 declare <vscale x 8 x i16> @llvm.riscv.vfclass.mask.nxv8i16(
174   <vscale x 8 x i16>,
175   <vscale x 8 x half>,
176   <vscale x 8 x i1>,
177   iXLen, iXLen);
179 define <vscale x 8 x i16> @intrinsic_vfclass_mask_v_nxv8i16_nxv8f16(
180 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv8i16_nxv8f16:
181 ; CHECK:       # %bb.0: # %entry
182 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
183 ; CHECK-NEXT:    vfclass.v v8, v10, v0.t
184 ; CHECK-NEXT:    ret
185   <vscale x 8 x i16> %0,
186   <vscale x 8 x half> %1,
187   <vscale x 8 x i1> %2,
188   iXLen %3) nounwind {
189 entry:
190   %a = call <vscale x 8 x i16> @llvm.riscv.vfclass.mask.nxv8i16(
191     <vscale x 8 x i16> %0,
192     <vscale x 8 x half> %1,
193     <vscale x 8 x i1> %2,
194     iXLen %3, iXLen 0)
196   ret <vscale x 8 x i16> %a
199 declare <vscale x 16 x i16> @llvm.riscv.vfclass.nxv16i16(
200   <vscale x 16 x i16>,
201   <vscale x 16 x half>,
202   iXLen);
204 define <vscale x 16 x i16> @intrinsic_vfclass_v_nxv16i16_nxv16f16(
205 ; CHECK-LABEL: intrinsic_vfclass_v_nxv16i16_nxv16f16:
206 ; CHECK:       # %bb.0: # %entry
207 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
208 ; CHECK-NEXT:    vfclass.v v8, v8
209 ; CHECK-NEXT:    ret
210   <vscale x 16 x half> %0,
211   iXLen %1) nounwind {
212 entry:
213   %a = call <vscale x 16 x i16> @llvm.riscv.vfclass.nxv16i16(
214     <vscale x 16 x i16> undef,
215     <vscale x 16 x half> %0,
216     iXLen %1)
218   ret <vscale x 16 x i16> %a
221 declare <vscale x 16 x i16> @llvm.riscv.vfclass.mask.nxv16i16(
222   <vscale x 16 x i16>,
223   <vscale x 16 x half>,
224   <vscale x 16 x i1>,
225   iXLen, iXLen);
227 define <vscale x 16 x i16> @intrinsic_vfclass_mask_v_nxv16i16_nxv16f16(
228 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv16i16_nxv16f16:
229 ; CHECK:       # %bb.0: # %entry
230 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
231 ; CHECK-NEXT:    vfclass.v v8, v12, v0.t
232 ; CHECK-NEXT:    ret
233   <vscale x 16 x i16> %0,
234   <vscale x 16 x half> %1,
235   <vscale x 16 x i1> %2,
236   iXLen %3) nounwind {
237 entry:
238   %a = call <vscale x 16 x i16> @llvm.riscv.vfclass.mask.nxv16i16(
239     <vscale x 16 x i16> %0,
240     <vscale x 16 x half> %1,
241     <vscale x 16 x i1> %2,
242     iXLen %3, iXLen 0)
244   ret <vscale x 16 x i16> %a
247 declare <vscale x 32 x i16> @llvm.riscv.vfclass.nxv32i16(
248   <vscale x 32 x i16>,
249   <vscale x 32 x half>,
250   iXLen);
252 define <vscale x 32 x i16> @intrinsic_vfclass_v_nxv32i16_nxv32f16(
253 ; CHECK-LABEL: intrinsic_vfclass_v_nxv32i16_nxv32f16:
254 ; CHECK:       # %bb.0: # %entry
255 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
256 ; CHECK-NEXT:    vfclass.v v8, v8
257 ; CHECK-NEXT:    ret
258   <vscale x 32 x half> %0,
259   iXLen %1) nounwind {
260 entry:
261   %a = call <vscale x 32 x i16> @llvm.riscv.vfclass.nxv32i16(
262     <vscale x 32 x i16> undef,
263     <vscale x 32 x half> %0,
264     iXLen %1)
266   ret <vscale x 32 x i16> %a
269 declare <vscale x 32 x i16> @llvm.riscv.vfclass.mask.nxv32i16(
270   <vscale x 32 x i16>,
271   <vscale x 32 x half>,
272   <vscale x 32 x i1>,
273   iXLen, iXLen);
275 define <vscale x 32 x i16> @intrinsic_vfclass_mask_v_nxv32i16_nxv32f16(
276 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv32i16_nxv32f16:
277 ; CHECK:       # %bb.0: # %entry
278 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, mu
279 ; CHECK-NEXT:    vfclass.v v8, v16, v0.t
280 ; CHECK-NEXT:    ret
281   <vscale x 32 x i16> %0,
282   <vscale x 32 x half> %1,
283   <vscale x 32 x i1> %2,
284   iXLen %3) nounwind {
285 entry:
286   %a = call <vscale x 32 x i16> @llvm.riscv.vfclass.mask.nxv32i16(
287     <vscale x 32 x i16> %0,
288     <vscale x 32 x half> %1,
289     <vscale x 32 x i1> %2,
290     iXLen %3, iXLen 0)
292   ret <vscale x 32 x i16> %a
295 declare <vscale x 1 x i32> @llvm.riscv.vfclass.nxv1i32(
296   <vscale x 1 x i32>,
297   <vscale x 1 x float>,
298   iXLen);
300 define <vscale x 1 x i32> @intrinsic_vfclass_v_nxv1i32_nxv1f32(
301 ; CHECK-LABEL: intrinsic_vfclass_v_nxv1i32_nxv1f32:
302 ; CHECK:       # %bb.0: # %entry
303 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
304 ; CHECK-NEXT:    vfclass.v v8, v8
305 ; CHECK-NEXT:    ret
306   <vscale x 1 x float> %0,
307   iXLen %1) nounwind {
308 entry:
309   %a = call <vscale x 1 x i32> @llvm.riscv.vfclass.nxv1i32(
310     <vscale x 1 x i32> undef,
311     <vscale x 1 x float> %0,
312     iXLen %1)
314   ret <vscale x 1 x i32> %a
317 declare <vscale x 1 x i32> @llvm.riscv.vfclass.mask.nxv1i32(
318   <vscale x 1 x i32>,
319   <vscale x 1 x float>,
320   <vscale x 1 x i1>,
321   iXLen, iXLen);
323 define <vscale x 1 x i32> @intrinsic_vfclass_mask_v_nxv1i32_nxv1f32(
324 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv1i32_nxv1f32:
325 ; CHECK:       # %bb.0: # %entry
326 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
327 ; CHECK-NEXT:    vfclass.v v8, v9, v0.t
328 ; CHECK-NEXT:    ret
329   <vscale x 1 x i32> %0,
330   <vscale x 1 x float> %1,
331   <vscale x 1 x i1> %2,
332   iXLen %3) nounwind {
333 entry:
334   %a = call <vscale x 1 x i32> @llvm.riscv.vfclass.mask.nxv1i32(
335     <vscale x 1 x i32> %0,
336     <vscale x 1 x float> %1,
337     <vscale x 1 x i1> %2,
338     iXLen %3, iXLen 0)
340   ret <vscale x 1 x i32> %a
343 declare <vscale x 2 x i32> @llvm.riscv.vfclass.nxv2i32(
344   <vscale x 2 x i32>,
345   <vscale x 2 x float>,
346   iXLen);
348 define <vscale x 2 x i32> @intrinsic_vfclass_v_nxv2i32_nxv2f32(
349 ; CHECK-LABEL: intrinsic_vfclass_v_nxv2i32_nxv2f32:
350 ; CHECK:       # %bb.0: # %entry
351 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
352 ; CHECK-NEXT:    vfclass.v v8, v8
353 ; CHECK-NEXT:    ret
354   <vscale x 2 x float> %0,
355   iXLen %1) nounwind {
356 entry:
357   %a = call <vscale x 2 x i32> @llvm.riscv.vfclass.nxv2i32(
358     <vscale x 2 x i32> undef,
359     <vscale x 2 x float> %0,
360     iXLen %1)
362   ret <vscale x 2 x i32> %a
365 declare <vscale x 2 x i32> @llvm.riscv.vfclass.mask.nxv2i32(
366   <vscale x 2 x i32>,
367   <vscale x 2 x float>,
368   <vscale x 2 x i1>,
369   iXLen, iXLen);
371 define <vscale x 2 x i32> @intrinsic_vfclass_mask_v_nxv2i32_nxv2f32(
372 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv2i32_nxv2f32:
373 ; CHECK:       # %bb.0: # %entry
374 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
375 ; CHECK-NEXT:    vfclass.v v8, v9, v0.t
376 ; CHECK-NEXT:    ret
377   <vscale x 2 x i32> %0,
378   <vscale x 2 x float> %1,
379   <vscale x 2 x i1> %2,
380   iXLen %3) nounwind {
381 entry:
382   %a = call <vscale x 2 x i32> @llvm.riscv.vfclass.mask.nxv2i32(
383     <vscale x 2 x i32> %0,
384     <vscale x 2 x float> %1,
385     <vscale x 2 x i1> %2,
386     iXLen %3, iXLen 0)
388   ret <vscale x 2 x i32> %a
391 declare <vscale x 4 x i32> @llvm.riscv.vfclass.nxv4i32(
392   <vscale x 4 x i32>,
393   <vscale x 4 x float>,
394   iXLen);
396 define <vscale x 4 x i32> @intrinsic_vfclass_v_nxv4i32_nxv4f32(
397 ; CHECK-LABEL: intrinsic_vfclass_v_nxv4i32_nxv4f32:
398 ; CHECK:       # %bb.0: # %entry
399 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
400 ; CHECK-NEXT:    vfclass.v v8, v8
401 ; CHECK-NEXT:    ret
402   <vscale x 4 x float> %0,
403   iXLen %1) nounwind {
404 entry:
405   %a = call <vscale x 4 x i32> @llvm.riscv.vfclass.nxv4i32(
406     <vscale x 4 x i32> undef,
407     <vscale x 4 x float> %0,
408     iXLen %1)
410   ret <vscale x 4 x i32> %a
413 declare <vscale x 4 x i32> @llvm.riscv.vfclass.mask.nxv4i32(
414   <vscale x 4 x i32>,
415   <vscale x 4 x float>,
416   <vscale x 4 x i1>,
417   iXLen, iXLen);
419 define <vscale x 4 x i32> @intrinsic_vfclass_mask_v_nxv4i32_nxv4f32(
420 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv4i32_nxv4f32:
421 ; CHECK:       # %bb.0: # %entry
422 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
423 ; CHECK-NEXT:    vfclass.v v8, v10, v0.t
424 ; CHECK-NEXT:    ret
425   <vscale x 4 x i32> %0,
426   <vscale x 4 x float> %1,
427   <vscale x 4 x i1> %2,
428   iXLen %3) nounwind {
429 entry:
430   %a = call <vscale x 4 x i32> @llvm.riscv.vfclass.mask.nxv4i32(
431     <vscale x 4 x i32> %0,
432     <vscale x 4 x float> %1,
433     <vscale x 4 x i1> %2,
434     iXLen %3, iXLen 0)
436   ret <vscale x 4 x i32> %a
439 declare <vscale x 8 x i32> @llvm.riscv.vfclass.nxv8i32(
440   <vscale x 8 x i32>,
441   <vscale x 8 x float>,
442   iXLen);
444 define <vscale x 8 x i32> @intrinsic_vfclass_v_nxv8i32_nxv8f32(
445 ; CHECK-LABEL: intrinsic_vfclass_v_nxv8i32_nxv8f32:
446 ; CHECK:       # %bb.0: # %entry
447 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
448 ; CHECK-NEXT:    vfclass.v v8, v8
449 ; CHECK-NEXT:    ret
450   <vscale x 8 x float> %0,
451   iXLen %1) nounwind {
452 entry:
453   %a = call <vscale x 8 x i32> @llvm.riscv.vfclass.nxv8i32(
454     <vscale x 8 x i32> undef,
455     <vscale x 8 x float> %0,
456     iXLen %1)
458   ret <vscale x 8 x i32> %a
461 declare <vscale x 8 x i32> @llvm.riscv.vfclass.mask.nxv8i32(
462   <vscale x 8 x i32>,
463   <vscale x 8 x float>,
464   <vscale x 8 x i1>,
465   iXLen, iXLen);
467 define <vscale x 8 x i32> @intrinsic_vfclass_mask_v_nxv8i32_nxv8f32(
468 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv8i32_nxv8f32:
469 ; CHECK:       # %bb.0: # %entry
470 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
471 ; CHECK-NEXT:    vfclass.v v8, v12, v0.t
472 ; CHECK-NEXT:    ret
473   <vscale x 8 x i32> %0,
474   <vscale x 8 x float> %1,
475   <vscale x 8 x i1> %2,
476   iXLen %3) nounwind {
477 entry:
478   %a = call <vscale x 8 x i32> @llvm.riscv.vfclass.mask.nxv8i32(
479     <vscale x 8 x i32> %0,
480     <vscale x 8 x float> %1,
481     <vscale x 8 x i1> %2,
482     iXLen %3, iXLen 0)
484   ret <vscale x 8 x i32> %a
487 declare <vscale x 16 x i32> @llvm.riscv.vfclass.nxv16i32(
488   <vscale x 16 x i32>,
489   <vscale x 16 x float>,
490   iXLen);
492 define <vscale x 16 x i32> @intrinsic_vfclass_v_nxv16i32_nxv16f32(
493 ; CHECK-LABEL: intrinsic_vfclass_v_nxv16i32_nxv16f32:
494 ; CHECK:       # %bb.0: # %entry
495 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
496 ; CHECK-NEXT:    vfclass.v v8, v8
497 ; CHECK-NEXT:    ret
498   <vscale x 16 x float> %0,
499   iXLen %1) nounwind {
500 entry:
501   %a = call <vscale x 16 x i32> @llvm.riscv.vfclass.nxv16i32(
502     <vscale x 16 x i32> undef,
503     <vscale x 16 x float> %0,
504     iXLen %1)
506   ret <vscale x 16 x i32> %a
509 declare <vscale x 16 x i32> @llvm.riscv.vfclass.mask.nxv16i32(
510   <vscale x 16 x i32>,
511   <vscale x 16 x float>,
512   <vscale x 16 x i1>,
513   iXLen, iXLen);
515 define <vscale x 16 x i32> @intrinsic_vfclass_mask_v_nxv16i32_nxv16f32(
516 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv16i32_nxv16f32:
517 ; CHECK:       # %bb.0: # %entry
518 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, mu
519 ; CHECK-NEXT:    vfclass.v v8, v16, v0.t
520 ; CHECK-NEXT:    ret
521   <vscale x 16 x i32> %0,
522   <vscale x 16 x float> %1,
523   <vscale x 16 x i1> %2,
524   iXLen %3) nounwind {
525 entry:
526   %a = call <vscale x 16 x i32> @llvm.riscv.vfclass.mask.nxv16i32(
527     <vscale x 16 x i32> %0,
528     <vscale x 16 x float> %1,
529     <vscale x 16 x i1> %2,
530     iXLen %3, iXLen 0)
532   ret <vscale x 16 x i32> %a
535 declare <vscale x 1 x i64> @llvm.riscv.vfclass.nxv1i64(
536   <vscale x 1 x i64>,
537   <vscale x 1 x double>,
538   iXLen);
540 define <vscale x 1 x i64> @intrinsic_vfclass_v_nxv1i64_nxv1f64(
541 ; CHECK-LABEL: intrinsic_vfclass_v_nxv1i64_nxv1f64:
542 ; CHECK:       # %bb.0: # %entry
543 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
544 ; CHECK-NEXT:    vfclass.v v8, v8
545 ; CHECK-NEXT:    ret
546   <vscale x 1 x double> %0,
547   iXLen %1) nounwind {
548 entry:
549   %a = call <vscale x 1 x i64> @llvm.riscv.vfclass.nxv1i64(
550     <vscale x 1 x i64> undef,
551     <vscale x 1 x double> %0,
552     iXLen %1)
554   ret <vscale x 1 x i64> %a
557 declare <vscale x 1 x i64> @llvm.riscv.vfclass.mask.nxv1i64(
558   <vscale x 1 x i64>,
559   <vscale x 1 x double>,
560   <vscale x 1 x i1>,
561   iXLen, iXLen);
563 define <vscale x 1 x i64> @intrinsic_vfclass_mask_v_nxv1i64_nxv1f64(
564 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv1i64_nxv1f64:
565 ; CHECK:       # %bb.0: # %entry
566 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
567 ; CHECK-NEXT:    vfclass.v v8, v9, v0.t
568 ; CHECK-NEXT:    ret
569   <vscale x 1 x i64> %0,
570   <vscale x 1 x double> %1,
571   <vscale x 1 x i1> %2,
572   iXLen %3) nounwind {
573 entry:
574   %a = call <vscale x 1 x i64> @llvm.riscv.vfclass.mask.nxv1i64(
575     <vscale x 1 x i64> %0,
576     <vscale x 1 x double> %1,
577     <vscale x 1 x i1> %2,
578     iXLen %3, iXLen 0)
580   ret <vscale x 1 x i64> %a
583 declare <vscale x 2 x i64> @llvm.riscv.vfclass.nxv2i64(
584   <vscale x 2 x i64>,
585   <vscale x 2 x double>,
586   iXLen);
588 define <vscale x 2 x i64> @intrinsic_vfclass_v_nxv2i64_nxv2f64(
589 ; CHECK-LABEL: intrinsic_vfclass_v_nxv2i64_nxv2f64:
590 ; CHECK:       # %bb.0: # %entry
591 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
592 ; CHECK-NEXT:    vfclass.v v8, v8
593 ; CHECK-NEXT:    ret
594   <vscale x 2 x double> %0,
595   iXLen %1) nounwind {
596 entry:
597   %a = call <vscale x 2 x i64> @llvm.riscv.vfclass.nxv2i64(
598     <vscale x 2 x i64> undef,
599     <vscale x 2 x double> %0,
600     iXLen %1)
602   ret <vscale x 2 x i64> %a
605 declare <vscale x 2 x i64> @llvm.riscv.vfclass.mask.nxv2i64(
606   <vscale x 2 x i64>,
607   <vscale x 2 x double>,
608   <vscale x 2 x i1>,
609   iXLen, iXLen);
611 define <vscale x 2 x i64> @intrinsic_vfclass_mask_v_nxv2i64_nxv2f64(
612 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv2i64_nxv2f64:
613 ; CHECK:       # %bb.0: # %entry
614 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
615 ; CHECK-NEXT:    vfclass.v v8, v10, v0.t
616 ; CHECK-NEXT:    ret
617   <vscale x 2 x i64> %0,
618   <vscale x 2 x double> %1,
619   <vscale x 2 x i1> %2,
620   iXLen %3) nounwind {
621 entry:
622   %a = call <vscale x 2 x i64> @llvm.riscv.vfclass.mask.nxv2i64(
623     <vscale x 2 x i64> %0,
624     <vscale x 2 x double> %1,
625     <vscale x 2 x i1> %2,
626     iXLen %3, iXLen 0)
628   ret <vscale x 2 x i64> %a
631 declare <vscale x 4 x i64> @llvm.riscv.vfclass.nxv4i64(
632   <vscale x 4 x i64>,
633   <vscale x 4 x double>,
634   iXLen);
636 define <vscale x 4 x i64> @intrinsic_vfclass_v_nxv4i64_nxv4f64(
637 ; CHECK-LABEL: intrinsic_vfclass_v_nxv4i64_nxv4f64:
638 ; CHECK:       # %bb.0: # %entry
639 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
640 ; CHECK-NEXT:    vfclass.v v8, v8
641 ; CHECK-NEXT:    ret
642   <vscale x 4 x double> %0,
643   iXLen %1) nounwind {
644 entry:
645   %a = call <vscale x 4 x i64> @llvm.riscv.vfclass.nxv4i64(
646     <vscale x 4 x i64> undef,
647     <vscale x 4 x double> %0,
648     iXLen %1)
650   ret <vscale x 4 x i64> %a
653 declare <vscale x 4 x i64> @llvm.riscv.vfclass.mask.nxv4i64(
654   <vscale x 4 x i64>,
655   <vscale x 4 x double>,
656   <vscale x 4 x i1>,
657   iXLen, iXLen);
659 define <vscale x 4 x i64> @intrinsic_vfclass_mask_v_nxv4i64_nxv4f64(
660 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv4i64_nxv4f64:
661 ; CHECK:       # %bb.0: # %entry
662 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
663 ; CHECK-NEXT:    vfclass.v v8, v12, v0.t
664 ; CHECK-NEXT:    ret
665   <vscale x 4 x i64> %0,
666   <vscale x 4 x double> %1,
667   <vscale x 4 x i1> %2,
668   iXLen %3) nounwind {
669 entry:
670   %a = call <vscale x 4 x i64> @llvm.riscv.vfclass.mask.nxv4i64(
671     <vscale x 4 x i64> %0,
672     <vscale x 4 x double> %1,
673     <vscale x 4 x i1> %2,
674     iXLen %3, iXLen 0)
676   ret <vscale x 4 x i64> %a
679 declare <vscale x 8 x i64> @llvm.riscv.vfclass.nxv8i64(
680   <vscale x 8 x i64>,
681   <vscale x 8 x double>,
682   iXLen);
684 define <vscale x 8 x i64> @intrinsic_vfclass_v_nxv8i64_nxv8f64(
685 ; CHECK-LABEL: intrinsic_vfclass_v_nxv8i64_nxv8f64:
686 ; CHECK:       # %bb.0: # %entry
687 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
688 ; CHECK-NEXT:    vfclass.v v8, v8
689 ; CHECK-NEXT:    ret
690   <vscale x 8 x double> %0,
691   iXLen %1) nounwind {
692 entry:
693   %a = call <vscale x 8 x i64> @llvm.riscv.vfclass.nxv8i64(
694     <vscale x 8 x i64> undef,
695     <vscale x 8 x double> %0,
696     iXLen %1)
698   ret <vscale x 8 x i64> %a
701 declare <vscale x 8 x i64> @llvm.riscv.vfclass.mask.nxv8i64(
702   <vscale x 8 x i64>,
703   <vscale x 8 x double>,
704   <vscale x 8 x i1>,
705   iXLen, iXLen);
707 define <vscale x 8 x i64> @intrinsic_vfclass_mask_v_nxv8i64_nxv8f64(
708 ; CHECK-LABEL: intrinsic_vfclass_mask_v_nxv8i64_nxv8f64:
709 ; CHECK:       # %bb.0: # %entry
710 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, mu
711 ; CHECK-NEXT:    vfclass.v v8, v16, v0.t
712 ; CHECK-NEXT:    ret
713   <vscale x 8 x i64> %0,
714   <vscale x 8 x double> %1,
715   <vscale x 8 x i1> %2,
716   iXLen %3) nounwind {
717 entry:
718   %a = call <vscale x 8 x i64> @llvm.riscv.vfclass.mask.nxv8i64(
719     <vscale x 8 x i64> %0,
720     <vscale x 8 x double> %1,
721     <vscale x 8 x i1> %2,
722     iXLen %3, iXLen 0)
724   ret <vscale x 8 x i64> %a