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