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> @vsitofp_nxv1i7_nxv1f16(<vscale x 1 x i7> %va) {
379; CHECK-LABEL: vsitofp_nxv1i7_nxv1f16:
380; CHECK:       # %bb.0:
381; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, mu
382; CHECK-NEXT:    vadd.vv v8, v8, v8
383; CHECK-NEXT:    vsra.vi v9, v8, 1
384; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
385; CHECK-NEXT:    ret
386  %evec = sitofp <vscale x 1 x i7> %va to <vscale x 1 x half>
387  ret <vscale x 1 x half> %evec
388}
389
390define <vscale x 1 x half> @vuitofp_nxv1i7_nxv1f16(<vscale x 1 x i7> %va) {
391; CHECK-LABEL: vuitofp_nxv1i7_nxv1f16:
392; CHECK:       # %bb.0:
393; CHECK-NEXT:    li a0, 127
394; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, mu
395; CHECK-NEXT:    vand.vx v9, v8, a0
396; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
397; CHECK-NEXT:    ret
398  %evec = uitofp <vscale x 1 x i7> %va to <vscale x 1 x half>
399  ret <vscale x 1 x half> %evec
400}
401
402define <vscale x 1 x half> @vuitofp_nxv1i8_nxv1f16(<vscale x 1 x i8> %va) {
403; CHECK-LABEL: vuitofp_nxv1i8_nxv1f16:
404; CHECK:       # %bb.0:
405; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, mu
406; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
407; CHECK-NEXT:    vmv1r.v v8, v9
408; CHECK-NEXT:    ret
409  %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x half>
410  ret <vscale x 1 x half> %evec
411}
412
413define <vscale x 1 x float> @vsitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) {
414; CHECK-LABEL: vsitofp_nxv1i8_nxv1f32:
415; CHECK:       # %bb.0:
416; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
417; CHECK-NEXT:    vsext.vf4 v9, v8
418; CHECK-NEXT:    vfcvt.f.x.v v8, v9
419; CHECK-NEXT:    ret
420  %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x float>
421  ret <vscale x 1 x float> %evec
422}
423
424define <vscale x 1 x float> @vuitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) {
425; CHECK-LABEL: vuitofp_nxv1i8_nxv1f32:
426; CHECK:       # %bb.0:
427; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
428; CHECK-NEXT:    vzext.vf4 v9, v8
429; CHECK-NEXT:    vfcvt.f.xu.v v8, v9
430; CHECK-NEXT:    ret
431  %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x float>
432  ret <vscale x 1 x float> %evec
433}
434
435define <vscale x 1 x double> @vsitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) {
436; CHECK-LABEL: vsitofp_nxv1i8_nxv1f64:
437; CHECK:       # %bb.0:
438; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
439; CHECK-NEXT:    vsext.vf8 v9, v8
440; CHECK-NEXT:    vfcvt.f.x.v v8, v9
441; CHECK-NEXT:    ret
442  %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x double>
443  ret <vscale x 1 x double> %evec
444}
445
446define <vscale x 1 x double> @vuitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) {
447; CHECK-LABEL: vuitofp_nxv1i8_nxv1f64:
448; CHECK:       # %bb.0:
449; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
450; CHECK-NEXT:    vzext.vf8 v9, v8
451; CHECK-NEXT:    vfcvt.f.xu.v v8, v9
452; CHECK-NEXT:    ret
453  %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x double>
454  ret <vscale x 1 x double> %evec
455}
456
457define <vscale x 2 x half> @vsitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) {
458; CHECK-LABEL: vsitofp_nxv2i8_nxv2f16:
459; CHECK:       # %bb.0:
460; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, mu
461; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
462; CHECK-NEXT:    vmv1r.v v8, v9
463; CHECK-NEXT:    ret
464  %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x half>
465  ret <vscale x 2 x half> %evec
466}
467
468define <vscale x 2 x half> @vuitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) {
469; CHECK-LABEL: vuitofp_nxv2i8_nxv2f16:
470; CHECK:       # %bb.0:
471; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, mu
472; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
473; CHECK-NEXT:    vmv1r.v v8, v9
474; CHECK-NEXT:    ret
475  %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x half>
476  ret <vscale x 2 x half> %evec
477}
478
479define <vscale x 2 x float> @vsitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) {
480; CHECK-LABEL: vsitofp_nxv2i8_nxv2f32:
481; CHECK:       # %bb.0:
482; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
483; CHECK-NEXT:    vsext.vf4 v9, v8
484; CHECK-NEXT:    vfcvt.f.x.v v8, v9
485; CHECK-NEXT:    ret
486  %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x float>
487  ret <vscale x 2 x float> %evec
488}
489
490define <vscale x 2 x float> @vuitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) {
491; CHECK-LABEL: vuitofp_nxv2i8_nxv2f32:
492; CHECK:       # %bb.0:
493; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
494; CHECK-NEXT:    vzext.vf4 v9, v8
495; CHECK-NEXT:    vfcvt.f.xu.v v8, v9
496; CHECK-NEXT:    ret
497  %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x float>
498  ret <vscale x 2 x float> %evec
499}
500
501define <vscale x 2 x double> @vsitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) {
502; CHECK-LABEL: vsitofp_nxv2i8_nxv2f64:
503; CHECK:       # %bb.0:
504; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
505; CHECK-NEXT:    vsext.vf8 v10, v8
506; CHECK-NEXT:    vfcvt.f.x.v v8, v10
507; CHECK-NEXT:    ret
508  %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x double>
509  ret <vscale x 2 x double> %evec
510}
511
512define <vscale x 2 x double> @vuitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) {
513; CHECK-LABEL: vuitofp_nxv2i8_nxv2f64:
514; CHECK:       # %bb.0:
515; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
516; CHECK-NEXT:    vzext.vf8 v10, v8
517; CHECK-NEXT:    vfcvt.f.xu.v v8, v10
518; CHECK-NEXT:    ret
519  %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x double>
520  ret <vscale x 2 x double> %evec
521}
522
523define <vscale x 4 x half> @vsitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) {
524; CHECK-LABEL: vsitofp_nxv4i8_nxv4f16:
525; CHECK:       # %bb.0:
526; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, mu
527; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
528; CHECK-NEXT:    vmv1r.v v8, v9
529; CHECK-NEXT:    ret
530  %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x half>
531  ret <vscale x 4 x half> %evec
532}
533
534define <vscale x 4 x half> @vuitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) {
535; CHECK-LABEL: vuitofp_nxv4i8_nxv4f16:
536; CHECK:       # %bb.0:
537; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, mu
538; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
539; CHECK-NEXT:    vmv1r.v v8, v9
540; CHECK-NEXT:    ret
541  %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x half>
542  ret <vscale x 4 x half> %evec
543}
544
545define <vscale x 4 x float> @vsitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) {
546; CHECK-LABEL: vsitofp_nxv4i8_nxv4f32:
547; CHECK:       # %bb.0:
548; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
549; CHECK-NEXT:    vsext.vf4 v10, v8
550; CHECK-NEXT:    vfcvt.f.x.v v8, v10
551; CHECK-NEXT:    ret
552  %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x float>
553  ret <vscale x 4 x float> %evec
554}
555
556define <vscale x 4 x float> @vuitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) {
557; CHECK-LABEL: vuitofp_nxv4i8_nxv4f32:
558; CHECK:       # %bb.0:
559; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
560; CHECK-NEXT:    vzext.vf4 v10, v8
561; CHECK-NEXT:    vfcvt.f.xu.v v8, v10
562; CHECK-NEXT:    ret
563  %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x float>
564  ret <vscale x 4 x float> %evec
565}
566
567define <vscale x 4 x double> @vsitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) {
568; CHECK-LABEL: vsitofp_nxv4i8_nxv4f64:
569; CHECK:       # %bb.0:
570; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
571; CHECK-NEXT:    vsext.vf8 v12, v8
572; CHECK-NEXT:    vfcvt.f.x.v v8, v12
573; CHECK-NEXT:    ret
574  %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x double>
575  ret <vscale x 4 x double> %evec
576}
577
578define <vscale x 4 x double> @vuitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) {
579; CHECK-LABEL: vuitofp_nxv4i8_nxv4f64:
580; CHECK:       # %bb.0:
581; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
582; CHECK-NEXT:    vzext.vf8 v12, v8
583; CHECK-NEXT:    vfcvt.f.xu.v v8, v12
584; CHECK-NEXT:    ret
585  %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x double>
586  ret <vscale x 4 x double> %evec
587}
588
589define <vscale x 8 x half> @vsitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) {
590; CHECK-LABEL: vsitofp_nxv8i8_nxv8f16:
591; CHECK:       # %bb.0:
592; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, mu
593; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
594; CHECK-NEXT:    vmv2r.v v8, v10
595; CHECK-NEXT:    ret
596  %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x half>
597  ret <vscale x 8 x half> %evec
598}
599
600define <vscale x 8 x half> @vuitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) {
601; CHECK-LABEL: vuitofp_nxv8i8_nxv8f16:
602; CHECK:       # %bb.0:
603; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, mu
604; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8
605; CHECK-NEXT:    vmv2r.v v8, v10
606; CHECK-NEXT:    ret
607  %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x half>
608  ret <vscale x 8 x half> %evec
609}
610
611define <vscale x 8 x float> @vsitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) {
612; CHECK-LABEL: vsitofp_nxv8i8_nxv8f32:
613; CHECK:       # %bb.0:
614; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
615; CHECK-NEXT:    vsext.vf4 v12, v8
616; CHECK-NEXT:    vfcvt.f.x.v v8, v12
617; CHECK-NEXT:    ret
618  %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x float>
619  ret <vscale x 8 x float> %evec
620}
621
622define <vscale x 8 x float> @vuitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) {
623; CHECK-LABEL: vuitofp_nxv8i8_nxv8f32:
624; CHECK:       # %bb.0:
625; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
626; CHECK-NEXT:    vzext.vf4 v12, v8
627; CHECK-NEXT:    vfcvt.f.xu.v v8, v12
628; CHECK-NEXT:    ret
629  %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x float>
630  ret <vscale x 8 x float> %evec
631}
632
633define <vscale x 8 x double> @vsitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) {
634; CHECK-LABEL: vsitofp_nxv8i8_nxv8f64:
635; CHECK:       # %bb.0:
636; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
637; CHECK-NEXT:    vsext.vf8 v16, v8
638; CHECK-NEXT:    vfcvt.f.x.v v8, v16
639; CHECK-NEXT:    ret
640  %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x double>
641  ret <vscale x 8 x double> %evec
642}
643
644define <vscale x 8 x double> @vuitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) {
645; CHECK-LABEL: vuitofp_nxv8i8_nxv8f64:
646; CHECK:       # %bb.0:
647; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
648; CHECK-NEXT:    vzext.vf8 v16, v8
649; CHECK-NEXT:    vfcvt.f.xu.v v8, v16
650; CHECK-NEXT:    ret
651  %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x double>
652  ret <vscale x 8 x double> %evec
653}
654
655define <vscale x 16 x half> @vsitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) {
656; CHECK-LABEL: vsitofp_nxv16i8_nxv16f16:
657; CHECK:       # %bb.0:
658; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, mu
659; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
660; CHECK-NEXT:    vmv4r.v v8, v12
661; CHECK-NEXT:    ret
662  %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x half>
663  ret <vscale x 16 x half> %evec
664}
665
666define <vscale x 16 x half> @vuitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) {
667; CHECK-LABEL: vuitofp_nxv16i8_nxv16f16:
668; CHECK:       # %bb.0:
669; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, mu
670; CHECK-NEXT:    vfwcvt.f.xu.v v12, v8
671; CHECK-NEXT:    vmv4r.v v8, v12
672; CHECK-NEXT:    ret
673  %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x half>
674  ret <vscale x 16 x half> %evec
675}
676
677define <vscale x 16 x float> @vsitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) {
678; CHECK-LABEL: vsitofp_nxv16i8_nxv16f32:
679; CHECK:       # %bb.0:
680; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
681; CHECK-NEXT:    vsext.vf4 v16, v8
682; CHECK-NEXT:    vfcvt.f.x.v v8, v16
683; CHECK-NEXT:    ret
684  %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x float>
685  ret <vscale x 16 x float> %evec
686}
687
688define <vscale x 16 x float> @vuitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) {
689; CHECK-LABEL: vuitofp_nxv16i8_nxv16f32:
690; CHECK:       # %bb.0:
691; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
692; CHECK-NEXT:    vzext.vf4 v16, v8
693; CHECK-NEXT:    vfcvt.f.xu.v v8, v16
694; CHECK-NEXT:    ret
695  %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x float>
696  ret <vscale x 16 x float> %evec
697}
698
699define <vscale x 32 x half> @vsitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) {
700; CHECK-LABEL: vsitofp_nxv32i8_nxv32f16:
701; CHECK:       # %bb.0:
702; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, mu
703; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
704; CHECK-NEXT:    vmv8r.v v8, v16
705; CHECK-NEXT:    ret
706  %evec = sitofp <vscale x 32 x i8> %va to <vscale x 32 x half>
707  ret <vscale x 32 x half> %evec
708}
709
710define <vscale x 32 x half> @vuitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) {
711; CHECK-LABEL: vuitofp_nxv32i8_nxv32f16:
712; CHECK:       # %bb.0:
713; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, mu
714; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
715; CHECK-NEXT:    vmv8r.v v8, v16
716; CHECK-NEXT:    ret
717  %evec = uitofp <vscale x 32 x i8> %va to <vscale x 32 x half>
718  ret <vscale x 32 x half> %evec
719}
720
721define <vscale x 1 x half> @vsitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) {
722; CHECK-LABEL: vsitofp_nxv1i16_nxv1f16:
723; CHECK:       # %bb.0:
724; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
725; CHECK-NEXT:    vfcvt.f.x.v v8, v8
726; CHECK-NEXT:    ret
727  %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x half>
728  ret <vscale x 1 x half> %evec
729}
730
731define <vscale x 1 x half> @vuitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) {
732; CHECK-LABEL: vuitofp_nxv1i16_nxv1f16:
733; CHECK:       # %bb.0:
734; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
735; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
736; CHECK-NEXT:    ret
737  %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x half>
738  ret <vscale x 1 x half> %evec
739}
740
741define <vscale x 1 x float> @vsitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) {
742; CHECK-LABEL: vsitofp_nxv1i16_nxv1f32:
743; CHECK:       # %bb.0:
744; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
745; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
746; CHECK-NEXT:    vmv1r.v v8, v9
747; CHECK-NEXT:    ret
748  %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x float>
749  ret <vscale x 1 x float> %evec
750}
751
752define <vscale x 1 x float> @vuitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) {
753; CHECK-LABEL: vuitofp_nxv1i16_nxv1f32:
754; CHECK:       # %bb.0:
755; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
756; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
757; CHECK-NEXT:    vmv1r.v v8, v9
758; CHECK-NEXT:    ret
759  %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x float>
760  ret <vscale x 1 x float> %evec
761}
762
763define <vscale x 1 x double> @vsitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) {
764; CHECK-LABEL: vsitofp_nxv1i16_nxv1f64:
765; CHECK:       # %bb.0:
766; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
767; CHECK-NEXT:    vsext.vf4 v9, v8
768; CHECK-NEXT:    vfcvt.f.x.v v8, v9
769; CHECK-NEXT:    ret
770  %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x double>
771  ret <vscale x 1 x double> %evec
772}
773
774define <vscale x 1 x double> @vuitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) {
775; CHECK-LABEL: vuitofp_nxv1i16_nxv1f64:
776; CHECK:       # %bb.0:
777; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
778; CHECK-NEXT:    vzext.vf4 v9, v8
779; CHECK-NEXT:    vfcvt.f.xu.v v8, v9
780; CHECK-NEXT:    ret
781  %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x double>
782  ret <vscale x 1 x double> %evec
783}
784
785define <vscale x 2 x half> @vsitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) {
786; CHECK-LABEL: vsitofp_nxv2i16_nxv2f16:
787; CHECK:       # %bb.0:
788; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
789; CHECK-NEXT:    vfcvt.f.x.v v8, v8
790; CHECK-NEXT:    ret
791  %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x half>
792  ret <vscale x 2 x half> %evec
793}
794
795define <vscale x 2 x half> @vuitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) {
796; CHECK-LABEL: vuitofp_nxv2i16_nxv2f16:
797; CHECK:       # %bb.0:
798; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
799; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
800; CHECK-NEXT:    ret
801  %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x half>
802  ret <vscale x 2 x half> %evec
803}
804
805define <vscale x 2 x float> @vsitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) {
806; CHECK-LABEL: vsitofp_nxv2i16_nxv2f32:
807; CHECK:       # %bb.0:
808; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
809; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
810; CHECK-NEXT:    vmv1r.v v8, v9
811; CHECK-NEXT:    ret
812  %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x float>
813  ret <vscale x 2 x float> %evec
814}
815
816define <vscale x 2 x float> @vuitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) {
817; CHECK-LABEL: vuitofp_nxv2i16_nxv2f32:
818; CHECK:       # %bb.0:
819; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
820; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
821; CHECK-NEXT:    vmv1r.v v8, v9
822; CHECK-NEXT:    ret
823  %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x float>
824  ret <vscale x 2 x float> %evec
825}
826
827define <vscale x 2 x double> @vsitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) {
828; CHECK-LABEL: vsitofp_nxv2i16_nxv2f64:
829; CHECK:       # %bb.0:
830; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
831; CHECK-NEXT:    vsext.vf4 v10, v8
832; CHECK-NEXT:    vfcvt.f.x.v v8, v10
833; CHECK-NEXT:    ret
834  %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x double>
835  ret <vscale x 2 x double> %evec
836}
837
838define <vscale x 2 x double> @vuitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) {
839; CHECK-LABEL: vuitofp_nxv2i16_nxv2f64:
840; CHECK:       # %bb.0:
841; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
842; CHECK-NEXT:    vzext.vf4 v10, v8
843; CHECK-NEXT:    vfcvt.f.xu.v v8, v10
844; CHECK-NEXT:    ret
845  %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x double>
846  ret <vscale x 2 x double> %evec
847}
848
849define <vscale x 4 x half> @vsitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) {
850; CHECK-LABEL: vsitofp_nxv4i16_nxv4f16:
851; CHECK:       # %bb.0:
852; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
853; CHECK-NEXT:    vfcvt.f.x.v v8, v8
854; CHECK-NEXT:    ret
855  %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x half>
856  ret <vscale x 4 x half> %evec
857}
858
859define <vscale x 4 x half> @vuitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) {
860; CHECK-LABEL: vuitofp_nxv4i16_nxv4f16:
861; CHECK:       # %bb.0:
862; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
863; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
864; CHECK-NEXT:    ret
865  %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x half>
866  ret <vscale x 4 x half> %evec
867}
868
869define <vscale x 4 x float> @vsitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) {
870; CHECK-LABEL: vsitofp_nxv4i16_nxv4f32:
871; CHECK:       # %bb.0:
872; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
873; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
874; CHECK-NEXT:    vmv2r.v v8, v10
875; CHECK-NEXT:    ret
876  %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x float>
877  ret <vscale x 4 x float> %evec
878}
879
880define <vscale x 4 x float> @vuitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) {
881; CHECK-LABEL: vuitofp_nxv4i16_nxv4f32:
882; CHECK:       # %bb.0:
883; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
884; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8
885; CHECK-NEXT:    vmv2r.v v8, v10
886; CHECK-NEXT:    ret
887  %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x float>
888  ret <vscale x 4 x float> %evec
889}
890
891define <vscale x 4 x double> @vsitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) {
892; CHECK-LABEL: vsitofp_nxv4i16_nxv4f64:
893; CHECK:       # %bb.0:
894; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
895; CHECK-NEXT:    vsext.vf4 v12, v8
896; CHECK-NEXT:    vfcvt.f.x.v v8, v12
897; CHECK-NEXT:    ret
898  %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x double>
899  ret <vscale x 4 x double> %evec
900}
901
902define <vscale x 4 x double> @vuitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) {
903; CHECK-LABEL: vuitofp_nxv4i16_nxv4f64:
904; CHECK:       # %bb.0:
905; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
906; CHECK-NEXT:    vzext.vf4 v12, v8
907; CHECK-NEXT:    vfcvt.f.xu.v v8, v12
908; CHECK-NEXT:    ret
909  %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x double>
910  ret <vscale x 4 x double> %evec
911}
912
913define <vscale x 8 x half> @vsitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) {
914; CHECK-LABEL: vsitofp_nxv8i16_nxv8f16:
915; CHECK:       # %bb.0:
916; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
917; CHECK-NEXT:    vfcvt.f.x.v v8, v8
918; CHECK-NEXT:    ret
919  %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x half>
920  ret <vscale x 8 x half> %evec
921}
922
923define <vscale x 8 x half> @vuitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) {
924; CHECK-LABEL: vuitofp_nxv8i16_nxv8f16:
925; CHECK:       # %bb.0:
926; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
927; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
928; CHECK-NEXT:    ret
929  %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x half>
930  ret <vscale x 8 x half> %evec
931}
932
933define <vscale x 8 x float> @vsitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) {
934; CHECK-LABEL: vsitofp_nxv8i16_nxv8f32:
935; CHECK:       # %bb.0:
936; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
937; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
938; CHECK-NEXT:    vmv4r.v v8, v12
939; CHECK-NEXT:    ret
940  %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x float>
941  ret <vscale x 8 x float> %evec
942}
943
944define <vscale x 8 x float> @vuitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) {
945; CHECK-LABEL: vuitofp_nxv8i16_nxv8f32:
946; CHECK:       # %bb.0:
947; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
948; CHECK-NEXT:    vfwcvt.f.xu.v v12, v8
949; CHECK-NEXT:    vmv4r.v v8, v12
950; CHECK-NEXT:    ret
951  %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x float>
952  ret <vscale x 8 x float> %evec
953}
954
955define <vscale x 8 x double> @vsitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) {
956; CHECK-LABEL: vsitofp_nxv8i16_nxv8f64:
957; CHECK:       # %bb.0:
958; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
959; CHECK-NEXT:    vsext.vf4 v16, v8
960; CHECK-NEXT:    vfcvt.f.x.v v8, v16
961; CHECK-NEXT:    ret
962  %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x double>
963  ret <vscale x 8 x double> %evec
964}
965
966define <vscale x 8 x double> @vuitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) {
967; CHECK-LABEL: vuitofp_nxv8i16_nxv8f64:
968; CHECK:       # %bb.0:
969; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
970; CHECK-NEXT:    vzext.vf4 v16, v8
971; CHECK-NEXT:    vfcvt.f.xu.v v8, v16
972; CHECK-NEXT:    ret
973  %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x double>
974  ret <vscale x 8 x double> %evec
975}
976
977define <vscale x 16 x half> @vsitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) {
978; CHECK-LABEL: vsitofp_nxv16i16_nxv16f16:
979; CHECK:       # %bb.0:
980; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
981; CHECK-NEXT:    vfcvt.f.x.v v8, v8
982; CHECK-NEXT:    ret
983  %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x half>
984  ret <vscale x 16 x half> %evec
985}
986
987define <vscale x 16 x half> @vuitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) {
988; CHECK-LABEL: vuitofp_nxv16i16_nxv16f16:
989; CHECK:       # %bb.0:
990; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
991; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
992; CHECK-NEXT:    ret
993  %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x half>
994  ret <vscale x 16 x half> %evec
995}
996
997define <vscale x 16 x float> @vsitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) {
998; CHECK-LABEL: vsitofp_nxv16i16_nxv16f32:
999; CHECK:       # %bb.0:
1000; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
1001; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
1002; CHECK-NEXT:    vmv8r.v v8, v16
1003; CHECK-NEXT:    ret
1004  %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x float>
1005  ret <vscale x 16 x float> %evec
1006}
1007
1008define <vscale x 16 x float> @vuitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) {
1009; CHECK-LABEL: vuitofp_nxv16i16_nxv16f32:
1010; CHECK:       # %bb.0:
1011; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
1012; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
1013; CHECK-NEXT:    vmv8r.v v8, v16
1014; CHECK-NEXT:    ret
1015  %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x float>
1016  ret <vscale x 16 x float> %evec
1017}
1018
1019define <vscale x 32 x half> @vsitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) {
1020; CHECK-LABEL: vsitofp_nxv32i16_nxv32f16:
1021; CHECK:       # %bb.0:
1022; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
1023; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1024; CHECK-NEXT:    ret
1025  %evec = sitofp <vscale x 32 x i16> %va to <vscale x 32 x half>
1026  ret <vscale x 32 x half> %evec
1027}
1028
1029define <vscale x 32 x half> @vuitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) {
1030; CHECK-LABEL: vuitofp_nxv32i16_nxv32f16:
1031; CHECK:       # %bb.0:
1032; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
1033; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1034; CHECK-NEXT:    ret
1035  %evec = uitofp <vscale x 32 x i16> %va to <vscale x 32 x half>
1036  ret <vscale x 32 x half> %evec
1037}
1038
1039define <vscale x 1 x half> @vsitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) {
1040; CHECK-LABEL: vsitofp_nxv1i32_nxv1f16:
1041; CHECK:       # %bb.0:
1042; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
1043; CHECK-NEXT:    vfncvt.f.x.w v9, v8
1044; CHECK-NEXT:    vmv1r.v v8, v9
1045; CHECK-NEXT:    ret
1046  %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x half>
1047  ret <vscale x 1 x half> %evec
1048}
1049
1050define <vscale x 1 x half> @vuitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) {
1051; CHECK-LABEL: vuitofp_nxv1i32_nxv1f16:
1052; CHECK:       # %bb.0:
1053; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
1054; CHECK-NEXT:    vfncvt.f.xu.w v9, v8
1055; CHECK-NEXT:    vmv1r.v v8, v9
1056; CHECK-NEXT:    ret
1057  %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x half>
1058  ret <vscale x 1 x half> %evec
1059}
1060
1061define <vscale x 1 x float> @vsitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) {
1062; CHECK-LABEL: vsitofp_nxv1i32_nxv1f32:
1063; CHECK:       # %bb.0:
1064; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1065; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1066; CHECK-NEXT:    ret
1067  %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x float>
1068  ret <vscale x 1 x float> %evec
1069}
1070
1071define <vscale x 1 x float> @vuitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) {
1072; CHECK-LABEL: vuitofp_nxv1i32_nxv1f32:
1073; CHECK:       # %bb.0:
1074; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1075; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1076; CHECK-NEXT:    ret
1077  %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x float>
1078  ret <vscale x 1 x float> %evec
1079}
1080
1081define <vscale x 1 x double> @vsitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) {
1082; CHECK-LABEL: vsitofp_nxv1i32_nxv1f64:
1083; CHECK:       # %bb.0:
1084; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1085; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
1086; CHECK-NEXT:    vmv1r.v v8, v9
1087; CHECK-NEXT:    ret
1088  %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x double>
1089  ret <vscale x 1 x double> %evec
1090}
1091
1092define <vscale x 1 x double> @vuitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) {
1093; CHECK-LABEL: vuitofp_nxv1i32_nxv1f64:
1094; CHECK:       # %bb.0:
1095; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1096; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
1097; CHECK-NEXT:    vmv1r.v v8, v9
1098; CHECK-NEXT:    ret
1099  %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x double>
1100  ret <vscale x 1 x double> %evec
1101}
1102
1103define <vscale x 2 x half> @vsitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) {
1104; CHECK-LABEL: vsitofp_nxv2i32_nxv2f16:
1105; CHECK:       # %bb.0:
1106; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
1107; CHECK-NEXT:    vfncvt.f.x.w v9, v8
1108; CHECK-NEXT:    vmv1r.v v8, v9
1109; CHECK-NEXT:    ret
1110  %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x half>
1111  ret <vscale x 2 x half> %evec
1112}
1113
1114define <vscale x 2 x half> @vuitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) {
1115; CHECK-LABEL: vuitofp_nxv2i32_nxv2f16:
1116; CHECK:       # %bb.0:
1117; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
1118; CHECK-NEXT:    vfncvt.f.xu.w v9, v8
1119; CHECK-NEXT:    vmv1r.v v8, v9
1120; CHECK-NEXT:    ret
1121  %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x half>
1122  ret <vscale x 2 x half> %evec
1123}
1124
1125define <vscale x 2 x float> @vsitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) {
1126; CHECK-LABEL: vsitofp_nxv2i32_nxv2f32:
1127; CHECK:       # %bb.0:
1128; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1129; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1130; CHECK-NEXT:    ret
1131  %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x float>
1132  ret <vscale x 2 x float> %evec
1133}
1134
1135define <vscale x 2 x float> @vuitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) {
1136; CHECK-LABEL: vuitofp_nxv2i32_nxv2f32:
1137; CHECK:       # %bb.0:
1138; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1139; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1140; CHECK-NEXT:    ret
1141  %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x float>
1142  ret <vscale x 2 x float> %evec
1143}
1144
1145define <vscale x 2 x double> @vsitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) {
1146; CHECK-LABEL: vsitofp_nxv2i32_nxv2f64:
1147; CHECK:       # %bb.0:
1148; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1149; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
1150; CHECK-NEXT:    vmv2r.v v8, v10
1151; CHECK-NEXT:    ret
1152  %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x double>
1153  ret <vscale x 2 x double> %evec
1154}
1155
1156define <vscale x 2 x double> @vuitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) {
1157; CHECK-LABEL: vuitofp_nxv2i32_nxv2f64:
1158; CHECK:       # %bb.0:
1159; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1160; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8
1161; CHECK-NEXT:    vmv2r.v v8, v10
1162; CHECK-NEXT:    ret
1163  %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x double>
1164  ret <vscale x 2 x double> %evec
1165}
1166
1167define <vscale x 4 x half> @vsitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) {
1168; CHECK-LABEL: vsitofp_nxv4i32_nxv4f16:
1169; CHECK:       # %bb.0:
1170; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1171; CHECK-NEXT:    vfncvt.f.x.w v10, v8
1172; CHECK-NEXT:    vmv.v.v v8, v10
1173; CHECK-NEXT:    ret
1174  %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x half>
1175  ret <vscale x 4 x half> %evec
1176}
1177
1178define <vscale x 4 x half> @vuitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) {
1179; CHECK-LABEL: vuitofp_nxv4i32_nxv4f16:
1180; CHECK:       # %bb.0:
1181; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1182; CHECK-NEXT:    vfncvt.f.xu.w v10, v8
1183; CHECK-NEXT:    vmv.v.v v8, v10
1184; CHECK-NEXT:    ret
1185  %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x half>
1186  ret <vscale x 4 x half> %evec
1187}
1188
1189define <vscale x 4 x float> @vsitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) {
1190; CHECK-LABEL: vsitofp_nxv4i32_nxv4f32:
1191; CHECK:       # %bb.0:
1192; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1193; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1194; CHECK-NEXT:    ret
1195  %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x float>
1196  ret <vscale x 4 x float> %evec
1197}
1198
1199define <vscale x 4 x float> @vuitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) {
1200; CHECK-LABEL: vuitofp_nxv4i32_nxv4f32:
1201; CHECK:       # %bb.0:
1202; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1203; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1204; CHECK-NEXT:    ret
1205  %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x float>
1206  ret <vscale x 4 x float> %evec
1207}
1208
1209define <vscale x 4 x double> @vsitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) {
1210; CHECK-LABEL: vsitofp_nxv4i32_nxv4f64:
1211; CHECK:       # %bb.0:
1212; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1213; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
1214; CHECK-NEXT:    vmv4r.v v8, v12
1215; CHECK-NEXT:    ret
1216  %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x double>
1217  ret <vscale x 4 x double> %evec
1218}
1219
1220define <vscale x 4 x double> @vuitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) {
1221; CHECK-LABEL: vuitofp_nxv4i32_nxv4f64:
1222; CHECK:       # %bb.0:
1223; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1224; CHECK-NEXT:    vfwcvt.f.xu.v v12, v8
1225; CHECK-NEXT:    vmv4r.v v8, v12
1226; CHECK-NEXT:    ret
1227  %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x double>
1228  ret <vscale x 4 x double> %evec
1229}
1230
1231define <vscale x 8 x half> @vsitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) {
1232; CHECK-LABEL: vsitofp_nxv8i32_nxv8f16:
1233; CHECK:       # %bb.0:
1234; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
1235; CHECK-NEXT:    vfncvt.f.x.w v12, v8
1236; CHECK-NEXT:    vmv.v.v v8, v12
1237; CHECK-NEXT:    ret
1238  %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x half>
1239  ret <vscale x 8 x half> %evec
1240}
1241
1242define <vscale x 8 x half> @vuitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) {
1243; CHECK-LABEL: vuitofp_nxv8i32_nxv8f16:
1244; CHECK:       # %bb.0:
1245; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
1246; CHECK-NEXT:    vfncvt.f.xu.w v12, v8
1247; CHECK-NEXT:    vmv.v.v v8, v12
1248; CHECK-NEXT:    ret
1249  %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x half>
1250  ret <vscale x 8 x half> %evec
1251}
1252
1253define <vscale x 8 x float> @vsitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) {
1254; CHECK-LABEL: vsitofp_nxv8i32_nxv8f32:
1255; CHECK:       # %bb.0:
1256; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1257; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1258; CHECK-NEXT:    ret
1259  %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x float>
1260  ret <vscale x 8 x float> %evec
1261}
1262
1263define <vscale x 8 x float> @vuitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) {
1264; CHECK-LABEL: vuitofp_nxv8i32_nxv8f32:
1265; CHECK:       # %bb.0:
1266; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1267; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1268; CHECK-NEXT:    ret
1269  %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x float>
1270  ret <vscale x 8 x float> %evec
1271}
1272
1273define <vscale x 8 x double> @vsitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) {
1274; CHECK-LABEL: vsitofp_nxv8i32_nxv8f64:
1275; CHECK:       # %bb.0:
1276; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1277; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
1278; CHECK-NEXT:    vmv8r.v v8, v16
1279; CHECK-NEXT:    ret
1280  %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x double>
1281  ret <vscale x 8 x double> %evec
1282}
1283
1284define <vscale x 8 x double> @vuitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) {
1285; CHECK-LABEL: vuitofp_nxv8i32_nxv8f64:
1286; CHECK:       # %bb.0:
1287; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1288; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
1289; CHECK-NEXT:    vmv8r.v v8, v16
1290; CHECK-NEXT:    ret
1291  %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x double>
1292  ret <vscale x 8 x double> %evec
1293}
1294
1295define <vscale x 16 x half> @vsitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) {
1296; CHECK-LABEL: vsitofp_nxv16i32_nxv16f16:
1297; CHECK:       # %bb.0:
1298; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
1299; CHECK-NEXT:    vfncvt.f.x.w v16, v8
1300; CHECK-NEXT:    vmv.v.v v8, v16
1301; CHECK-NEXT:    ret
1302  %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x half>
1303  ret <vscale x 16 x half> %evec
1304}
1305
1306define <vscale x 16 x half> @vuitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) {
1307; CHECK-LABEL: vuitofp_nxv16i32_nxv16f16:
1308; CHECK:       # %bb.0:
1309; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
1310; CHECK-NEXT:    vfncvt.f.xu.w v16, v8
1311; CHECK-NEXT:    vmv.v.v v8, v16
1312; CHECK-NEXT:    ret
1313  %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x half>
1314  ret <vscale x 16 x half> %evec
1315}
1316
1317define <vscale x 16 x float> @vsitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) {
1318; CHECK-LABEL: vsitofp_nxv16i32_nxv16f32:
1319; CHECK:       # %bb.0:
1320; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
1321; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1322; CHECK-NEXT:    ret
1323  %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x float>
1324  ret <vscale x 16 x float> %evec
1325}
1326
1327define <vscale x 16 x float> @vuitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) {
1328; CHECK-LABEL: vuitofp_nxv16i32_nxv16f32:
1329; CHECK:       # %bb.0:
1330; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
1331; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1332; CHECK-NEXT:    ret
1333  %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x float>
1334  ret <vscale x 16 x float> %evec
1335}
1336
1337define <vscale x 1 x half> @vsitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) {
1338; CHECK-LABEL: vsitofp_nxv1i64_nxv1f16:
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:    vsetvli zero, zero, e16, mf4, ta, mu
1343; CHECK-NEXT:    vfncvt.f.f.w v8, v9
1344; CHECK-NEXT:    ret
1345  %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x half>
1346  ret <vscale x 1 x half> %evec
1347}
1348
1349define <vscale x 1 x half> @vuitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) {
1350; CHECK-LABEL: vuitofp_nxv1i64_nxv1f16:
1351; CHECK:       # %bb.0:
1352; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1353; CHECK-NEXT:    vfncvt.f.xu.w v9, v8
1354; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
1355; CHECK-NEXT:    vfncvt.f.f.w v8, v9
1356; CHECK-NEXT:    ret
1357  %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x half>
1358  ret <vscale x 1 x half> %evec
1359}
1360
1361define <vscale x 1 x float> @vsitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) {
1362; CHECK-LABEL: vsitofp_nxv1i64_nxv1f32:
1363; CHECK:       # %bb.0:
1364; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1365; CHECK-NEXT:    vfncvt.f.x.w v9, v8
1366; CHECK-NEXT:    vmv1r.v v8, v9
1367; CHECK-NEXT:    ret
1368  %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x float>
1369  ret <vscale x 1 x float> %evec
1370}
1371
1372define <vscale x 1 x float> @vuitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) {
1373; CHECK-LABEL: vuitofp_nxv1i64_nxv1f32:
1374; CHECK:       # %bb.0:
1375; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
1376; CHECK-NEXT:    vfncvt.f.xu.w v9, v8
1377; CHECK-NEXT:    vmv1r.v v8, v9
1378; CHECK-NEXT:    ret
1379  %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x float>
1380  ret <vscale x 1 x float> %evec
1381}
1382
1383define <vscale x 1 x double> @vsitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) {
1384; CHECK-LABEL: vsitofp_nxv1i64_nxv1f64:
1385; CHECK:       # %bb.0:
1386; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
1387; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1388; CHECK-NEXT:    ret
1389  %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x double>
1390  ret <vscale x 1 x double> %evec
1391}
1392
1393define <vscale x 1 x double> @vuitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) {
1394; CHECK-LABEL: vuitofp_nxv1i64_nxv1f64:
1395; CHECK:       # %bb.0:
1396; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
1397; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1398; CHECK-NEXT:    ret
1399  %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x double>
1400  ret <vscale x 1 x double> %evec
1401}
1402
1403define <vscale x 2 x half> @vsitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) {
1404; CHECK-LABEL: vsitofp_nxv2i64_nxv2f16:
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:    vsetvli zero, zero, e16, mf2, ta, mu
1409; CHECK-NEXT:    vfncvt.f.f.w v8, v10
1410; CHECK-NEXT:    ret
1411  %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x half>
1412  ret <vscale x 2 x half> %evec
1413}
1414
1415define <vscale x 2 x half> @vuitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) {
1416; CHECK-LABEL: vuitofp_nxv2i64_nxv2f16:
1417; CHECK:       # %bb.0:
1418; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1419; CHECK-NEXT:    vfncvt.f.xu.w v10, v8
1420; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
1421; CHECK-NEXT:    vfncvt.f.f.w v8, v10
1422; CHECK-NEXT:    ret
1423  %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x half>
1424  ret <vscale x 2 x half> %evec
1425}
1426
1427define <vscale x 2 x float> @vsitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) {
1428; CHECK-LABEL: vsitofp_nxv2i64_nxv2f32:
1429; CHECK:       # %bb.0:
1430; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1431; CHECK-NEXT:    vfncvt.f.x.w v10, v8
1432; CHECK-NEXT:    vmv.v.v v8, v10
1433; CHECK-NEXT:    ret
1434  %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x float>
1435  ret <vscale x 2 x float> %evec
1436}
1437
1438define <vscale x 2 x float> @vuitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) {
1439; CHECK-LABEL: vuitofp_nxv2i64_nxv2f32:
1440; CHECK:       # %bb.0:
1441; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
1442; CHECK-NEXT:    vfncvt.f.xu.w v10, v8
1443; CHECK-NEXT:    vmv.v.v v8, v10
1444; CHECK-NEXT:    ret
1445  %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x float>
1446  ret <vscale x 2 x float> %evec
1447}
1448
1449define <vscale x 2 x double> @vsitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) {
1450; CHECK-LABEL: vsitofp_nxv2i64_nxv2f64:
1451; CHECK:       # %bb.0:
1452; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
1453; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1454; CHECK-NEXT:    ret
1455  %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x double>
1456  ret <vscale x 2 x double> %evec
1457}
1458
1459define <vscale x 2 x double> @vuitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) {
1460; CHECK-LABEL: vuitofp_nxv2i64_nxv2f64:
1461; CHECK:       # %bb.0:
1462; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
1463; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1464; CHECK-NEXT:    ret
1465  %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x double>
1466  ret <vscale x 2 x double> %evec
1467}
1468
1469define <vscale x 4 x half> @vsitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) {
1470; CHECK-LABEL: vsitofp_nxv4i64_nxv4f16:
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:    vsetvli zero, zero, e16, m1, ta, mu
1475; CHECK-NEXT:    vfncvt.f.f.w v8, v12
1476; CHECK-NEXT:    ret
1477  %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x half>
1478  ret <vscale x 4 x half> %evec
1479}
1480
1481define <vscale x 4 x half> @vuitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) {
1482; CHECK-LABEL: vuitofp_nxv4i64_nxv4f16:
1483; CHECK:       # %bb.0:
1484; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1485; CHECK-NEXT:    vfncvt.f.xu.w v12, v8
1486; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1487; CHECK-NEXT:    vfncvt.f.f.w v8, v12
1488; CHECK-NEXT:    ret
1489  %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x half>
1490  ret <vscale x 4 x half> %evec
1491}
1492
1493define <vscale x 4 x float> @vsitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) {
1494; CHECK-LABEL: vsitofp_nxv4i64_nxv4f32:
1495; CHECK:       # %bb.0:
1496; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1497; CHECK-NEXT:    vfncvt.f.x.w v12, v8
1498; CHECK-NEXT:    vmv.v.v v8, v12
1499; CHECK-NEXT:    ret
1500  %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x float>
1501  ret <vscale x 4 x float> %evec
1502}
1503
1504define <vscale x 4 x float> @vuitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) {
1505; CHECK-LABEL: vuitofp_nxv4i64_nxv4f32:
1506; CHECK:       # %bb.0:
1507; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
1508; CHECK-NEXT:    vfncvt.f.xu.w v12, v8
1509; CHECK-NEXT:    vmv.v.v v8, v12
1510; CHECK-NEXT:    ret
1511  %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x float>
1512  ret <vscale x 4 x float> %evec
1513}
1514
1515define <vscale x 4 x double> @vsitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) {
1516; CHECK-LABEL: vsitofp_nxv4i64_nxv4f64:
1517; CHECK:       # %bb.0:
1518; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
1519; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1520; CHECK-NEXT:    ret
1521  %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x double>
1522  ret <vscale x 4 x double> %evec
1523}
1524
1525define <vscale x 4 x double> @vuitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) {
1526; CHECK-LABEL: vuitofp_nxv4i64_nxv4f64:
1527; CHECK:       # %bb.0:
1528; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
1529; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1530; CHECK-NEXT:    ret
1531  %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x double>
1532  ret <vscale x 4 x double> %evec
1533}
1534
1535define <vscale x 8 x half> @vsitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) {
1536; CHECK-LABEL: vsitofp_nxv8i64_nxv8f16:
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:    vsetvli zero, zero, e16, m2, ta, mu
1541; CHECK-NEXT:    vfncvt.f.f.w v8, v16
1542; CHECK-NEXT:    ret
1543  %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x half>
1544  ret <vscale x 8 x half> %evec
1545}
1546
1547define <vscale x 8 x half> @vuitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) {
1548; CHECK-LABEL: vuitofp_nxv8i64_nxv8f16:
1549; CHECK:       # %bb.0:
1550; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1551; CHECK-NEXT:    vfncvt.f.xu.w v16, v8
1552; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
1553; CHECK-NEXT:    vfncvt.f.f.w v8, v16
1554; CHECK-NEXT:    ret
1555  %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x half>
1556  ret <vscale x 8 x half> %evec
1557}
1558
1559define <vscale x 8 x float> @vsitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) {
1560; CHECK-LABEL: vsitofp_nxv8i64_nxv8f32:
1561; CHECK:       # %bb.0:
1562; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1563; CHECK-NEXT:    vfncvt.f.x.w v16, v8
1564; CHECK-NEXT:    vmv.v.v v8, v16
1565; CHECK-NEXT:    ret
1566  %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x float>
1567  ret <vscale x 8 x float> %evec
1568}
1569
1570define <vscale x 8 x float> @vuitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) {
1571; CHECK-LABEL: vuitofp_nxv8i64_nxv8f32:
1572; CHECK:       # %bb.0:
1573; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1574; CHECK-NEXT:    vfncvt.f.xu.w v16, v8
1575; CHECK-NEXT:    vmv.v.v v8, v16
1576; CHECK-NEXT:    ret
1577  %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x float>
1578  ret <vscale x 8 x float> %evec
1579}
1580
1581define <vscale x 8 x double> @vsitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) {
1582; CHECK-LABEL: vsitofp_nxv8i64_nxv8f64:
1583; CHECK:       # %bb.0:
1584; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1585; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1586; CHECK-NEXT:    ret
1587  %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x double>
1588  ret <vscale x 8 x double> %evec
1589}
1590
1591define <vscale x 8 x double> @vuitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) {
1592; CHECK-LABEL: vuitofp_nxv8i64_nxv8f64:
1593; CHECK:       # %bb.0:
1594; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1595; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1596; CHECK-NEXT:    ret
1597  %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x double>
1598  ret <vscale x 8 x double> %evec
1599}
1600