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