1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d,+experimental-zfh -verify-machineinstrs \
3; RUN:   < %s | FileCheck %s
4declare <vscale x 1 x half> @llvm.riscv.vfncvt.f.xu.w.nxv1f16.nxv1i32(
5  <vscale x 1 x i32>,
6  i64);
7
8define <vscale x 1 x half> @intrinsic_vfncvt_f.xu.w_nxv1f16_nxv1i32(<vscale x 1 x i32> %0, i64 %1) nounwind {
9; CHECK-LABEL: intrinsic_vfncvt_f.xu.w_nxv1f16_nxv1i32:
10; CHECK:       # %bb.0: # %entry
11; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
12; CHECK-NEXT:    vfncvt.f.xu.w v25, v8
13; CHECK-NEXT:    vmv1r.v v8, v25
14; CHECK-NEXT:    ret
15entry:
16  %a = call <vscale x 1 x half> @llvm.riscv.vfncvt.f.xu.w.nxv1f16.nxv1i32(
17    <vscale x 1 x i32> %0,
18    i64 %1)
19
20  ret <vscale x 1 x half> %a
21}
22
23declare <vscale x 1 x half> @llvm.riscv.vfncvt.f.xu.w.mask.nxv1f16.nxv1i32(
24  <vscale x 1 x half>,
25  <vscale x 1 x i32>,
26  <vscale x 1 x i1>,
27  i64);
28
29define <vscale x 1 x half> @intrinsic_vfncvt_mask_f.xu.w_nxv1f16_nxv1i32(<vscale x 1 x half> %0, <vscale x 1 x i32> %1, <vscale x 1 x i1> %2, i64 %3) nounwind {
30; CHECK-LABEL: intrinsic_vfncvt_mask_f.xu.w_nxv1f16_nxv1i32:
31; CHECK:       # %bb.0: # %entry
32; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
33; CHECK-NEXT:    vfncvt.f.xu.w v8, v9, v0.t
34; CHECK-NEXT:    ret
35entry:
36  %a = call <vscale x 1 x half> @llvm.riscv.vfncvt.f.xu.w.mask.nxv1f16.nxv1i32(
37    <vscale x 1 x half> %0,
38    <vscale x 1 x i32> %1,
39    <vscale x 1 x i1> %2,
40    i64 %3)
41
42  ret <vscale x 1 x half> %a
43}
44
45declare <vscale x 2 x half> @llvm.riscv.vfncvt.f.xu.w.nxv2f16.nxv2i32(
46  <vscale x 2 x i32>,
47  i64);
48
49define <vscale x 2 x half> @intrinsic_vfncvt_f.xu.w_nxv2f16_nxv2i32(<vscale x 2 x i32> %0, i64 %1) nounwind {
50; CHECK-LABEL: intrinsic_vfncvt_f.xu.w_nxv2f16_nxv2i32:
51; CHECK:       # %bb.0: # %entry
52; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
53; CHECK-NEXT:    vfncvt.f.xu.w v25, v8
54; CHECK-NEXT:    vmv1r.v v8, v25
55; CHECK-NEXT:    ret
56entry:
57  %a = call <vscale x 2 x half> @llvm.riscv.vfncvt.f.xu.w.nxv2f16.nxv2i32(
58    <vscale x 2 x i32> %0,
59    i64 %1)
60
61  ret <vscale x 2 x half> %a
62}
63
64declare <vscale x 2 x half> @llvm.riscv.vfncvt.f.xu.w.mask.nxv2f16.nxv2i32(
65  <vscale x 2 x half>,
66  <vscale x 2 x i32>,
67  <vscale x 2 x i1>,
68  i64);
69
70define <vscale x 2 x half> @intrinsic_vfncvt_mask_f.xu.w_nxv2f16_nxv2i32(<vscale x 2 x half> %0, <vscale x 2 x i32> %1, <vscale x 2 x i1> %2, i64 %3) nounwind {
71; CHECK-LABEL: intrinsic_vfncvt_mask_f.xu.w_nxv2f16_nxv2i32:
72; CHECK:       # %bb.0: # %entry
73; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
74; CHECK-NEXT:    vfncvt.f.xu.w v8, v9, v0.t
75; CHECK-NEXT:    ret
76entry:
77  %a = call <vscale x 2 x half> @llvm.riscv.vfncvt.f.xu.w.mask.nxv2f16.nxv2i32(
78    <vscale x 2 x half> %0,
79    <vscale x 2 x i32> %1,
80    <vscale x 2 x i1> %2,
81    i64 %3)
82
83  ret <vscale x 2 x half> %a
84}
85
86declare <vscale x 4 x half> @llvm.riscv.vfncvt.f.xu.w.nxv4f16.nxv4i32(
87  <vscale x 4 x i32>,
88  i64);
89
90define <vscale x 4 x half> @intrinsic_vfncvt_f.xu.w_nxv4f16_nxv4i32(<vscale x 4 x i32> %0, i64 %1) nounwind {
91; CHECK-LABEL: intrinsic_vfncvt_f.xu.w_nxv4f16_nxv4i32:
92; CHECK:       # %bb.0: # %entry
93; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
94; CHECK-NEXT:    vfncvt.f.xu.w v25, v8
95; CHECK-NEXT:    vmv1r.v v8, v25
96; CHECK-NEXT:    ret
97entry:
98  %a = call <vscale x 4 x half> @llvm.riscv.vfncvt.f.xu.w.nxv4f16.nxv4i32(
99    <vscale x 4 x i32> %0,
100    i64 %1)
101
102  ret <vscale x 4 x half> %a
103}
104
105declare <vscale x 4 x half> @llvm.riscv.vfncvt.f.xu.w.mask.nxv4f16.nxv4i32(
106  <vscale x 4 x half>,
107  <vscale x 4 x i32>,
108  <vscale x 4 x i1>,
109  i64);
110
111define <vscale x 4 x half> @intrinsic_vfncvt_mask_f.xu.w_nxv4f16_nxv4i32(<vscale x 4 x half> %0, <vscale x 4 x i32> %1, <vscale x 4 x i1> %2, i64 %3) nounwind {
112; CHECK-LABEL: intrinsic_vfncvt_mask_f.xu.w_nxv4f16_nxv4i32:
113; CHECK:       # %bb.0: # %entry
114; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
115; CHECK-NEXT:    vfncvt.f.xu.w v8, v10, v0.t
116; CHECK-NEXT:    ret
117entry:
118  %a = call <vscale x 4 x half> @llvm.riscv.vfncvt.f.xu.w.mask.nxv4f16.nxv4i32(
119    <vscale x 4 x half> %0,
120    <vscale x 4 x i32> %1,
121    <vscale x 4 x i1> %2,
122    i64 %3)
123
124  ret <vscale x 4 x half> %a
125}
126
127declare <vscale x 8 x half> @llvm.riscv.vfncvt.f.xu.w.nxv8f16.nxv8i32(
128  <vscale x 8 x i32>,
129  i64);
130
131define <vscale x 8 x half> @intrinsic_vfncvt_f.xu.w_nxv8f16_nxv8i32(<vscale x 8 x i32> %0, i64 %1) nounwind {
132; CHECK-LABEL: intrinsic_vfncvt_f.xu.w_nxv8f16_nxv8i32:
133; CHECK:       # %bb.0: # %entry
134; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
135; CHECK-NEXT:    vfncvt.f.xu.w v26, v8
136; CHECK-NEXT:    vmv2r.v v8, v26
137; CHECK-NEXT:    ret
138entry:
139  %a = call <vscale x 8 x half> @llvm.riscv.vfncvt.f.xu.w.nxv8f16.nxv8i32(
140    <vscale x 8 x i32> %0,
141    i64 %1)
142
143  ret <vscale x 8 x half> %a
144}
145
146declare <vscale x 8 x half> @llvm.riscv.vfncvt.f.xu.w.mask.nxv8f16.nxv8i32(
147  <vscale x 8 x half>,
148  <vscale x 8 x i32>,
149  <vscale x 8 x i1>,
150  i64);
151
152define <vscale x 8 x half> @intrinsic_vfncvt_mask_f.xu.w_nxv8f16_nxv8i32(<vscale x 8 x half> %0, <vscale x 8 x i32> %1, <vscale x 8 x i1> %2, i64 %3) nounwind {
153; CHECK-LABEL: intrinsic_vfncvt_mask_f.xu.w_nxv8f16_nxv8i32:
154; CHECK:       # %bb.0: # %entry
155; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
156; CHECK-NEXT:    vfncvt.f.xu.w v8, v12, v0.t
157; CHECK-NEXT:    ret
158entry:
159  %a = call <vscale x 8 x half> @llvm.riscv.vfncvt.f.xu.w.mask.nxv8f16.nxv8i32(
160    <vscale x 8 x half> %0,
161    <vscale x 8 x i32> %1,
162    <vscale x 8 x i1> %2,
163    i64 %3)
164
165  ret <vscale x 8 x half> %a
166}
167
168declare <vscale x 16 x half> @llvm.riscv.vfncvt.f.xu.w.nxv16f16.nxv16i32(
169  <vscale x 16 x i32>,
170  i64);
171
172define <vscale x 16 x half> @intrinsic_vfncvt_f.xu.w_nxv16f16_nxv16i32(<vscale x 16 x i32> %0, i64 %1) nounwind {
173; CHECK-LABEL: intrinsic_vfncvt_f.xu.w_nxv16f16_nxv16i32:
174; CHECK:       # %bb.0: # %entry
175; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
176; CHECK-NEXT:    vfncvt.f.xu.w v28, v8
177; CHECK-NEXT:    vmv4r.v v8, v28
178; CHECK-NEXT:    ret
179entry:
180  %a = call <vscale x 16 x half> @llvm.riscv.vfncvt.f.xu.w.nxv16f16.nxv16i32(
181    <vscale x 16 x i32> %0,
182    i64 %1)
183
184  ret <vscale x 16 x half> %a
185}
186
187declare <vscale x 16 x half> @llvm.riscv.vfncvt.f.xu.w.mask.nxv16f16.nxv16i32(
188  <vscale x 16 x half>,
189  <vscale x 16 x i32>,
190  <vscale x 16 x i1>,
191  i64);
192
193define <vscale x 16 x half> @intrinsic_vfncvt_mask_f.xu.w_nxv16f16_nxv16i32(<vscale x 16 x half> %0, <vscale x 16 x i32> %1, <vscale x 16 x i1> %2, i64 %3) nounwind {
194; CHECK-LABEL: intrinsic_vfncvt_mask_f.xu.w_nxv16f16_nxv16i32:
195; CHECK:       # %bb.0: # %entry
196; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
197; CHECK-NEXT:    vfncvt.f.xu.w v8, v16, v0.t
198; CHECK-NEXT:    ret
199entry:
200  %a = call <vscale x 16 x half> @llvm.riscv.vfncvt.f.xu.w.mask.nxv16f16.nxv16i32(
201    <vscale x 16 x half> %0,
202    <vscale x 16 x i32> %1,
203    <vscale x 16 x i1> %2,
204    i64 %3)
205
206  ret <vscale x 16 x half> %a
207}
208
209declare <vscale x 1 x float> @llvm.riscv.vfncvt.f.xu.w.nxv1f32.nxv1i64(
210  <vscale x 1 x i64>,
211  i64);
212
213define <vscale x 1 x float> @intrinsic_vfncvt_f.xu.w_nxv1f32_nxv1i64(<vscale x 1 x i64> %0, i64 %1) nounwind {
214; CHECK-LABEL: intrinsic_vfncvt_f.xu.w_nxv1f32_nxv1i64:
215; CHECK:       # %bb.0: # %entry
216; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
217; CHECK-NEXT:    vfncvt.f.xu.w v25, v8
218; CHECK-NEXT:    vmv1r.v v8, v25
219; CHECK-NEXT:    ret
220entry:
221  %a = call <vscale x 1 x float> @llvm.riscv.vfncvt.f.xu.w.nxv1f32.nxv1i64(
222    <vscale x 1 x i64> %0,
223    i64 %1)
224
225  ret <vscale x 1 x float> %a
226}
227
228declare <vscale x 1 x float> @llvm.riscv.vfncvt.f.xu.w.mask.nxv1f32.nxv1i64(
229  <vscale x 1 x float>,
230  <vscale x 1 x i64>,
231  <vscale x 1 x i1>,
232  i64);
233
234define <vscale x 1 x float> @intrinsic_vfncvt_mask_f.xu.w_nxv1f32_nxv1i64(<vscale x 1 x float> %0, <vscale x 1 x i64> %1, <vscale x 1 x i1> %2, i64 %3) nounwind {
235; CHECK-LABEL: intrinsic_vfncvt_mask_f.xu.w_nxv1f32_nxv1i64:
236; CHECK:       # %bb.0: # %entry
237; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
238; CHECK-NEXT:    vfncvt.f.xu.w v8, v9, v0.t
239; CHECK-NEXT:    ret
240entry:
241  %a = call <vscale x 1 x float> @llvm.riscv.vfncvt.f.xu.w.mask.nxv1f32.nxv1i64(
242    <vscale x 1 x float> %0,
243    <vscale x 1 x i64> %1,
244    <vscale x 1 x i1> %2,
245    i64 %3)
246
247  ret <vscale x 1 x float> %a
248}
249
250declare <vscale x 2 x float> @llvm.riscv.vfncvt.f.xu.w.nxv2f32.nxv2i64(
251  <vscale x 2 x i64>,
252  i64);
253
254define <vscale x 2 x float> @intrinsic_vfncvt_f.xu.w_nxv2f32_nxv2i64(<vscale x 2 x i64> %0, i64 %1) nounwind {
255; CHECK-LABEL: intrinsic_vfncvt_f.xu.w_nxv2f32_nxv2i64:
256; CHECK:       # %bb.0: # %entry
257; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
258; CHECK-NEXT:    vfncvt.f.xu.w v25, v8
259; CHECK-NEXT:    vmv1r.v v8, v25
260; CHECK-NEXT:    ret
261entry:
262  %a = call <vscale x 2 x float> @llvm.riscv.vfncvt.f.xu.w.nxv2f32.nxv2i64(
263    <vscale x 2 x i64> %0,
264    i64 %1)
265
266  ret <vscale x 2 x float> %a
267}
268
269declare <vscale x 2 x float> @llvm.riscv.vfncvt.f.xu.w.mask.nxv2f32.nxv2i64(
270  <vscale x 2 x float>,
271  <vscale x 2 x i64>,
272  <vscale x 2 x i1>,
273  i64);
274
275define <vscale x 2 x float> @intrinsic_vfncvt_mask_f.xu.w_nxv2f32_nxv2i64(<vscale x 2 x float> %0, <vscale x 2 x i64> %1, <vscale x 2 x i1> %2, i64 %3) nounwind {
276; CHECK-LABEL: intrinsic_vfncvt_mask_f.xu.w_nxv2f32_nxv2i64:
277; CHECK:       # %bb.0: # %entry
278; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
279; CHECK-NEXT:    vfncvt.f.xu.w v8, v10, v0.t
280; CHECK-NEXT:    ret
281entry:
282  %a = call <vscale x 2 x float> @llvm.riscv.vfncvt.f.xu.w.mask.nxv2f32.nxv2i64(
283    <vscale x 2 x float> %0,
284    <vscale x 2 x i64> %1,
285    <vscale x 2 x i1> %2,
286    i64 %3)
287
288  ret <vscale x 2 x float> %a
289}
290
291declare <vscale x 4 x float> @llvm.riscv.vfncvt.f.xu.w.nxv4f32.nxv4i64(
292  <vscale x 4 x i64>,
293  i64);
294
295define <vscale x 4 x float> @intrinsic_vfncvt_f.xu.w_nxv4f32_nxv4i64(<vscale x 4 x i64> %0, i64 %1) nounwind {
296; CHECK-LABEL: intrinsic_vfncvt_f.xu.w_nxv4f32_nxv4i64:
297; CHECK:       # %bb.0: # %entry
298; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
299; CHECK-NEXT:    vfncvt.f.xu.w v26, v8
300; CHECK-NEXT:    vmv2r.v v8, v26
301; CHECK-NEXT:    ret
302entry:
303  %a = call <vscale x 4 x float> @llvm.riscv.vfncvt.f.xu.w.nxv4f32.nxv4i64(
304    <vscale x 4 x i64> %0,
305    i64 %1)
306
307  ret <vscale x 4 x float> %a
308}
309
310declare <vscale x 4 x float> @llvm.riscv.vfncvt.f.xu.w.mask.nxv4f32.nxv4i64(
311  <vscale x 4 x float>,
312  <vscale x 4 x i64>,
313  <vscale x 4 x i1>,
314  i64);
315
316define <vscale x 4 x float> @intrinsic_vfncvt_mask_f.xu.w_nxv4f32_nxv4i64(<vscale x 4 x float> %0, <vscale x 4 x i64> %1, <vscale x 4 x i1> %2, i64 %3) nounwind {
317; CHECK-LABEL: intrinsic_vfncvt_mask_f.xu.w_nxv4f32_nxv4i64:
318; CHECK:       # %bb.0: # %entry
319; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
320; CHECK-NEXT:    vfncvt.f.xu.w v8, v12, v0.t
321; CHECK-NEXT:    ret
322entry:
323  %a = call <vscale x 4 x float> @llvm.riscv.vfncvt.f.xu.w.mask.nxv4f32.nxv4i64(
324    <vscale x 4 x float> %0,
325    <vscale x 4 x i64> %1,
326    <vscale x 4 x i1> %2,
327    i64 %3)
328
329  ret <vscale x 4 x float> %a
330}
331
332declare <vscale x 8 x float> @llvm.riscv.vfncvt.f.xu.w.nxv8f32.nxv8i64(
333  <vscale x 8 x i64>,
334  i64);
335
336define <vscale x 8 x float> @intrinsic_vfncvt_f.xu.w_nxv8f32_nxv8i64(<vscale x 8 x i64> %0, i64 %1) nounwind {
337; CHECK-LABEL: intrinsic_vfncvt_f.xu.w_nxv8f32_nxv8i64:
338; CHECK:       # %bb.0: # %entry
339; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
340; CHECK-NEXT:    vfncvt.f.xu.w v28, v8
341; CHECK-NEXT:    vmv4r.v v8, v28
342; CHECK-NEXT:    ret
343entry:
344  %a = call <vscale x 8 x float> @llvm.riscv.vfncvt.f.xu.w.nxv8f32.nxv8i64(
345    <vscale x 8 x i64> %0,
346    i64 %1)
347
348  ret <vscale x 8 x float> %a
349}
350
351declare <vscale x 8 x float> @llvm.riscv.vfncvt.f.xu.w.mask.nxv8f32.nxv8i64(
352  <vscale x 8 x float>,
353  <vscale x 8 x i64>,
354  <vscale x 8 x i1>,
355  i64);
356
357define <vscale x 8 x float> @intrinsic_vfncvt_mask_f.xu.w_nxv8f32_nxv8i64(<vscale x 8 x float> %0, <vscale x 8 x i64> %1, <vscale x 8 x i1> %2, i64 %3) nounwind {
358; CHECK-LABEL: intrinsic_vfncvt_mask_f.xu.w_nxv8f32_nxv8i64:
359; CHECK:       # %bb.0: # %entry
360; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
361; CHECK-NEXT:    vfncvt.f.xu.w v8, v16, v0.t
362; CHECK-NEXT:    ret
363entry:
364  %a = call <vscale x 8 x float> @llvm.riscv.vfncvt.f.xu.w.mask.nxv8f32.nxv8i64(
365    <vscale x 8 x float> %0,
366    <vscale x 8 x i64> %1,
367    <vscale x 8 x i1> %2,
368    i64 %3)
369
370  ret <vscale x 8 x float> %a
371}
372