xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vfwcvt-f-x.ll (revision 1cb599835ccf7ee8b2d1d5a7f3107e19a26fc6f5)
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,+zvfh \
3; RUN:   -verify-machineinstrs -target-abi=ilp32d | FileCheck %s
4; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+zvfh \
5; RUN:   -verify-machineinstrs -target-abi=lp64d | FileCheck %s
6
7declare <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.nxv1f16.nxv1i8(
8  <vscale x 1 x half>,
9  <vscale x 1 x i8>,
10  iXLen);
11
12define <vscale x 1 x half> @intrinsic_vfwcvt_f.x.v_nxv1f16_nxv1i8(<vscale x 1 x i8> %0, iXLen %1) nounwind {
13; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv1f16_nxv1i8:
14; CHECK:       # %bb.0: # %entry
15; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
16; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
17; CHECK-NEXT:    vmv1r.v v8, v9
18; CHECK-NEXT:    ret
19entry:
20  %a = call <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.nxv1f16.nxv1i8(
21    <vscale x 1 x half> undef,
22    <vscale x 1 x i8> %0,
23    iXLen %1)
24
25  ret <vscale x 1 x half> %a
26}
27
28declare <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f16.nxv1i8(
29  <vscale x 1 x half>,
30  <vscale x 1 x i8>,
31  <vscale x 1 x i1>,
32  iXLen, iXLen);
33
34define <vscale x 1 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv1f16_nxv1i8(<vscale x 1 x half> %0, <vscale x 1 x i8> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
35; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv1f16_nxv1i8:
36; CHECK:       # %bb.0: # %entry
37; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, mu
38; CHECK-NEXT:    vfwcvt.f.x.v v8, v9, v0.t
39; CHECK-NEXT:    ret
40entry:
41  %a = call <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f16.nxv1i8(
42    <vscale x 1 x half> %0,
43    <vscale x 1 x i8> %1,
44    <vscale x 1 x i1> %2,
45    iXLen %3, iXLen 1)
46
47  ret <vscale x 1 x half> %a
48}
49
50declare <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.nxv2f16.nxv2i8(
51  <vscale x 2 x half>,
52  <vscale x 2 x i8>,
53  iXLen);
54
55define <vscale x 2 x half> @intrinsic_vfwcvt_f.x.v_nxv2f16_nxv2i8(<vscale x 2 x i8> %0, iXLen %1) nounwind {
56; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv2f16_nxv2i8:
57; CHECK:       # %bb.0: # %entry
58; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
59; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
60; CHECK-NEXT:    vmv1r.v v8, v9
61; CHECK-NEXT:    ret
62entry:
63  %a = call <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.nxv2f16.nxv2i8(
64    <vscale x 2 x half> undef,
65    <vscale x 2 x i8> %0,
66    iXLen %1)
67
68  ret <vscale x 2 x half> %a
69}
70
71declare <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f16.nxv2i8(
72  <vscale x 2 x half>,
73  <vscale x 2 x i8>,
74  <vscale x 2 x i1>,
75  iXLen, iXLen);
76
77define <vscale x 2 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv2f16_nxv2i8(<vscale x 2 x half> %0, <vscale x 2 x i8> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
78; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv2f16_nxv2i8:
79; CHECK:       # %bb.0: # %entry
80; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, mu
81; CHECK-NEXT:    vfwcvt.f.x.v v8, v9, v0.t
82; CHECK-NEXT:    ret
83entry:
84  %a = call <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f16.nxv2i8(
85    <vscale x 2 x half> %0,
86    <vscale x 2 x i8> %1,
87    <vscale x 2 x i1> %2,
88    iXLen %3, iXLen 1)
89
90  ret <vscale x 2 x half> %a
91}
92
93declare <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.nxv4f16.nxv4i8(
94  <vscale x 4 x half>,
95  <vscale x 4 x i8>,
96  iXLen);
97
98define <vscale x 4 x half> @intrinsic_vfwcvt_f.x.v_nxv4f16_nxv4i8(<vscale x 4 x i8> %0, iXLen %1) nounwind {
99; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv4f16_nxv4i8:
100; CHECK:       # %bb.0: # %entry
101; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
102; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
103; CHECK-NEXT:    vmv1r.v v8, v9
104; CHECK-NEXT:    ret
105entry:
106  %a = call <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.nxv4f16.nxv4i8(
107    <vscale x 4 x half> undef,
108    <vscale x 4 x i8> %0,
109    iXLen %1)
110
111  ret <vscale x 4 x half> %a
112}
113
114declare <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f16.nxv4i8(
115  <vscale x 4 x half>,
116  <vscale x 4 x i8>,
117  <vscale x 4 x i1>,
118  iXLen, iXLen);
119
120define <vscale x 4 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv4f16_nxv4i8(<vscale x 4 x half> %0, <vscale x 4 x i8> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
121; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv4f16_nxv4i8:
122; CHECK:       # %bb.0: # %entry
123; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, mu
124; CHECK-NEXT:    vfwcvt.f.x.v v8, v9, v0.t
125; CHECK-NEXT:    ret
126entry:
127  %a = call <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f16.nxv4i8(
128    <vscale x 4 x half> %0,
129    <vscale x 4 x i8> %1,
130    <vscale x 4 x i1> %2,
131    iXLen %3, iXLen 1)
132
133  ret <vscale x 4 x half> %a
134}
135
136declare <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.nxv8f16.nxv8i8(
137  <vscale x 8 x half>,
138  <vscale x 8 x i8>,
139  iXLen);
140
141define <vscale x 8 x half> @intrinsic_vfwcvt_f.x.v_nxv8f16_nxv8i8(<vscale x 8 x i8> %0, iXLen %1) nounwind {
142; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv8f16_nxv8i8:
143; CHECK:       # %bb.0: # %entry
144; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
145; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
146; CHECK-NEXT:    vmv2r.v v8, v10
147; CHECK-NEXT:    ret
148entry:
149  %a = call <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.nxv8f16.nxv8i8(
150    <vscale x 8 x half> undef,
151    <vscale x 8 x i8> %0,
152    iXLen %1)
153
154  ret <vscale x 8 x half> %a
155}
156
157declare <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f16.nxv8i8(
158  <vscale x 8 x half>,
159  <vscale x 8 x i8>,
160  <vscale x 8 x i1>,
161  iXLen, iXLen);
162
163define <vscale x 8 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv8f16_nxv8i8(<vscale x 8 x half> %0, <vscale x 8 x i8> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
164; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv8f16_nxv8i8:
165; CHECK:       # %bb.0: # %entry
166; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, mu
167; CHECK-NEXT:    vfwcvt.f.x.v v8, v10, v0.t
168; CHECK-NEXT:    ret
169entry:
170  %a = call <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f16.nxv8i8(
171    <vscale x 8 x half> %0,
172    <vscale x 8 x i8> %1,
173    <vscale x 8 x i1> %2,
174    iXLen %3, iXLen 1)
175
176  ret <vscale x 8 x half> %a
177}
178
179declare <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.nxv16f16.nxv16i8(
180  <vscale x 16 x half>,
181  <vscale x 16 x i8>,
182  iXLen);
183
184define <vscale x 16 x half> @intrinsic_vfwcvt_f.x.v_nxv16f16_nxv16i8(<vscale x 16 x i8> %0, iXLen %1) nounwind {
185; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv16f16_nxv16i8:
186; CHECK:       # %bb.0: # %entry
187; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
188; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
189; CHECK-NEXT:    vmv4r.v v8, v12
190; CHECK-NEXT:    ret
191entry:
192  %a = call <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.nxv16f16.nxv16i8(
193    <vscale x 16 x half> undef,
194    <vscale x 16 x i8> %0,
195    iXLen %1)
196
197  ret <vscale x 16 x half> %a
198}
199
200declare <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f16.nxv16i8(
201  <vscale x 16 x half>,
202  <vscale x 16 x i8>,
203  <vscale x 16 x i1>,
204  iXLen, iXLen);
205
206define <vscale x 16 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv16f16_nxv16i8(<vscale x 16 x half> %0, <vscale x 16 x i8> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind {
207; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv16f16_nxv16i8:
208; CHECK:       # %bb.0: # %entry
209; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, mu
210; CHECK-NEXT:    vfwcvt.f.x.v v8, v12, v0.t
211; CHECK-NEXT:    ret
212entry:
213  %a = call <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f16.nxv16i8(
214    <vscale x 16 x half> %0,
215    <vscale x 16 x i8> %1,
216    <vscale x 16 x i1> %2,
217    iXLen %3, iXLen 1)
218
219  ret <vscale x 16 x half> %a
220}
221
222declare <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.nxv32f16.nxv32i8(
223  <vscale x 32 x half>,
224  <vscale x 32 x i8>,
225  iXLen);
226
227define <vscale x 32 x half> @intrinsic_vfwcvt_f.x.v_nxv32f16_nxv32i8(<vscale x 32 x i8> %0, iXLen %1) nounwind {
228; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv32f16_nxv32i8:
229; CHECK:       # %bb.0: # %entry
230; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
231; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
232; CHECK-NEXT:    vmv8r.v v8, v16
233; CHECK-NEXT:    ret
234entry:
235  %a = call <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.nxv32f16.nxv32i8(
236    <vscale x 32 x half> undef,
237    <vscale x 32 x i8> %0,
238    iXLen %1)
239
240  ret <vscale x 32 x half> %a
241}
242
243declare <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv32f16.nxv32i8(
244  <vscale x 32 x half>,
245  <vscale x 32 x i8>,
246  <vscale x 32 x i1>,
247  iXLen, iXLen);
248
249define <vscale x 32 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv32f16_nxv32i8(<vscale x 32 x half> %0, <vscale x 32 x i8> %1, <vscale x 32 x i1> %2, iXLen %3) nounwind {
250; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv32f16_nxv32i8:
251; CHECK:       # %bb.0: # %entry
252; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, mu
253; CHECK-NEXT:    vfwcvt.f.x.v v8, v16, v0.t
254; CHECK-NEXT:    ret
255entry:
256  %a = call <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv32f16.nxv32i8(
257    <vscale x 32 x half> %0,
258    <vscale x 32 x i8> %1,
259    <vscale x 32 x i1> %2,
260    iXLen %3, iXLen 1)
261
262  ret <vscale x 32 x half> %a
263}
264
265declare <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.nxv1f32.nxv1i16(
266  <vscale x 1 x float>,
267  <vscale x 1 x i16>,
268  iXLen);
269
270define <vscale x 1 x float> @intrinsic_vfwcvt_f.x.v_nxv1f32_nxv1i16(<vscale x 1 x i16> %0, iXLen %1) nounwind {
271; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv1f32_nxv1i16:
272; CHECK:       # %bb.0: # %entry
273; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
274; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
275; CHECK-NEXT:    vmv1r.v v8, v9
276; CHECK-NEXT:    ret
277entry:
278  %a = call <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.nxv1f32.nxv1i16(
279    <vscale x 1 x float> undef,
280    <vscale x 1 x i16> %0,
281    iXLen %1)
282
283  ret <vscale x 1 x float> %a
284}
285
286declare <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f32.nxv1i16(
287  <vscale x 1 x float>,
288  <vscale x 1 x i16>,
289  <vscale x 1 x i1>,
290  iXLen, iXLen);
291
292define <vscale x 1 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv1f32_nxv1i16(<vscale x 1 x float> %0, <vscale x 1 x i16> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
293; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv1f32_nxv1i16:
294; CHECK:       # %bb.0: # %entry
295; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
296; CHECK-NEXT:    vfwcvt.f.x.v v8, v9, v0.t
297; CHECK-NEXT:    ret
298entry:
299  %a = call <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f32.nxv1i16(
300    <vscale x 1 x float> %0,
301    <vscale x 1 x i16> %1,
302    <vscale x 1 x i1> %2,
303    iXLen %3, iXLen 1)
304
305  ret <vscale x 1 x float> %a
306}
307
308declare <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.nxv2f32.nxv2i16(
309  <vscale x 2 x float>,
310  <vscale x 2 x i16>,
311  iXLen);
312
313define <vscale x 2 x float> @intrinsic_vfwcvt_f.x.v_nxv2f32_nxv2i16(<vscale x 2 x i16> %0, iXLen %1) nounwind {
314; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv2f32_nxv2i16:
315; CHECK:       # %bb.0: # %entry
316; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
317; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
318; CHECK-NEXT:    vmv1r.v v8, v9
319; CHECK-NEXT:    ret
320entry:
321  %a = call <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.nxv2f32.nxv2i16(
322    <vscale x 2 x float> undef,
323    <vscale x 2 x i16> %0,
324    iXLen %1)
325
326  ret <vscale x 2 x float> %a
327}
328
329declare <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f32.nxv2i16(
330  <vscale x 2 x float>,
331  <vscale x 2 x i16>,
332  <vscale x 2 x i1>,
333  iXLen, iXLen);
334
335define <vscale x 2 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv2f32_nxv2i16(<vscale x 2 x float> %0, <vscale x 2 x i16> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
336; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv2f32_nxv2i16:
337; CHECK:       # %bb.0: # %entry
338; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
339; CHECK-NEXT:    vfwcvt.f.x.v v8, v9, v0.t
340; CHECK-NEXT:    ret
341entry:
342  %a = call <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f32.nxv2i16(
343    <vscale x 2 x float> %0,
344    <vscale x 2 x i16> %1,
345    <vscale x 2 x i1> %2,
346    iXLen %3, iXLen 1)
347
348  ret <vscale x 2 x float> %a
349}
350
351declare <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.nxv4f32.nxv4i16(
352  <vscale x 4 x float>,
353  <vscale x 4 x i16>,
354  iXLen);
355
356define <vscale x 4 x float> @intrinsic_vfwcvt_f.x.v_nxv4f32_nxv4i16(<vscale x 4 x i16> %0, iXLen %1) nounwind {
357; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv4f32_nxv4i16:
358; CHECK:       # %bb.0: # %entry
359; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
360; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
361; CHECK-NEXT:    vmv2r.v v8, v10
362; CHECK-NEXT:    ret
363entry:
364  %a = call <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.nxv4f32.nxv4i16(
365    <vscale x 4 x float> undef,
366    <vscale x 4 x i16> %0,
367    iXLen %1)
368
369  ret <vscale x 4 x float> %a
370}
371
372declare <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f32.nxv4i16(
373  <vscale x 4 x float>,
374  <vscale x 4 x i16>,
375  <vscale x 4 x i1>,
376  iXLen, iXLen);
377
378define <vscale x 4 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv4f32_nxv4i16(<vscale x 4 x float> %0, <vscale x 4 x i16> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
379; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv4f32_nxv4i16:
380; CHECK:       # %bb.0: # %entry
381; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
382; CHECK-NEXT:    vfwcvt.f.x.v v8, v10, v0.t
383; CHECK-NEXT:    ret
384entry:
385  %a = call <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f32.nxv4i16(
386    <vscale x 4 x float> %0,
387    <vscale x 4 x i16> %1,
388    <vscale x 4 x i1> %2,
389    iXLen %3, iXLen 1)
390
391  ret <vscale x 4 x float> %a
392}
393
394declare <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.nxv8f32.nxv8i16(
395  <vscale x 8 x float>,
396  <vscale x 8 x i16>,
397  iXLen);
398
399define <vscale x 8 x float> @intrinsic_vfwcvt_f.x.v_nxv8f32_nxv8i16(<vscale x 8 x i16> %0, iXLen %1) nounwind {
400; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv8f32_nxv8i16:
401; CHECK:       # %bb.0: # %entry
402; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
403; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
404; CHECK-NEXT:    vmv4r.v v8, v12
405; CHECK-NEXT:    ret
406entry:
407  %a = call <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.nxv8f32.nxv8i16(
408    <vscale x 8 x float> undef,
409    <vscale x 8 x i16> %0,
410    iXLen %1)
411
412  ret <vscale x 8 x float> %a
413}
414
415declare <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f32.nxv8i16(
416  <vscale x 8 x float>,
417  <vscale x 8 x i16>,
418  <vscale x 8 x i1>,
419  iXLen, iXLen);
420
421define <vscale x 8 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv8f32_nxv8i16(<vscale x 8 x float> %0, <vscale x 8 x i16> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
422; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv8f32_nxv8i16:
423; CHECK:       # %bb.0: # %entry
424; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
425; CHECK-NEXT:    vfwcvt.f.x.v v8, v12, v0.t
426; CHECK-NEXT:    ret
427entry:
428  %a = call <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f32.nxv8i16(
429    <vscale x 8 x float> %0,
430    <vscale x 8 x i16> %1,
431    <vscale x 8 x i1> %2,
432    iXLen %3, iXLen 1)
433
434  ret <vscale x 8 x float> %a
435}
436
437declare <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.nxv16f32.nxv16i16(
438  <vscale x 16 x float>,
439  <vscale x 16 x i16>,
440  iXLen);
441
442define <vscale x 16 x float> @intrinsic_vfwcvt_f.x.v_nxv16f32_nxv16i16(<vscale x 16 x i16> %0, iXLen %1) nounwind {
443; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv16f32_nxv16i16:
444; CHECK:       # %bb.0: # %entry
445; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
446; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
447; CHECK-NEXT:    vmv8r.v v8, v16
448; CHECK-NEXT:    ret
449entry:
450  %a = call <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.nxv16f32.nxv16i16(
451    <vscale x 16 x float> undef,
452    <vscale x 16 x i16> %0,
453    iXLen %1)
454
455  ret <vscale x 16 x float> %a
456}
457
458declare <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f32.nxv16i16(
459  <vscale x 16 x float>,
460  <vscale x 16 x i16>,
461  <vscale x 16 x i1>,
462  iXLen, iXLen);
463
464define <vscale x 16 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv16f32_nxv16i16(<vscale x 16 x float> %0, <vscale x 16 x i16> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind {
465; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv16f32_nxv16i16:
466; CHECK:       # %bb.0: # %entry
467; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
468; CHECK-NEXT:    vfwcvt.f.x.v v8, v16, v0.t
469; CHECK-NEXT:    ret
470entry:
471  %a = call <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f32.nxv16i16(
472    <vscale x 16 x float> %0,
473    <vscale x 16 x i16> %1,
474    <vscale x 16 x i1> %2,
475    iXLen %3, iXLen 1)
476
477  ret <vscale x 16 x float> %a
478}
479
480declare <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.nxv1f64.nxv1i32(
481  <vscale x 1 x double>,
482  <vscale x 1 x i32>,
483  iXLen);
484
485define <vscale x 1 x double> @intrinsic_vfwcvt_f.x.v_nxv1f64_nxv1i32(<vscale x 1 x i32> %0, iXLen %1) nounwind {
486; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv1f64_nxv1i32:
487; CHECK:       # %bb.0: # %entry
488; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
489; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
490; CHECK-NEXT:    vmv1r.v v8, v9
491; CHECK-NEXT:    ret
492entry:
493  %a = call <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.nxv1f64.nxv1i32(
494    <vscale x 1 x double> undef,
495    <vscale x 1 x i32> %0,
496    iXLen %1)
497
498  ret <vscale x 1 x double> %a
499}
500
501declare <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f64.nxv1i32(
502  <vscale x 1 x double>,
503  <vscale x 1 x i32>,
504  <vscale x 1 x i1>,
505  iXLen, iXLen);
506
507define <vscale x 1 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv1f64_nxv1i32(<vscale x 1 x double> %0, <vscale x 1 x i32> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
508; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv1f64_nxv1i32:
509; CHECK:       # %bb.0: # %entry
510; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
511; CHECK-NEXT:    vfwcvt.f.x.v v8, v9, v0.t
512; CHECK-NEXT:    ret
513entry:
514  %a = call <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f64.nxv1i32(
515    <vscale x 1 x double> %0,
516    <vscale x 1 x i32> %1,
517    <vscale x 1 x i1> %2,
518    iXLen %3, iXLen 1)
519
520  ret <vscale x 1 x double> %a
521}
522
523declare <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.nxv2f64.nxv2i32(
524  <vscale x 2 x double>,
525  <vscale x 2 x i32>,
526  iXLen);
527
528define <vscale x 2 x double> @intrinsic_vfwcvt_f.x.v_nxv2f64_nxv2i32(<vscale x 2 x i32> %0, iXLen %1) nounwind {
529; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv2f64_nxv2i32:
530; CHECK:       # %bb.0: # %entry
531; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
532; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
533; CHECK-NEXT:    vmv2r.v v8, v10
534; CHECK-NEXT:    ret
535entry:
536  %a = call <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.nxv2f64.nxv2i32(
537    <vscale x 2 x double> undef,
538    <vscale x 2 x i32> %0,
539    iXLen %1)
540
541  ret <vscale x 2 x double> %a
542}
543
544declare <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f64.nxv2i32(
545  <vscale x 2 x double>,
546  <vscale x 2 x i32>,
547  <vscale x 2 x i1>,
548  iXLen, iXLen);
549
550define <vscale x 2 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv2f64_nxv2i32(<vscale x 2 x double> %0, <vscale x 2 x i32> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
551; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv2f64_nxv2i32:
552; CHECK:       # %bb.0: # %entry
553; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
554; CHECK-NEXT:    vfwcvt.f.x.v v8, v10, v0.t
555; CHECK-NEXT:    ret
556entry:
557  %a = call <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f64.nxv2i32(
558    <vscale x 2 x double> %0,
559    <vscale x 2 x i32> %1,
560    <vscale x 2 x i1> %2,
561    iXLen %3, iXLen 1)
562
563  ret <vscale x 2 x double> %a
564}
565
566declare <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.nxv4f64.nxv4i32(
567  <vscale x 4 x double>,
568  <vscale x 4 x i32>,
569  iXLen);
570
571define <vscale x 4 x double> @intrinsic_vfwcvt_f.x.v_nxv4f64_nxv4i32(<vscale x 4 x i32> %0, iXLen %1) nounwind {
572; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv4f64_nxv4i32:
573; CHECK:       # %bb.0: # %entry
574; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
575; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
576; CHECK-NEXT:    vmv4r.v v8, v12
577; CHECK-NEXT:    ret
578entry:
579  %a = call <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.nxv4f64.nxv4i32(
580    <vscale x 4 x double> undef,
581    <vscale x 4 x i32> %0,
582    iXLen %1)
583
584  ret <vscale x 4 x double> %a
585}
586
587declare <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f64.nxv4i32(
588  <vscale x 4 x double>,
589  <vscale x 4 x i32>,
590  <vscale x 4 x i1>,
591  iXLen, iXLen);
592
593define <vscale x 4 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv4f64_nxv4i32(<vscale x 4 x double> %0, <vscale x 4 x i32> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
594; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv4f64_nxv4i32:
595; CHECK:       # %bb.0: # %entry
596; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
597; CHECK-NEXT:    vfwcvt.f.x.v v8, v12, v0.t
598; CHECK-NEXT:    ret
599entry:
600  %a = call <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f64.nxv4i32(
601    <vscale x 4 x double> %0,
602    <vscale x 4 x i32> %1,
603    <vscale x 4 x i1> %2,
604    iXLen %3, iXLen 1)
605
606  ret <vscale x 4 x double> %a
607}
608
609declare <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.nxv8f64.nxv8i32(
610  <vscale x 8 x double>,
611  <vscale x 8 x i32>,
612  iXLen);
613
614define <vscale x 8 x double> @intrinsic_vfwcvt_f.x.v_nxv8f64_nxv8i32(<vscale x 8 x i32> %0, iXLen %1) nounwind {
615; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv8f64_nxv8i32:
616; CHECK:       # %bb.0: # %entry
617; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
618; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
619; CHECK-NEXT:    vmv8r.v v8, v16
620; CHECK-NEXT:    ret
621entry:
622  %a = call <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.nxv8f64.nxv8i32(
623    <vscale x 8 x double> undef,
624    <vscale x 8 x i32> %0,
625    iXLen %1)
626
627  ret <vscale x 8 x double> %a
628}
629
630declare <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f64.nxv8i32(
631  <vscale x 8 x double>,
632  <vscale x 8 x i32>,
633  <vscale x 8 x i1>,
634  iXLen, iXLen);
635
636define <vscale x 8 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv8f64_nxv8i32(<vscale x 8 x double> %0, <vscale x 8 x i32> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
637; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv8f64_nxv8i32:
638; CHECK:       # %bb.0: # %entry
639; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
640; CHECK-NEXT:    vfwcvt.f.x.v v8, v16, v0.t
641; CHECK-NEXT:    ret
642entry:
643  %a = call <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f64.nxv8i32(
644    <vscale x 8 x double> %0,
645    <vscale x 8 x i32> %1,
646    <vscale x 8 x i1> %2,
647    iXLen %3, iXLen 1)
648
649  ret <vscale x 8 x double> %a
650}
651