1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+experimental-zvfh,+v -target-abi=ilp32d \
3; RUN:     -verify-machineinstrs < %s | FileCheck %s
4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+experimental-zvfh,+v -target-abi=lp64d \
5; RUN:     -verify-machineinstrs < %s | FileCheck %s
6
7define <vscale x 1 x i1> @vfptosi_nxv1f16_nxv1i1(<vscale x 1 x half> %va) {
8; CHECK-LABEL: vfptosi_nxv1f16_nxv1i1:
9; CHECK:       # %bb.0:
10; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, mu
11; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
12; CHECK-NEXT:    vand.vi v8, v9, 1
13; CHECK-NEXT:    vmsne.vi v0, v8, 0
14; CHECK-NEXT:    ret
15  %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i1>
16  ret <vscale x 1 x i1> %evec
17}
18
19define <vscale x 1 x i1> @vfptoui_nxv1f16_nxv1i1(<vscale x 1 x half> %va) {
20; CHECK-LABEL: vfptoui_nxv1f16_nxv1i1:
21; CHECK:       # %bb.0:
22; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, mu
23; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
24; CHECK-NEXT:    vand.vi v8, v9, 1
25; CHECK-NEXT:    vmsne.vi v0, v8, 0
26; CHECK-NEXT:    ret
27  %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i1>
28  ret <vscale x 1 x i1> %evec
29}
30
31define <vscale x 1 x i8> @vfptosi_nxv1f16_nxv1i8(<vscale x 1 x half> %va) {
32; CHECK-LABEL: vfptosi_nxv1f16_nxv1i8:
33; CHECK:       # %bb.0:
34; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, mu
35; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
36; CHECK-NEXT:    vmv1r.v v8, v9
37; CHECK-NEXT:    ret
38  %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i8>
39  ret <vscale x 1 x i8> %evec
40}
41
42define <vscale x 1 x i8> @vfptoui_nxv1f16_nxv1i8(<vscale x 1 x half> %va) {
43; CHECK-LABEL: vfptoui_nxv1f16_nxv1i8:
44; CHECK:       # %bb.0:
45; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, mu
46; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
47; CHECK-NEXT:    vmv1r.v v8, v9
48; CHECK-NEXT:    ret
49  %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i8>
50  ret <vscale x 1 x i8> %evec
51}
52
53define <vscale x 1 x i16> @vfptosi_nxv1f16_nxv1i16(<vscale x 1 x half> %va) {
54; CHECK-LABEL: vfptosi_nxv1f16_nxv1i16:
55; CHECK:       # %bb.0:
56; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
57; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
58; CHECK-NEXT:    ret
59  %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i16>
60  ret <vscale x 1 x i16> %evec
61}
62
63define <vscale x 1 x i16> @vfptoui_nxv1f16_nxv1i16(<vscale x 1 x half> %va) {
64; CHECK-LABEL: vfptoui_nxv1f16_nxv1i16:
65; CHECK:       # %bb.0:
66; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
67; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
68; CHECK-NEXT:    ret
69  %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i16>
70  ret <vscale x 1 x i16> %evec
71}
72
73define <vscale x 1 x i32> @vfptosi_nxv1f16_nxv1i32(<vscale x 1 x half> %va) {
74; CHECK-LABEL: vfptosi_nxv1f16_nxv1i32:
75; CHECK:       # %bb.0:
76; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
77; CHECK-NEXT:    vfwcvt.rtz.x.f.v v9, v8
78; CHECK-NEXT:    vmv1r.v v8, v9
79; CHECK-NEXT:    ret
80  %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i32>
81  ret <vscale x 1 x i32> %evec
82}
83
84define <vscale x 1 x i32> @vfptoui_nxv1f16_nxv1i32(<vscale x 1 x half> %va) {
85; CHECK-LABEL: vfptoui_nxv1f16_nxv1i32:
86; CHECK:       # %bb.0:
87; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
88; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v9, v8
89; CHECK-NEXT:    vmv1r.v v8, v9
90; CHECK-NEXT:    ret
91  %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i32>
92  ret <vscale x 1 x i32> %evec
93}
94
95define <vscale x 1 x i64> @vfptosi_nxv1f16_nxv1i64(<vscale x 1 x half> %va) {
96; CHECK-LABEL: vfptosi_nxv1f16_nxv1i64:
97; CHECK:       # %bb.0:
98; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
99; CHECK-NEXT:    vfwcvt.f.f.v v9, v8
100; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
101; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v9
102; CHECK-NEXT:    ret
103  %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i64>
104  ret <vscale x 1 x i64> %evec
105}
106
107define <vscale x 1 x i64> @vfptoui_nxv1f16_nxv1i64(<vscale x 1 x half> %va) {
108; CHECK-LABEL: vfptoui_nxv1f16_nxv1i64:
109; CHECK:       # %bb.0:
110; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
111; CHECK-NEXT:    vfwcvt.f.f.v v9, v8
112; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
113; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
114; CHECK-NEXT:    ret
115  %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i64>
116  ret <vscale x 1 x i64> %evec
117}
118
119define <vscale x 2 x i1> @vfptosi_nxv2f16_nxv2i1(<vscale x 2 x half> %va) {
120; CHECK-LABEL: vfptosi_nxv2f16_nxv2i1:
121; CHECK:       # %bb.0:
122; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, mu
123; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
124; CHECK-NEXT:    vand.vi v8, v9, 1
125; CHECK-NEXT:    vmsne.vi v0, v8, 0
126; CHECK-NEXT:    ret
127  %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i1>
128  ret <vscale x 2 x i1> %evec
129}
130
131define <vscale x 2 x i1> @vfptoui_nxv2f16_nxv2i1(<vscale x 2 x half> %va) {
132; CHECK-LABEL: vfptoui_nxv2f16_nxv2i1:
133; CHECK:       # %bb.0:
134; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, mu
135; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
136; CHECK-NEXT:    vand.vi v8, v9, 1
137; CHECK-NEXT:    vmsne.vi v0, v8, 0
138; CHECK-NEXT:    ret
139  %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i1>
140  ret <vscale x 2 x i1> %evec
141}
142
143define <vscale x 2 x i8> @vfptosi_nxv2f16_nxv2i8(<vscale x 2 x half> %va) {
144; CHECK-LABEL: vfptosi_nxv2f16_nxv2i8:
145; CHECK:       # %bb.0:
146; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, mu
147; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
148; CHECK-NEXT:    vmv1r.v v8, v9
149; CHECK-NEXT:    ret
150  %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i8>
151  ret <vscale x 2 x i8> %evec
152}
153
154define <vscale x 2 x i8> @vfptoui_nxv2f16_nxv2i8(<vscale x 2 x half> %va) {
155; CHECK-LABEL: vfptoui_nxv2f16_nxv2i8:
156; CHECK:       # %bb.0:
157; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, mu
158; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
159; CHECK-NEXT:    vmv1r.v v8, v9
160; CHECK-NEXT:    ret
161  %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i8>
162  ret <vscale x 2 x i8> %evec
163}
164
165define <vscale x 2 x i16> @vfptosi_nxv2f16_nxv2i16(<vscale x 2 x half> %va) {
166; CHECK-LABEL: vfptosi_nxv2f16_nxv2i16:
167; CHECK:       # %bb.0:
168; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
169; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
170; CHECK-NEXT:    ret
171  %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i16>
172  ret <vscale x 2 x i16> %evec
173}
174
175define <vscale x 2 x i16> @vfptoui_nxv2f16_nxv2i16(<vscale x 2 x half> %va) {
176; CHECK-LABEL: vfptoui_nxv2f16_nxv2i16:
177; CHECK:       # %bb.0:
178; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
179; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
180; CHECK-NEXT:    ret
181  %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i16>
182  ret <vscale x 2 x i16> %evec
183}
184
185define <vscale x 2 x i32> @vfptosi_nxv2f16_nxv2i32(<vscale x 2 x half> %va) {
186; CHECK-LABEL: vfptosi_nxv2f16_nxv2i32:
187; CHECK:       # %bb.0:
188; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
189; CHECK-NEXT:    vfwcvt.rtz.x.f.v v9, v8
190; CHECK-NEXT:    vmv1r.v v8, v9
191; CHECK-NEXT:    ret
192  %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i32>
193  ret <vscale x 2 x i32> %evec
194}
195
196define <vscale x 2 x i32> @vfptoui_nxv2f16_nxv2i32(<vscale x 2 x half> %va) {
197; CHECK-LABEL: vfptoui_nxv2f16_nxv2i32:
198; CHECK:       # %bb.0:
199; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
200; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v9, v8
201; CHECK-NEXT:    vmv1r.v v8, v9
202; CHECK-NEXT:    ret
203  %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i32>
204  ret <vscale x 2 x i32> %evec
205}
206
207define <vscale x 2 x i64> @vfptosi_nxv2f16_nxv2i64(<vscale x 2 x half> %va) {
208; CHECK-LABEL: vfptosi_nxv2f16_nxv2i64:
209; CHECK:       # %bb.0:
210; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
211; CHECK-NEXT:    vfwcvt.f.f.v v10, v8
212; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
213; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v10
214; CHECK-NEXT:    ret
215  %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i64>
216  ret <vscale x 2 x i64> %evec
217}
218
219define <vscale x 2 x i64> @vfptoui_nxv2f16_nxv2i64(<vscale x 2 x half> %va) {
220; CHECK-LABEL: vfptoui_nxv2f16_nxv2i64:
221; CHECK:       # %bb.0:
222; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
223; CHECK-NEXT:    vfwcvt.f.f.v v10, v8
224; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
225; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v10
226; CHECK-NEXT:    ret
227  %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i64>
228  ret <vscale x 2 x i64> %evec
229}
230
231define <vscale x 4 x i1> @vfptosi_nxv4f16_nxv4i1(<vscale x 4 x half> %va) {
232; CHECK-LABEL: vfptosi_nxv4f16_nxv4i1:
233; CHECK:       # %bb.0:
234; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, mu
235; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
236; CHECK-NEXT:    vand.vi v8, v9, 1
237; CHECK-NEXT:    vmsne.vi v0, v8, 0
238; CHECK-NEXT:    ret
239  %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i1>
240  ret <vscale x 4 x i1> %evec
241}
242
243define <vscale x 4 x i1> @vfptoui_nxv4f16_nxv4i1(<vscale x 4 x half> %va) {
244; CHECK-LABEL: vfptoui_nxv4f16_nxv4i1:
245; CHECK:       # %bb.0:
246; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, mu
247; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
248; CHECK-NEXT:    vand.vi v8, v9, 1
249; CHECK-NEXT:    vmsne.vi v0, v8, 0
250; CHECK-NEXT:    ret
251  %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i1>
252  ret <vscale x 4 x i1> %evec
253}
254
255define <vscale x 4 x i8> @vfptosi_nxv4f16_nxv4i8(<vscale x 4 x half> %va) {
256; CHECK-LABEL: vfptosi_nxv4f16_nxv4i8:
257; CHECK:       # %bb.0:
258; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, mu
259; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
260; CHECK-NEXT:    vmv1r.v v8, v9
261; CHECK-NEXT:    ret
262  %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i8>
263  ret <vscale x 4 x i8> %evec
264}
265
266define <vscale x 4 x i8> @vfptoui_nxv4f16_nxv4i8(<vscale x 4 x half> %va) {
267; CHECK-LABEL: vfptoui_nxv4f16_nxv4i8:
268; CHECK:       # %bb.0:
269; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, mu
270; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
271; CHECK-NEXT:    vmv1r.v v8, v9
272; CHECK-NEXT:    ret
273  %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i8>
274  ret <vscale x 4 x i8> %evec
275}
276
277define <vscale x 4 x i16> @vfptosi_nxv4f16_nxv4i16(<vscale x 4 x half> %va) {
278; CHECK-LABEL: vfptosi_nxv4f16_nxv4i16:
279; CHECK:       # %bb.0:
280; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
281; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
282; CHECK-NEXT:    ret
283  %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i16>
284  ret <vscale x 4 x i16> %evec
285}
286
287define <vscale x 4 x i16> @vfptoui_nxv4f16_nxv4i16(<vscale x 4 x half> %va) {
288; CHECK-LABEL: vfptoui_nxv4f16_nxv4i16:
289; CHECK:       # %bb.0:
290; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
291; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
292; CHECK-NEXT:    ret
293  %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i16>
294  ret <vscale x 4 x i16> %evec
295}
296
297define <vscale x 4 x i32> @vfptosi_nxv4f16_nxv4i32(<vscale x 4 x half> %va) {
298; CHECK-LABEL: vfptosi_nxv4f16_nxv4i32:
299; CHECK:       # %bb.0:
300; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
301; CHECK-NEXT:    vfwcvt.rtz.x.f.v v10, v8
302; CHECK-NEXT:    vmv2r.v v8, v10
303; CHECK-NEXT:    ret
304  %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i32>
305  ret <vscale x 4 x i32> %evec
306}
307
308define <vscale x 4 x i32> @vfptoui_nxv4f16_nxv4i32(<vscale x 4 x half> %va) {
309; CHECK-LABEL: vfptoui_nxv4f16_nxv4i32:
310; CHECK:       # %bb.0:
311; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
312; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v10, v8
313; CHECK-NEXT:    vmv2r.v v8, v10
314; CHECK-NEXT:    ret
315  %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i32>
316  ret <vscale x 4 x i32> %evec
317}
318
319define <vscale x 4 x i64> @vfptosi_nxv4f16_nxv4i64(<vscale x 4 x half> %va) {
320; CHECK-LABEL: vfptosi_nxv4f16_nxv4i64:
321; CHECK:       # %bb.0:
322; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
323; CHECK-NEXT:    vfwcvt.f.f.v v12, v8
324; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
325; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v12
326; CHECK-NEXT:    ret
327  %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i64>
328  ret <vscale x 4 x i64> %evec
329}
330
331define <vscale x 4 x i64> @vfptoui_nxv4f16_nxv4i64(<vscale x 4 x half> %va) {
332; CHECK-LABEL: vfptoui_nxv4f16_nxv4i64:
333; CHECK:       # %bb.0:
334; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
335; CHECK-NEXT:    vfwcvt.f.f.v v12, v8
336; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
337; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
338; CHECK-NEXT:    ret
339  %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i64>
340  ret <vscale x 4 x i64> %evec
341}
342
343define <vscale x 8 x i1> @vfptosi_nxv8f16_nxv8i1(<vscale x 8 x half> %va) {
344; CHECK-LABEL: vfptosi_nxv8f16_nxv8i1:
345; CHECK:       # %bb.0:
346; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, mu
347; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
348; CHECK-NEXT:    vand.vi v8, v10, 1
349; CHECK-NEXT:    vmsne.vi v0, v8, 0
350; CHECK-NEXT:    ret
351  %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i1>
352  ret <vscale x 8 x i1> %evec
353}
354
355define <vscale x 8 x i1> @vfptoui_nxv8f16_nxv8i1(<vscale x 8 x half> %va) {
356; CHECK-LABEL: vfptoui_nxv8f16_nxv8i1:
357; CHECK:       # %bb.0:
358; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, mu
359; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v8
360; CHECK-NEXT:    vand.vi v8, v10, 1
361; CHECK-NEXT:    vmsne.vi v0, v8, 0
362; CHECK-NEXT:    ret
363  %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i1>
364  ret <vscale x 8 x i1> %evec
365}
366
367define <vscale x 8 x i8> @vfptosi_nxv8f16_nxv8i8(<vscale x 8 x half> %va) {
368; CHECK-LABEL: vfptosi_nxv8f16_nxv8i8:
369; CHECK:       # %bb.0:
370; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, mu
371; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
372; CHECK-NEXT:    vmv.v.v v8, v10
373; CHECK-NEXT:    ret
374  %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i8>
375  ret <vscale x 8 x i8> %evec
376}
377
378define <vscale x 8 x i8> @vfptoui_nxv8f16_nxv8i8(<vscale x 8 x half> %va) {
379; CHECK-LABEL: vfptoui_nxv8f16_nxv8i8:
380; CHECK:       # %bb.0:
381; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, mu
382; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v8
383; CHECK-NEXT:    vmv.v.v v8, v10
384; CHECK-NEXT:    ret
385  %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i8>
386  ret <vscale x 8 x i8> %evec
387}
388
389define <vscale x 8 x i16> @vfptosi_nxv8f16_nxv8i16(<vscale x 8 x half> %va) {
390; CHECK-LABEL: vfptosi_nxv8f16_nxv8i16:
391; CHECK:       # %bb.0:
392; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
393; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
394; CHECK-NEXT:    ret
395  %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i16>
396  ret <vscale x 8 x i16> %evec
397}
398
399define <vscale x 8 x i16> @vfptoui_nxv8f16_nxv8i16(<vscale x 8 x half> %va) {
400; CHECK-LABEL: vfptoui_nxv8f16_nxv8i16:
401; CHECK:       # %bb.0:
402; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
403; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
404; CHECK-NEXT:    ret
405  %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i16>
406  ret <vscale x 8 x i16> %evec
407}
408
409define <vscale x 8 x i32> @vfptosi_nxv8f16_nxv8i32(<vscale x 8 x half> %va) {
410; CHECK-LABEL: vfptosi_nxv8f16_nxv8i32:
411; CHECK:       # %bb.0:
412; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
413; CHECK-NEXT:    vfwcvt.rtz.x.f.v v12, v8
414; CHECK-NEXT:    vmv4r.v v8, v12
415; CHECK-NEXT:    ret
416  %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i32>
417  ret <vscale x 8 x i32> %evec
418}
419
420define <vscale x 8 x i32> @vfptoui_nxv8f16_nxv8i32(<vscale x 8 x half> %va) {
421; CHECK-LABEL: vfptoui_nxv8f16_nxv8i32:
422; CHECK:       # %bb.0:
423; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
424; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v12, v8
425; CHECK-NEXT:    vmv4r.v v8, v12
426; CHECK-NEXT:    ret
427  %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i32>
428  ret <vscale x 8 x i32> %evec
429}
430
431define <vscale x 8 x i64> @vfptosi_nxv8f16_nxv8i64(<vscale x 8 x half> %va) {
432; CHECK-LABEL: vfptosi_nxv8f16_nxv8i64:
433; CHECK:       # %bb.0:
434; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
435; CHECK-NEXT:    vfwcvt.f.f.v v16, v8
436; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
437; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v16
438; CHECK-NEXT:    ret
439  %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i64>
440  ret <vscale x 8 x i64> %evec
441}
442
443define <vscale x 8 x i64> @vfptoui_nxv8f16_nxv8i64(<vscale x 8 x half> %va) {
444; CHECK-LABEL: vfptoui_nxv8f16_nxv8i64:
445; CHECK:       # %bb.0:
446; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
447; CHECK-NEXT:    vfwcvt.f.f.v v16, v8
448; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
449; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v16
450; CHECK-NEXT:    ret
451  %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i64>
452  ret <vscale x 8 x i64> %evec
453}
454
455define <vscale x 16 x i1> @vfptosi_nxv16f16_nxv16i1(<vscale x 16 x half> %va) {
456; CHECK-LABEL: vfptosi_nxv16f16_nxv16i1:
457; CHECK:       # %bb.0:
458; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, mu
459; CHECK-NEXT:    vfncvt.rtz.x.f.w v12, v8
460; CHECK-NEXT:    vand.vi v8, v12, 1
461; CHECK-NEXT:    vmsne.vi v0, v8, 0
462; CHECK-NEXT:    ret
463  %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i1>
464  ret <vscale x 16 x i1> %evec
465}
466
467define <vscale x 16 x i1> @vfptoui_nxv16f16_nxv16i1(<vscale x 16 x half> %va) {
468; CHECK-LABEL: vfptoui_nxv16f16_nxv16i1:
469; CHECK:       # %bb.0:
470; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, mu
471; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8
472; CHECK-NEXT:    vand.vi v8, v12, 1
473; CHECK-NEXT:    vmsne.vi v0, v8, 0
474; CHECK-NEXT:    ret
475  %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i1>
476  ret <vscale x 16 x i1> %evec
477}
478
479define <vscale x 16 x i8> @vfptosi_nxv16f16_nxv16i8(<vscale x 16 x half> %va) {
480; CHECK-LABEL: vfptosi_nxv16f16_nxv16i8:
481; CHECK:       # %bb.0:
482; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, mu
483; CHECK-NEXT:    vfncvt.rtz.x.f.w v12, v8
484; CHECK-NEXT:    vmv.v.v v8, v12
485; CHECK-NEXT:    ret
486  %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i8>
487  ret <vscale x 16 x i8> %evec
488}
489
490define <vscale x 16 x i8> @vfptoui_nxv16f16_nxv16i8(<vscale x 16 x half> %va) {
491; CHECK-LABEL: vfptoui_nxv16f16_nxv16i8:
492; CHECK:       # %bb.0:
493; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, mu
494; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8
495; CHECK-NEXT:    vmv.v.v v8, v12
496; CHECK-NEXT:    ret
497  %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i8>
498  ret <vscale x 16 x i8> %evec
499}
500
501define <vscale x 16 x i16> @vfptosi_nxv16f16_nxv16i16(<vscale x 16 x half> %va) {
502; CHECK-LABEL: vfptosi_nxv16f16_nxv16i16:
503; CHECK:       # %bb.0:
504; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
505; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
506; CHECK-NEXT:    ret
507  %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i16>
508  ret <vscale x 16 x i16> %evec
509}
510
511define <vscale x 16 x i16> @vfptoui_nxv16f16_nxv16i16(<vscale x 16 x half> %va) {
512; CHECK-LABEL: vfptoui_nxv16f16_nxv16i16:
513; CHECK:       # %bb.0:
514; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
515; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
516; CHECK-NEXT:    ret
517  %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i16>
518  ret <vscale x 16 x i16> %evec
519}
520
521define <vscale x 16 x i32> @vfptosi_nxv16f16_nxv16i32(<vscale x 16 x half> %va) {
522; CHECK-LABEL: vfptosi_nxv16f16_nxv16i32:
523; CHECK:       # %bb.0:
524; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
525; CHECK-NEXT:    vfwcvt.rtz.x.f.v v16, v8
526; CHECK-NEXT:    vmv8r.v v8, v16
527; CHECK-NEXT:    ret
528  %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i32>
529  ret <vscale x 16 x i32> %evec
530}
531
532define <vscale x 16 x i32> @vfptoui_nxv16f16_nxv16i32(<vscale x 16 x half> %va) {
533; CHECK-LABEL: vfptoui_nxv16f16_nxv16i32:
534; CHECK:       # %bb.0:
535; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
536; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v16, v8
537; CHECK-NEXT:    vmv8r.v v8, v16
538; CHECK-NEXT:    ret
539  %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i32>
540  ret <vscale x 16 x i32> %evec
541}
542
543define <vscale x 32 x i1> @vfptosi_nxv32f16_nxv32i1(<vscale x 32 x half> %va) {
544; CHECK-LABEL: vfptosi_nxv32f16_nxv32i1:
545; CHECK:       # %bb.0:
546; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, mu
547; CHECK-NEXT:    vfncvt.rtz.x.f.w v16, v8
548; CHECK-NEXT:    vand.vi v8, v16, 1
549; CHECK-NEXT:    vmsne.vi v0, v8, 0
550; CHECK-NEXT:    ret
551  %evec = fptosi <vscale x 32 x half> %va to <vscale x 32 x i1>
552  ret <vscale x 32 x i1> %evec
553}
554
555define <vscale x 32 x i1> @vfptoui_nxv32f16_nxv32i1(<vscale x 32 x half> %va) {
556; CHECK-LABEL: vfptoui_nxv32f16_nxv32i1:
557; CHECK:       # %bb.0:
558; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, mu
559; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8
560; CHECK-NEXT:    vand.vi v8, v16, 1
561; CHECK-NEXT:    vmsne.vi v0, v8, 0
562; CHECK-NEXT:    ret
563  %evec = fptoui <vscale x 32 x half> %va to <vscale x 32 x i1>
564  ret <vscale x 32 x i1> %evec
565}
566
567define <vscale x 32 x i8> @vfptosi_nxv32f16_nxv32i8(<vscale x 32 x half> %va) {
568; CHECK-LABEL: vfptosi_nxv32f16_nxv32i8:
569; CHECK:       # %bb.0:
570; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, mu
571; CHECK-NEXT:    vfncvt.rtz.x.f.w v16, v8
572; CHECK-NEXT:    vmv.v.v v8, v16
573; CHECK-NEXT:    ret
574  %evec = fptosi <vscale x 32 x half> %va to <vscale x 32 x i8>
575  ret <vscale x 32 x i8> %evec
576}
577
578define <vscale x 32 x i8> @vfptoui_nxv32f16_nxv32i8(<vscale x 32 x half> %va) {
579; CHECK-LABEL: vfptoui_nxv32f16_nxv32i8:
580; CHECK:       # %bb.0:
581; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, mu
582; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8
583; CHECK-NEXT:    vmv.v.v v8, v16
584; CHECK-NEXT:    ret
585  %evec = fptoui <vscale x 32 x half> %va to <vscale x 32 x i8>
586  ret <vscale x 32 x i8> %evec
587}
588
589define <vscale x 32 x i16> @vfptosi_nxv32f16_nxv32i16(<vscale x 32 x half> %va) {
590; CHECK-LABEL: vfptosi_nxv32f16_nxv32i16:
591; CHECK:       # %bb.0:
592; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
593; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
594; CHECK-NEXT:    ret
595  %evec = fptosi <vscale x 32 x half> %va to <vscale x 32 x i16>
596  ret <vscale x 32 x i16> %evec
597}
598
599define <vscale x 32 x i16> @vfptoui_nxv32f16_nxv32i16(<vscale x 32 x half> %va) {
600; CHECK-LABEL: vfptoui_nxv32f16_nxv32i16:
601; CHECK:       # %bb.0:
602; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
603; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
604; CHECK-NEXT:    ret
605  %evec = fptoui <vscale x 32 x half> %va to <vscale x 32 x i16>
606  ret <vscale x 32 x i16> %evec
607}
608
609define <vscale x 1 x i1> @vfptosi_nxv1f32_nxv1i1(<vscale x 1 x float> %va) {
610; CHECK-LABEL: vfptosi_nxv1f32_nxv1i1:
611; CHECK:       # %bb.0:
612; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
613; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
614; CHECK-NEXT:    vand.vi v8, v9, 1
615; CHECK-NEXT:    vmsne.vi v0, v8, 0
616; CHECK-NEXT:    ret
617  %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i1>
618  ret <vscale x 1 x i1> %evec
619}
620
621define <vscale x 1 x i1> @vfptoui_nxv1f32_nxv1i1(<vscale x 1 x float> %va) {
622; CHECK-LABEL: vfptoui_nxv1f32_nxv1i1:
623; CHECK:       # %bb.0:
624; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
625; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
626; CHECK-NEXT:    vand.vi v8, v9, 1
627; CHECK-NEXT:    vmsne.vi v0, v8, 0
628; CHECK-NEXT:    ret
629  %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i1>
630  ret <vscale x 1 x i1> %evec
631}
632
633define <vscale x 1 x i8> @vfptosi_nxv1f32_nxv1i8(<vscale x 1 x float> %va) {
634; CHECK-LABEL: vfptosi_nxv1f32_nxv1i8:
635; CHECK:       # %bb.0:
636; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
637; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
638; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, mu
639; CHECK-NEXT:    vnsrl.wx v8, v9, zero
640; CHECK-NEXT:    ret
641  %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i8>
642  ret <vscale x 1 x i8> %evec
643}
644
645define <vscale x 1 x i8> @vfptoui_nxv1f32_nxv1i8(<vscale x 1 x float> %va) {
646; CHECK-LABEL: vfptoui_nxv1f32_nxv1i8:
647; CHECK:       # %bb.0:
648; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
649; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
650; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, mu
651; CHECK-NEXT:    vnsrl.wx v8, v9, zero
652; CHECK-NEXT:    ret
653  %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i8>
654  ret <vscale x 1 x i8> %evec
655}
656
657define <vscale x 1 x i16> @vfptosi_nxv1f32_nxv1i16(<vscale x 1 x float> %va) {
658; CHECK-LABEL: vfptosi_nxv1f32_nxv1i16:
659; CHECK:       # %bb.0:
660; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
661; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
662; CHECK-NEXT:    vmv1r.v v8, v9
663; CHECK-NEXT:    ret
664  %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i16>
665  ret <vscale x 1 x i16> %evec
666}
667
668define <vscale x 1 x i16> @vfptoui_nxv1f32_nxv1i16(<vscale x 1 x float> %va) {
669; CHECK-LABEL: vfptoui_nxv1f32_nxv1i16:
670; CHECK:       # %bb.0:
671; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
672; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
673; CHECK-NEXT:    vmv1r.v v8, v9
674; CHECK-NEXT:    ret
675  %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i16>
676  ret <vscale x 1 x i16> %evec
677}
678
679define <vscale x 1 x i32> @vfptosi_nxv1f32_nxv1i32(<vscale x 1 x float> %va) {
680; CHECK-LABEL: vfptosi_nxv1f32_nxv1i32:
681; CHECK:       # %bb.0:
682; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
683; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
684; CHECK-NEXT:    ret
685  %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i32>
686  ret <vscale x 1 x i32> %evec
687}
688
689define <vscale x 1 x i32> @vfptoui_nxv1f32_nxv1i32(<vscale x 1 x float> %va) {
690; CHECK-LABEL: vfptoui_nxv1f32_nxv1i32:
691; CHECK:       # %bb.0:
692; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
693; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
694; CHECK-NEXT:    ret
695  %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i32>
696  ret <vscale x 1 x i32> %evec
697}
698
699define <vscale x 1 x i64> @vfptosi_nxv1f32_nxv1i64(<vscale x 1 x float> %va) {
700; CHECK-LABEL: vfptosi_nxv1f32_nxv1i64:
701; CHECK:       # %bb.0:
702; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
703; CHECK-NEXT:    vfwcvt.rtz.x.f.v v9, v8
704; CHECK-NEXT:    vmv1r.v v8, v9
705; CHECK-NEXT:    ret
706  %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i64>
707  ret <vscale x 1 x i64> %evec
708}
709
710define <vscale x 1 x i64> @vfptoui_nxv1f32_nxv1i64(<vscale x 1 x float> %va) {
711; CHECK-LABEL: vfptoui_nxv1f32_nxv1i64:
712; CHECK:       # %bb.0:
713; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
714; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v9, v8
715; CHECK-NEXT:    vmv1r.v v8, v9
716; CHECK-NEXT:    ret
717  %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i64>
718  ret <vscale x 1 x i64> %evec
719}
720
721define <vscale x 2 x i1> @vfptosi_nxv2f32_nxv2i1(<vscale x 2 x float> %va) {
722; CHECK-LABEL: vfptosi_nxv2f32_nxv2i1:
723; CHECK:       # %bb.0:
724; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
725; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
726; CHECK-NEXT:    vand.vi v8, v9, 1
727; CHECK-NEXT:    vmsne.vi v0, v8, 0
728; CHECK-NEXT:    ret
729  %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i1>
730  ret <vscale x 2 x i1> %evec
731}
732
733define <vscale x 2 x i1> @vfptoui_nxv2f32_nxv2i1(<vscale x 2 x float> %va) {
734; CHECK-LABEL: vfptoui_nxv2f32_nxv2i1:
735; CHECK:       # %bb.0:
736; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
737; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
738; CHECK-NEXT:    vand.vi v8, v9, 1
739; CHECK-NEXT:    vmsne.vi v0, v8, 0
740; CHECK-NEXT:    ret
741  %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i1>
742  ret <vscale x 2 x i1> %evec
743}
744
745define <vscale x 2 x i8> @vfptosi_nxv2f32_nxv2i8(<vscale x 2 x float> %va) {
746; CHECK-LABEL: vfptosi_nxv2f32_nxv2i8:
747; CHECK:       # %bb.0:
748; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
749; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
750; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, mu
751; CHECK-NEXT:    vnsrl.wx v8, v9, zero
752; CHECK-NEXT:    ret
753  %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i8>
754  ret <vscale x 2 x i8> %evec
755}
756
757define <vscale x 2 x i8> @vfptoui_nxv2f32_nxv2i8(<vscale x 2 x float> %va) {
758; CHECK-LABEL: vfptoui_nxv2f32_nxv2i8:
759; CHECK:       # %bb.0:
760; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
761; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
762; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, mu
763; CHECK-NEXT:    vnsrl.wx v8, v9, zero
764; CHECK-NEXT:    ret
765  %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i8>
766  ret <vscale x 2 x i8> %evec
767}
768
769define <vscale x 2 x i16> @vfptosi_nxv2f32_nxv2i16(<vscale x 2 x float> %va) {
770; CHECK-LABEL: vfptosi_nxv2f32_nxv2i16:
771; CHECK:       # %bb.0:
772; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
773; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
774; CHECK-NEXT:    vmv1r.v v8, v9
775; CHECK-NEXT:    ret
776  %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i16>
777  ret <vscale x 2 x i16> %evec
778}
779
780define <vscale x 2 x i16> @vfptoui_nxv2f32_nxv2i16(<vscale x 2 x float> %va) {
781; CHECK-LABEL: vfptoui_nxv2f32_nxv2i16:
782; CHECK:       # %bb.0:
783; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
784; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
785; CHECK-NEXT:    vmv1r.v v8, v9
786; CHECK-NEXT:    ret
787  %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i16>
788  ret <vscale x 2 x i16> %evec
789}
790
791define <vscale x 2 x i32> @vfptosi_nxv2f32_nxv2i32(<vscale x 2 x float> %va) {
792; CHECK-LABEL: vfptosi_nxv2f32_nxv2i32:
793; CHECK:       # %bb.0:
794; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
795; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
796; CHECK-NEXT:    ret
797  %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i32>
798  ret <vscale x 2 x i32> %evec
799}
800
801define <vscale x 2 x i32> @vfptoui_nxv2f32_nxv2i32(<vscale x 2 x float> %va) {
802; CHECK-LABEL: vfptoui_nxv2f32_nxv2i32:
803; CHECK:       # %bb.0:
804; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
805; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
806; CHECK-NEXT:    ret
807  %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i32>
808  ret <vscale x 2 x i32> %evec
809}
810
811define <vscale x 2 x i64> @vfptosi_nxv2f32_nxv2i64(<vscale x 2 x float> %va) {
812; CHECK-LABEL: vfptosi_nxv2f32_nxv2i64:
813; CHECK:       # %bb.0:
814; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
815; CHECK-NEXT:    vfwcvt.rtz.x.f.v v10, v8
816; CHECK-NEXT:    vmv2r.v v8, v10
817; CHECK-NEXT:    ret
818  %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i64>
819  ret <vscale x 2 x i64> %evec
820}
821
822define <vscale x 2 x i64> @vfptoui_nxv2f32_nxv2i64(<vscale x 2 x float> %va) {
823; CHECK-LABEL: vfptoui_nxv2f32_nxv2i64:
824; CHECK:       # %bb.0:
825; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
826; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v10, v8
827; CHECK-NEXT:    vmv2r.v v8, v10
828; CHECK-NEXT:    ret
829  %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i64>
830  ret <vscale x 2 x i64> %evec
831}
832
833define <vscale x 4 x i1> @vfptosi_nxv4f32_nxv4i1(<vscale x 4 x float> %va) {
834; CHECK-LABEL: vfptosi_nxv4f32_nxv4i1:
835; CHECK:       # %bb.0:
836; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
837; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
838; CHECK-NEXT:    vand.vi v8, v10, 1
839; CHECK-NEXT:    vmsne.vi v0, v8, 0
840; CHECK-NEXT:    ret
841  %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i1>
842  ret <vscale x 4 x i1> %evec
843}
844
845define <vscale x 4 x i1> @vfptoui_nxv4f32_nxv4i1(<vscale x 4 x float> %va) {
846; CHECK-LABEL: vfptoui_nxv4f32_nxv4i1:
847; CHECK:       # %bb.0:
848; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
849; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v8
850; CHECK-NEXT:    vand.vi v8, v10, 1
851; CHECK-NEXT:    vmsne.vi v0, v8, 0
852; CHECK-NEXT:    ret
853  %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i1>
854  ret <vscale x 4 x i1> %evec
855}
856
857define <vscale x 4 x i8> @vfptosi_nxv4f32_nxv4i8(<vscale x 4 x float> %va) {
858; CHECK-LABEL: vfptosi_nxv4f32_nxv4i8:
859; CHECK:       # %bb.0:
860; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
861; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
862; CHECK-NEXT:    vsetvli zero, zero, e8, mf2, ta, mu
863; CHECK-NEXT:    vnsrl.wx v8, v10, zero
864; CHECK-NEXT:    ret
865  %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i8>
866  ret <vscale x 4 x i8> %evec
867}
868
869define <vscale x 4 x i8> @vfptoui_nxv4f32_nxv4i8(<vscale x 4 x float> %va) {
870; CHECK-LABEL: vfptoui_nxv4f32_nxv4i8:
871; CHECK:       # %bb.0:
872; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
873; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v8
874; CHECK-NEXT:    vsetvli zero, zero, e8, mf2, ta, mu
875; CHECK-NEXT:    vnsrl.wx v8, v10, zero
876; CHECK-NEXT:    ret
877  %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i8>
878  ret <vscale x 4 x i8> %evec
879}
880
881define <vscale x 4 x i16> @vfptosi_nxv4f32_nxv4i16(<vscale x 4 x float> %va) {
882; CHECK-LABEL: vfptosi_nxv4f32_nxv4i16:
883; CHECK:       # %bb.0:
884; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
885; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
886; CHECK-NEXT:    vmv.v.v v8, v10
887; CHECK-NEXT:    ret
888  %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i16>
889  ret <vscale x 4 x i16> %evec
890}
891
892define <vscale x 4 x i16> @vfptoui_nxv4f32_nxv4i16(<vscale x 4 x float> %va) {
893; CHECK-LABEL: vfptoui_nxv4f32_nxv4i16:
894; CHECK:       # %bb.0:
895; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
896; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v8
897; CHECK-NEXT:    vmv.v.v v8, v10
898; CHECK-NEXT:    ret
899  %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i16>
900  ret <vscale x 4 x i16> %evec
901}
902
903define <vscale x 4 x i32> @vfptosi_nxv4f32_nxv4i32(<vscale x 4 x float> %va) {
904; CHECK-LABEL: vfptosi_nxv4f32_nxv4i32:
905; CHECK:       # %bb.0:
906; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
907; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
908; CHECK-NEXT:    ret
909  %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i32>
910  ret <vscale x 4 x i32> %evec
911}
912
913define <vscale x 4 x i32> @vfptoui_nxv4f32_nxv4i32(<vscale x 4 x float> %va) {
914; CHECK-LABEL: vfptoui_nxv4f32_nxv4i32:
915; CHECK:       # %bb.0:
916; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
917; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
918; CHECK-NEXT:    ret
919  %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i32>
920  ret <vscale x 4 x i32> %evec
921}
922
923define <vscale x 4 x i64> @vfptosi_nxv4f32_nxv4i64(<vscale x 4 x float> %va) {
924; CHECK-LABEL: vfptosi_nxv4f32_nxv4i64:
925; CHECK:       # %bb.0:
926; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
927; CHECK-NEXT:    vfwcvt.rtz.x.f.v v12, v8
928; CHECK-NEXT:    vmv4r.v v8, v12
929; CHECK-NEXT:    ret
930  %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i64>
931  ret <vscale x 4 x i64> %evec
932}
933
934define <vscale x 4 x i64> @vfptoui_nxv4f32_nxv4i64(<vscale x 4 x float> %va) {
935; CHECK-LABEL: vfptoui_nxv4f32_nxv4i64:
936; CHECK:       # %bb.0:
937; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
938; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v12, v8
939; CHECK-NEXT:    vmv4r.v v8, v12
940; CHECK-NEXT:    ret
941  %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i64>
942  ret <vscale x 4 x i64> %evec
943}
944
945define <vscale x 8 x i1> @vfptosi_nxv8f32_nxv8i1(<vscale x 8 x float> %va) {
946; CHECK-LABEL: vfptosi_nxv8f32_nxv8i1:
947; CHECK:       # %bb.0:
948; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
949; CHECK-NEXT:    vfncvt.rtz.x.f.w v12, v8
950; CHECK-NEXT:    vand.vi v8, v12, 1
951; CHECK-NEXT:    vmsne.vi v0, v8, 0
952; CHECK-NEXT:    ret
953  %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i1>
954  ret <vscale x 8 x i1> %evec
955}
956
957define <vscale x 8 x i1> @vfptoui_nxv8f32_nxv8i1(<vscale x 8 x float> %va) {
958; CHECK-LABEL: vfptoui_nxv8f32_nxv8i1:
959; CHECK:       # %bb.0:
960; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
961; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8
962; CHECK-NEXT:    vand.vi v8, v12, 1
963; CHECK-NEXT:    vmsne.vi v0, v8, 0
964; CHECK-NEXT:    ret
965  %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i1>
966  ret <vscale x 8 x i1> %evec
967}
968
969define <vscale x 8 x i8> @vfptosi_nxv8f32_nxv8i8(<vscale x 8 x float> %va) {
970; CHECK-LABEL: vfptosi_nxv8f32_nxv8i8:
971; CHECK:       # %bb.0:
972; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
973; CHECK-NEXT:    vfncvt.rtz.x.f.w v12, v8
974; CHECK-NEXT:    vsetvli zero, zero, e8, m1, ta, mu
975; CHECK-NEXT:    vnsrl.wx v8, v12, zero
976; CHECK-NEXT:    ret
977  %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i8>
978  ret <vscale x 8 x i8> %evec
979}
980
981define <vscale x 8 x i8> @vfptoui_nxv8f32_nxv8i8(<vscale x 8 x float> %va) {
982; CHECK-LABEL: vfptoui_nxv8f32_nxv8i8:
983; CHECK:       # %bb.0:
984; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
985; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8
986; CHECK-NEXT:    vsetvli zero, zero, e8, m1, ta, mu
987; CHECK-NEXT:    vnsrl.wx v8, v12, zero
988; CHECK-NEXT:    ret
989  %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i8>
990  ret <vscale x 8 x i8> %evec
991}
992
993define <vscale x 8 x i16> @vfptosi_nxv8f32_nxv8i16(<vscale x 8 x float> %va) {
994; CHECK-LABEL: vfptosi_nxv8f32_nxv8i16:
995; CHECK:       # %bb.0:
996; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
997; CHECK-NEXT:    vfncvt.rtz.x.f.w v12, v8
998; CHECK-NEXT:    vmv.v.v v8, v12
999; CHECK-NEXT:    ret
1000  %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i16>
1001  ret <vscale x 8 x i16> %evec
1002}
1003
1004define <vscale x 8 x i16> @vfptoui_nxv8f32_nxv8i16(<vscale x 8 x float> %va) {
1005; CHECK-LABEL: vfptoui_nxv8f32_nxv8i16:
1006; CHECK:       # %bb.0:
1007; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
1008; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8
1009; CHECK-NEXT:    vmv.v.v v8, v12
1010; CHECK-NEXT:    ret
1011  %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i16>
1012  ret <vscale x 8 x i16> %evec
1013}
1014
1015define <vscale x 8 x i32> @vfptosi_nxv8f32_nxv8i32(<vscale x 8 x float> %va) {
1016; CHECK-LABEL: vfptosi_nxv8f32_nxv8i32:
1017; CHECK:       # %bb.0:
1018; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1019; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
1020; CHECK-NEXT:    ret
1021  %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i32>
1022  ret <vscale x 8 x i32> %evec
1023}
1024
1025define <vscale x 8 x i32> @vfptoui_nxv8f32_nxv8i32(<vscale x 8 x float> %va) {
1026; CHECK-LABEL: vfptoui_nxv8f32_nxv8i32:
1027; CHECK:       # %bb.0:
1028; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1029; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
1030; CHECK-NEXT:    ret
1031  %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i32>
1032  ret <vscale x 8 x i32> %evec
1033}
1034
1035define <vscale x 8 x i64> @vfptosi_nxv8f32_nxv8i64(<vscale x 8 x float> %va) {
1036; CHECK-LABEL: vfptosi_nxv8f32_nxv8i64:
1037; CHECK:       # %bb.0:
1038; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1039; CHECK-NEXT:    vfwcvt.rtz.x.f.v v16, v8
1040; CHECK-NEXT:    vmv8r.v v8, v16
1041; CHECK-NEXT:    ret
1042  %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i64>
1043  ret <vscale x 8 x i64> %evec
1044}
1045
1046define <vscale x 8 x i64> @vfptoui_nxv8f32_nxv8i64(<vscale x 8 x float> %va) {
1047; CHECK-LABEL: vfptoui_nxv8f32_nxv8i64:
1048; CHECK:       # %bb.0:
1049; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1050; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v16, v8
1051; CHECK-NEXT:    vmv8r.v v8, v16
1052; CHECK-NEXT:    ret
1053  %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i64>
1054  ret <vscale x 8 x i64> %evec
1055}
1056
1057define <vscale x 16 x i1> @vfptosi_nxv16f32_nxv16i1(<vscale x 16 x float> %va) {
1058; CHECK-LABEL: vfptosi_nxv16f32_nxv16i1:
1059; CHECK:       # %bb.0:
1060; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
1061; CHECK-NEXT:    vfncvt.rtz.x.f.w v16, v8
1062; CHECK-NEXT:    vand.vi v8, v16, 1
1063; CHECK-NEXT:    vmsne.vi v0, v8, 0
1064; CHECK-NEXT:    ret
1065  %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i1>
1066  ret <vscale x 16 x i1> %evec
1067}
1068
1069define <vscale x 16 x i1> @vfptoui_nxv16f32_nxv16i1(<vscale x 16 x float> %va) {
1070; CHECK-LABEL: vfptoui_nxv16f32_nxv16i1:
1071; CHECK:       # %bb.0:
1072; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
1073; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8
1074; CHECK-NEXT:    vand.vi v8, v16, 1
1075; CHECK-NEXT:    vmsne.vi v0, v8, 0
1076; CHECK-NEXT:    ret
1077  %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i1>
1078  ret <vscale x 16 x i1> %evec
1079}
1080
1081define <vscale x 16 x i8> @vfptosi_nxv16f32_nxv16i8(<vscale x 16 x float> %va) {
1082; CHECK-LABEL: vfptosi_nxv16f32_nxv16i8:
1083; CHECK:       # %bb.0:
1084; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
1085; CHECK-NEXT:    vfncvt.rtz.x.f.w v16, v8
1086; CHECK-NEXT:    vsetvli zero, zero, e8, m2, ta, mu
1087; CHECK-NEXT:    vnsrl.wx v8, v16, zero
1088; CHECK-NEXT:    ret
1089  %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i8>
1090  ret <vscale x 16 x i8> %evec
1091}
1092
1093define <vscale x 16 x i8> @vfptoui_nxv16f32_nxv16i8(<vscale x 16 x float> %va) {
1094; CHECK-LABEL: vfptoui_nxv16f32_nxv16i8:
1095; CHECK:       # %bb.0:
1096; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
1097; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8
1098; CHECK-NEXT:    vsetvli zero, zero, e8, m2, ta, mu
1099; CHECK-NEXT:    vnsrl.wx v8, v16, zero
1100; CHECK-NEXT:    ret
1101  %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i8>
1102  ret <vscale x 16 x i8> %evec
1103}
1104
1105define <vscale x 16 x i16> @vfptosi_nxv16f32_nxv16i16(<vscale x 16 x float> %va) {
1106; CHECK-LABEL: vfptosi_nxv16f32_nxv16i16:
1107; CHECK:       # %bb.0:
1108; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
1109; CHECK-NEXT:    vfncvt.rtz.x.f.w v16, v8
1110; CHECK-NEXT:    vmv.v.v v8, v16
1111; CHECK-NEXT:    ret
1112  %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i16>
1113  ret <vscale x 16 x i16> %evec
1114}
1115
1116define <vscale x 16 x i16> @vfptoui_nxv16f32_nxv16i16(<vscale x 16 x float> %va) {
1117; CHECK-LABEL: vfptoui_nxv16f32_nxv16i16:
1118; CHECK:       # %bb.0:
1119; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
1120; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8
1121; CHECK-NEXT:    vmv.v.v v8, v16
1122; CHECK-NEXT:    ret
1123  %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i16>
1124  ret <vscale x 16 x i16> %evec
1125}
1126
1127define <vscale x 16 x i32> @vfptosi_nxv16f32_nxv16i32(<vscale x 16 x float> %va) {
1128; CHECK-LABEL: vfptosi_nxv16f32_nxv16i32:
1129; CHECK:       # %bb.0:
1130; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
1131; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
1132; CHECK-NEXT:    ret
1133  %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i32>
1134  ret <vscale x 16 x i32> %evec
1135}
1136
1137define <vscale x 16 x i32> @vfptoui_nxv16f32_nxv16i32(<vscale x 16 x float> %va) {
1138; CHECK-LABEL: vfptoui_nxv16f32_nxv16i32:
1139; CHECK:       # %bb.0:
1140; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
1141; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
1142; CHECK-NEXT:    ret
1143  %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i32>
1144  ret <vscale x 16 x i32> %evec
1145}
1146
1147define <vscale x 1 x i1> @vfptosi_nxv1f64_nxv1i1(<vscale x 1 x double> %va) {
1148; CHECK-LABEL: vfptosi_nxv1f64_nxv1i1:
1149; CHECK:       # %bb.0:
1150; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1151; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
1152; CHECK-NEXT:    vand.vi v8, v9, 1
1153; CHECK-NEXT:    vmsne.vi v0, v8, 0
1154; CHECK-NEXT:    ret
1155  %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i1>
1156  ret <vscale x 1 x i1> %evec
1157}
1158
1159define <vscale x 1 x i1> @vfptoui_nxv1f64_nxv1i1(<vscale x 1 x double> %va) {
1160; CHECK-LABEL: vfptoui_nxv1f64_nxv1i1:
1161; CHECK:       # %bb.0:
1162; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1163; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
1164; CHECK-NEXT:    vand.vi v8, v9, 1
1165; CHECK-NEXT:    vmsne.vi v0, v8, 0
1166; CHECK-NEXT:    ret
1167  %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i1>
1168  ret <vscale x 1 x i1> %evec
1169}
1170
1171define <vscale x 1 x i8> @vfptosi_nxv1f64_nxv1i8(<vscale x 1 x double> %va) {
1172; CHECK-LABEL: vfptosi_nxv1f64_nxv1i8:
1173; CHECK:       # %bb.0:
1174; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1175; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
1176; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
1177; CHECK-NEXT:    vnsrl.wx v8, v9, zero
1178; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, mu
1179; CHECK-NEXT:    vnsrl.wx v8, v8, zero
1180; CHECK-NEXT:    ret
1181  %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i8>
1182  ret <vscale x 1 x i8> %evec
1183}
1184
1185define <vscale x 1 x i8> @vfptoui_nxv1f64_nxv1i8(<vscale x 1 x double> %va) {
1186; CHECK-LABEL: vfptoui_nxv1f64_nxv1i8:
1187; CHECK:       # %bb.0:
1188; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1189; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
1190; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
1191; CHECK-NEXT:    vnsrl.wx v8, v9, zero
1192; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, mu
1193; CHECK-NEXT:    vnsrl.wx v8, v8, zero
1194; CHECK-NEXT:    ret
1195  %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i8>
1196  ret <vscale x 1 x i8> %evec
1197}
1198
1199define <vscale x 1 x i16> @vfptosi_nxv1f64_nxv1i16(<vscale x 1 x double> %va) {
1200; CHECK-LABEL: vfptosi_nxv1f64_nxv1i16:
1201; CHECK:       # %bb.0:
1202; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1203; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
1204; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
1205; CHECK-NEXT:    vnsrl.wx v8, v9, zero
1206; CHECK-NEXT:    ret
1207  %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i16>
1208  ret <vscale x 1 x i16> %evec
1209}
1210
1211define <vscale x 1 x i16> @vfptoui_nxv1f64_nxv1i16(<vscale x 1 x double> %va) {
1212; CHECK-LABEL: vfptoui_nxv1f64_nxv1i16:
1213; CHECK:       # %bb.0:
1214; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1215; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
1216; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
1217; CHECK-NEXT:    vnsrl.wx v8, v9, zero
1218; CHECK-NEXT:    ret
1219  %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i16>
1220  ret <vscale x 1 x i16> %evec
1221}
1222
1223define <vscale x 1 x i32> @vfptosi_nxv1f64_nxv1i32(<vscale x 1 x double> %va) {
1224; CHECK-LABEL: vfptosi_nxv1f64_nxv1i32:
1225; CHECK:       # %bb.0:
1226; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1227; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
1228; CHECK-NEXT:    vmv1r.v v8, v9
1229; CHECK-NEXT:    ret
1230  %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i32>
1231  ret <vscale x 1 x i32> %evec
1232}
1233
1234define <vscale x 1 x i32> @vfptoui_nxv1f64_nxv1i32(<vscale x 1 x double> %va) {
1235; CHECK-LABEL: vfptoui_nxv1f64_nxv1i32:
1236; CHECK:       # %bb.0:
1237; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1238; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
1239; CHECK-NEXT:    vmv1r.v v8, v9
1240; CHECK-NEXT:    ret
1241  %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i32>
1242  ret <vscale x 1 x i32> %evec
1243}
1244
1245define <vscale x 1 x i64> @vfptosi_nxv1f64_nxv1i64(<vscale x 1 x double> %va) {
1246; CHECK-LABEL: vfptosi_nxv1f64_nxv1i64:
1247; CHECK:       # %bb.0:
1248; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
1249; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
1250; CHECK-NEXT:    ret
1251  %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i64>
1252  ret <vscale x 1 x i64> %evec
1253}
1254
1255define <vscale x 1 x i64> @vfptoui_nxv1f64_nxv1i64(<vscale x 1 x double> %va) {
1256; CHECK-LABEL: vfptoui_nxv1f64_nxv1i64:
1257; CHECK:       # %bb.0:
1258; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
1259; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
1260; CHECK-NEXT:    ret
1261  %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i64>
1262  ret <vscale x 1 x i64> %evec
1263}
1264
1265define <vscale x 2 x i1> @vfptosi_nxv2f64_nxv2i1(<vscale x 2 x double> %va) {
1266; CHECK-LABEL: vfptosi_nxv2f64_nxv2i1:
1267; CHECK:       # %bb.0:
1268; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1269; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
1270; CHECK-NEXT:    vand.vi v8, v10, 1
1271; CHECK-NEXT:    vmsne.vi v0, v8, 0
1272; CHECK-NEXT:    ret
1273  %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i1>
1274  ret <vscale x 2 x i1> %evec
1275}
1276
1277define <vscale x 2 x i1> @vfptoui_nxv2f64_nxv2i1(<vscale x 2 x double> %va) {
1278; CHECK-LABEL: vfptoui_nxv2f64_nxv2i1:
1279; CHECK:       # %bb.0:
1280; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1281; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v8
1282; CHECK-NEXT:    vand.vi v8, v10, 1
1283; CHECK-NEXT:    vmsne.vi v0, v8, 0
1284; CHECK-NEXT:    ret
1285  %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i1>
1286  ret <vscale x 2 x i1> %evec
1287}
1288
1289define <vscale x 2 x i8> @vfptosi_nxv2f64_nxv2i8(<vscale x 2 x double> %va) {
1290; CHECK-LABEL: vfptosi_nxv2f64_nxv2i8:
1291; CHECK:       # %bb.0:
1292; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1293; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
1294; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
1295; CHECK-NEXT:    vnsrl.wx v8, v10, zero
1296; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, mu
1297; CHECK-NEXT:    vnsrl.wx v8, v8, zero
1298; CHECK-NEXT:    ret
1299  %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i8>
1300  ret <vscale x 2 x i8> %evec
1301}
1302
1303define <vscale x 2 x i8> @vfptoui_nxv2f64_nxv2i8(<vscale x 2 x double> %va) {
1304; CHECK-LABEL: vfptoui_nxv2f64_nxv2i8:
1305; CHECK:       # %bb.0:
1306; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1307; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v8
1308; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
1309; CHECK-NEXT:    vnsrl.wx v8, v10, zero
1310; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, mu
1311; CHECK-NEXT:    vnsrl.wx v8, v8, zero
1312; CHECK-NEXT:    ret
1313  %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i8>
1314  ret <vscale x 2 x i8> %evec
1315}
1316
1317define <vscale x 2 x i16> @vfptosi_nxv2f64_nxv2i16(<vscale x 2 x double> %va) {
1318; CHECK-LABEL: vfptosi_nxv2f64_nxv2i16:
1319; CHECK:       # %bb.0:
1320; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1321; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
1322; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
1323; CHECK-NEXT:    vnsrl.wx v8, v10, zero
1324; CHECK-NEXT:    ret
1325  %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i16>
1326  ret <vscale x 2 x i16> %evec
1327}
1328
1329define <vscale x 2 x i16> @vfptoui_nxv2f64_nxv2i16(<vscale x 2 x double> %va) {
1330; CHECK-LABEL: vfptoui_nxv2f64_nxv2i16:
1331; CHECK:       # %bb.0:
1332; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1333; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v8
1334; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
1335; CHECK-NEXT:    vnsrl.wx v8, v10, zero
1336; CHECK-NEXT:    ret
1337  %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i16>
1338  ret <vscale x 2 x i16> %evec
1339}
1340
1341define <vscale x 2 x i32> @vfptosi_nxv2f64_nxv2i32(<vscale x 2 x double> %va) {
1342; CHECK-LABEL: vfptosi_nxv2f64_nxv2i32:
1343; CHECK:       # %bb.0:
1344; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1345; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
1346; CHECK-NEXT:    vmv.v.v v8, v10
1347; CHECK-NEXT:    ret
1348  %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i32>
1349  ret <vscale x 2 x i32> %evec
1350}
1351
1352define <vscale x 2 x i32> @vfptoui_nxv2f64_nxv2i32(<vscale x 2 x double> %va) {
1353; CHECK-LABEL: vfptoui_nxv2f64_nxv2i32:
1354; CHECK:       # %bb.0:
1355; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1356; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v8
1357; CHECK-NEXT:    vmv.v.v v8, v10
1358; CHECK-NEXT:    ret
1359  %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i32>
1360  ret <vscale x 2 x i32> %evec
1361}
1362
1363define <vscale x 2 x i64> @vfptosi_nxv2f64_nxv2i64(<vscale x 2 x double> %va) {
1364; CHECK-LABEL: vfptosi_nxv2f64_nxv2i64:
1365; CHECK:       # %bb.0:
1366; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
1367; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
1368; CHECK-NEXT:    ret
1369  %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i64>
1370  ret <vscale x 2 x i64> %evec
1371}
1372
1373define <vscale x 2 x i64> @vfptoui_nxv2f64_nxv2i64(<vscale x 2 x double> %va) {
1374; CHECK-LABEL: vfptoui_nxv2f64_nxv2i64:
1375; CHECK:       # %bb.0:
1376; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
1377; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
1378; CHECK-NEXT:    ret
1379  %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i64>
1380  ret <vscale x 2 x i64> %evec
1381}
1382
1383define <vscale x 4 x i1> @vfptosi_nxv4f64_nxv4i1(<vscale x 4 x double> %va) {
1384; CHECK-LABEL: vfptosi_nxv4f64_nxv4i1:
1385; CHECK:       # %bb.0:
1386; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1387; CHECK-NEXT:    vfncvt.rtz.x.f.w v12, v8
1388; CHECK-NEXT:    vand.vi v8, v12, 1
1389; CHECK-NEXT:    vmsne.vi v0, v8, 0
1390; CHECK-NEXT:    ret
1391  %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i1>
1392  ret <vscale x 4 x i1> %evec
1393}
1394
1395define <vscale x 4 x i1> @vfptoui_nxv4f64_nxv4i1(<vscale x 4 x double> %va) {
1396; CHECK-LABEL: vfptoui_nxv4f64_nxv4i1:
1397; CHECK:       # %bb.0:
1398; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1399; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8
1400; CHECK-NEXT:    vand.vi v8, v12, 1
1401; CHECK-NEXT:    vmsne.vi v0, v8, 0
1402; CHECK-NEXT:    ret
1403  %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i1>
1404  ret <vscale x 4 x i1> %evec
1405}
1406
1407define <vscale x 4 x i8> @vfptosi_nxv4f64_nxv4i8(<vscale x 4 x double> %va) {
1408; CHECK-LABEL: vfptosi_nxv4f64_nxv4i8:
1409; CHECK:       # %bb.0:
1410; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1411; CHECK-NEXT:    vfncvt.rtz.x.f.w v12, v8
1412; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1413; CHECK-NEXT:    vnsrl.wx v8, v12, zero
1414; CHECK-NEXT:    vsetvli zero, zero, e8, mf2, ta, mu
1415; CHECK-NEXT:    vnsrl.wx v8, v8, zero
1416; CHECK-NEXT:    ret
1417  %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i8>
1418  ret <vscale x 4 x i8> %evec
1419}
1420
1421define <vscale x 4 x i8> @vfptoui_nxv4f64_nxv4i8(<vscale x 4 x double> %va) {
1422; CHECK-LABEL: vfptoui_nxv4f64_nxv4i8:
1423; CHECK:       # %bb.0:
1424; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1425; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8
1426; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1427; CHECK-NEXT:    vnsrl.wx v8, v12, zero
1428; CHECK-NEXT:    vsetvli zero, zero, e8, mf2, ta, mu
1429; CHECK-NEXT:    vnsrl.wx v8, v8, zero
1430; CHECK-NEXT:    ret
1431  %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i8>
1432  ret <vscale x 4 x i8> %evec
1433}
1434
1435define <vscale x 4 x i16> @vfptosi_nxv4f64_nxv4i16(<vscale x 4 x double> %va) {
1436; CHECK-LABEL: vfptosi_nxv4f64_nxv4i16:
1437; CHECK:       # %bb.0:
1438; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1439; CHECK-NEXT:    vfncvt.rtz.x.f.w v12, v8
1440; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1441; CHECK-NEXT:    vnsrl.wx v8, v12, zero
1442; CHECK-NEXT:    ret
1443  %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i16>
1444  ret <vscale x 4 x i16> %evec
1445}
1446
1447define <vscale x 4 x i16> @vfptoui_nxv4f64_nxv4i16(<vscale x 4 x double> %va) {
1448; CHECK-LABEL: vfptoui_nxv4f64_nxv4i16:
1449; CHECK:       # %bb.0:
1450; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1451; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8
1452; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1453; CHECK-NEXT:    vnsrl.wx v8, v12, zero
1454; CHECK-NEXT:    ret
1455  %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i16>
1456  ret <vscale x 4 x i16> %evec
1457}
1458
1459define <vscale x 4 x i32> @vfptosi_nxv4f64_nxv4i32(<vscale x 4 x double> %va) {
1460; CHECK-LABEL: vfptosi_nxv4f64_nxv4i32:
1461; CHECK:       # %bb.0:
1462; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1463; CHECK-NEXT:    vfncvt.rtz.x.f.w v12, v8
1464; CHECK-NEXT:    vmv.v.v v8, v12
1465; CHECK-NEXT:    ret
1466  %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i32>
1467  ret <vscale x 4 x i32> %evec
1468}
1469
1470define <vscale x 4 x i32> @vfptoui_nxv4f64_nxv4i32(<vscale x 4 x double> %va) {
1471; CHECK-LABEL: vfptoui_nxv4f64_nxv4i32:
1472; CHECK:       # %bb.0:
1473; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1474; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8
1475; CHECK-NEXT:    vmv.v.v v8, v12
1476; CHECK-NEXT:    ret
1477  %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i32>
1478  ret <vscale x 4 x i32> %evec
1479}
1480
1481define <vscale x 4 x i64> @vfptosi_nxv4f64_nxv4i64(<vscale x 4 x double> %va) {
1482; CHECK-LABEL: vfptosi_nxv4f64_nxv4i64:
1483; CHECK:       # %bb.0:
1484; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
1485; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
1486; CHECK-NEXT:    ret
1487  %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i64>
1488  ret <vscale x 4 x i64> %evec
1489}
1490
1491define <vscale x 4 x i64> @vfptoui_nxv4f64_nxv4i64(<vscale x 4 x double> %va) {
1492; CHECK-LABEL: vfptoui_nxv4f64_nxv4i64:
1493; CHECK:       # %bb.0:
1494; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
1495; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
1496; CHECK-NEXT:    ret
1497  %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i64>
1498  ret <vscale x 4 x i64> %evec
1499}
1500
1501define <vscale x 8 x i1> @vfptosi_nxv8f64_nxv8i1(<vscale x 8 x double> %va) {
1502; CHECK-LABEL: vfptosi_nxv8f64_nxv8i1:
1503; CHECK:       # %bb.0:
1504; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1505; CHECK-NEXT:    vfncvt.rtz.x.f.w v16, v8
1506; CHECK-NEXT:    vand.vi v8, v16, 1
1507; CHECK-NEXT:    vmsne.vi v0, v8, 0
1508; CHECK-NEXT:    ret
1509  %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i1>
1510  ret <vscale x 8 x i1> %evec
1511}
1512
1513define <vscale x 8 x i1> @vfptoui_nxv8f64_nxv8i1(<vscale x 8 x double> %va) {
1514; CHECK-LABEL: vfptoui_nxv8f64_nxv8i1:
1515; CHECK:       # %bb.0:
1516; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1517; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8
1518; CHECK-NEXT:    vand.vi v8, v16, 1
1519; CHECK-NEXT:    vmsne.vi v0, v8, 0
1520; CHECK-NEXT:    ret
1521  %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i1>
1522  ret <vscale x 8 x i1> %evec
1523}
1524
1525define <vscale x 8 x i8> @vfptosi_nxv8f64_nxv8i8(<vscale x 8 x double> %va) {
1526; CHECK-LABEL: vfptosi_nxv8f64_nxv8i8:
1527; CHECK:       # %bb.0:
1528; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1529; CHECK-NEXT:    vfncvt.rtz.x.f.w v16, v8
1530; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
1531; CHECK-NEXT:    vnsrl.wx v10, v16, zero
1532; CHECK-NEXT:    vsetvli zero, zero, e8, m1, ta, mu
1533; CHECK-NEXT:    vnsrl.wx v8, v10, zero
1534; CHECK-NEXT:    ret
1535  %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i8>
1536  ret <vscale x 8 x i8> %evec
1537}
1538
1539define <vscale x 8 x i8> @vfptoui_nxv8f64_nxv8i8(<vscale x 8 x double> %va) {
1540; CHECK-LABEL: vfptoui_nxv8f64_nxv8i8:
1541; CHECK:       # %bb.0:
1542; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1543; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8
1544; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
1545; CHECK-NEXT:    vnsrl.wx v10, v16, zero
1546; CHECK-NEXT:    vsetvli zero, zero, e8, m1, ta, mu
1547; CHECK-NEXT:    vnsrl.wx v8, v10, zero
1548; CHECK-NEXT:    ret
1549  %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i8>
1550  ret <vscale x 8 x i8> %evec
1551}
1552
1553define <vscale x 8 x i16> @vfptosi_nxv8f64_nxv8i16(<vscale x 8 x double> %va) {
1554; CHECK-LABEL: vfptosi_nxv8f64_nxv8i16:
1555; CHECK:       # %bb.0:
1556; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1557; CHECK-NEXT:    vfncvt.rtz.x.f.w v16, v8
1558; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
1559; CHECK-NEXT:    vnsrl.wx v8, v16, zero
1560; CHECK-NEXT:    ret
1561  %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i16>
1562  ret <vscale x 8 x i16> %evec
1563}
1564
1565define <vscale x 8 x i16> @vfptoui_nxv8f64_nxv8i16(<vscale x 8 x double> %va) {
1566; CHECK-LABEL: vfptoui_nxv8f64_nxv8i16:
1567; CHECK:       # %bb.0:
1568; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1569; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8
1570; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
1571; CHECK-NEXT:    vnsrl.wx v8, v16, zero
1572; CHECK-NEXT:    ret
1573  %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i16>
1574  ret <vscale x 8 x i16> %evec
1575}
1576
1577define <vscale x 8 x i32> @vfptosi_nxv8f64_nxv8i32(<vscale x 8 x double> %va) {
1578; CHECK-LABEL: vfptosi_nxv8f64_nxv8i32:
1579; CHECK:       # %bb.0:
1580; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1581; CHECK-NEXT:    vfncvt.rtz.x.f.w v16, v8
1582; CHECK-NEXT:    vmv.v.v v8, v16
1583; CHECK-NEXT:    ret
1584  %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i32>
1585  ret <vscale x 8 x i32> %evec
1586}
1587
1588define <vscale x 8 x i32> @vfptoui_nxv8f64_nxv8i32(<vscale x 8 x double> %va) {
1589; CHECK-LABEL: vfptoui_nxv8f64_nxv8i32:
1590; CHECK:       # %bb.0:
1591; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1592; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8
1593; CHECK-NEXT:    vmv.v.v v8, v16
1594; CHECK-NEXT:    ret
1595  %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i32>
1596  ret <vscale x 8 x i32> %evec
1597}
1598
1599define <vscale x 8 x i64> @vfptosi_nxv8f64_nxv8i64(<vscale x 8 x double> %va) {
1600; CHECK-LABEL: vfptosi_nxv8f64_nxv8i64:
1601; CHECK:       # %bb.0:
1602; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1603; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
1604; CHECK-NEXT:    ret
1605  %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i64>
1606  ret <vscale x 8 x i64> %evec
1607}
1608
1609define <vscale x 8 x i64> @vfptoui_nxv8f64_nxv8i64(<vscale x 8 x double> %va) {
1610; CHECK-LABEL: vfptoui_nxv8f64_nxv8i64:
1611; CHECK:       # %bb.0:
1612; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1613; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
1614; CHECK-NEXT:    ret
1615  %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i64>
1616  ret <vscale x 8 x i64> %evec
1617}
1618