Revert "[InstCombine] Support gep nuw in icmp folds" (#118698)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vitofp-sdnode.ll
blob4265663c1feee97e5daf8a8e51a7d31751b5452d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v,+zvfbfmin \
3 ; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \
4 ; RUN:     --check-prefixes=CHECK,ZVFH
5 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v,+zvfbfmin \
6 ; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \
7 ; RUN:     --check-prefixes=CHECK,ZVFH
8 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfhmin,+v,+zvfbfmin \
9 ; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \
10 ; RUN:     --check-prefixes=CHECK,ZVFHMIN
11 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfhmin,+v,+zvfbfmin \
12 ; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \
13 ; RUN:     --check-prefixes=CHECK,ZVFHMIN
15 define <vscale x 1 x bfloat> @vsitofp_nxv1i1_nxv1bf16(<vscale x 1 x i1> %va) {
16 ; CHECK-LABEL: vsitofp_nxv1i1_nxv1bf16:
17 ; CHECK:       # %bb.0:
18 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
19 ; CHECK-NEXT:    vmv.v.i v8, 0
20 ; CHECK-NEXT:    vmerge.vim v8, v8, -1, v0
21 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
22 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
23 ; CHECK-NEXT:    ret
24   %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x bfloat>
25   ret <vscale x 1 x bfloat> %evec
28 define <vscale x 1 x bfloat> @vuitofp_nxv1i1_nxv1bf16(<vscale x 1 x i1> %va) {
29 ; CHECK-LABEL: vuitofp_nxv1i1_nxv1bf16:
30 ; CHECK:       # %bb.0:
31 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
32 ; CHECK-NEXT:    vmv.v.i v8, 0
33 ; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
34 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
35 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
36 ; CHECK-NEXT:    ret
37   %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x bfloat>
38   ret <vscale x 1 x bfloat> %evec
41 define <vscale x 2 x bfloat> @vsitofp_nxv2i1_nxv2bf16(<vscale x 2 x i1> %va) {
42 ; CHECK-LABEL: vsitofp_nxv2i1_nxv2bf16:
43 ; CHECK:       # %bb.0:
44 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
45 ; CHECK-NEXT:    vmv.v.i v8, 0
46 ; CHECK-NEXT:    vmerge.vim v8, v8, -1, v0
47 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
48 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
49 ; CHECK-NEXT:    ret
50   %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x bfloat>
51   ret <vscale x 2 x bfloat> %evec
54 define <vscale x 2 x bfloat> @vuitofp_nxv2i1_nxv2bf16(<vscale x 2 x i1> %va) {
55 ; CHECK-LABEL: vuitofp_nxv2i1_nxv2bf16:
56 ; CHECK:       # %bb.0:
57 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
58 ; CHECK-NEXT:    vmv.v.i v8, 0
59 ; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
60 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
61 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
62 ; CHECK-NEXT:    ret
63   %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x bfloat>
64   ret <vscale x 2 x bfloat> %evec
67 define <vscale x 4 x bfloat> @vsitofp_nxv4i1_nxv4bf16(<vscale x 4 x i1> %va) {
68 ; CHECK-LABEL: vsitofp_nxv4i1_nxv4bf16:
69 ; CHECK:       # %bb.0:
70 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
71 ; CHECK-NEXT:    vmv.v.i v8, 0
72 ; CHECK-NEXT:    vmerge.vim v8, v8, -1, v0
73 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
74 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
75 ; CHECK-NEXT:    ret
76   %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x bfloat>
77   ret <vscale x 4 x bfloat> %evec
80 define <vscale x 4 x bfloat> @vuitofp_nxv4i1_nxv4bf16(<vscale x 4 x i1> %va) {
81 ; CHECK-LABEL: vuitofp_nxv4i1_nxv4bf16:
82 ; CHECK:       # %bb.0:
83 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
84 ; CHECK-NEXT:    vmv.v.i v8, 0
85 ; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
86 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8
87 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
88 ; CHECK-NEXT:    ret
89   %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x bfloat>
90   ret <vscale x 4 x bfloat> %evec
93 define <vscale x 8 x bfloat> @vsitofp_nxv8i1_nxv8bf16(<vscale x 8 x i1> %va) {
94 ; CHECK-LABEL: vsitofp_nxv8i1_nxv8bf16:
95 ; CHECK:       # %bb.0:
96 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
97 ; CHECK-NEXT:    vmv.v.i v8, 0
98 ; CHECK-NEXT:    vmerge.vim v8, v8, -1, v0
99 ; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
100 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
101 ; CHECK-NEXT:    ret
102   %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x bfloat>
103   ret <vscale x 8 x bfloat> %evec
106 define <vscale x 8 x bfloat> @vuitofp_nxv8i1_nxv8bf16(<vscale x 8 x i1> %va) {
107 ; CHECK-LABEL: vuitofp_nxv8i1_nxv8bf16:
108 ; CHECK:       # %bb.0:
109 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
110 ; CHECK-NEXT:    vmv.v.i v8, 0
111 ; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
112 ; CHECK-NEXT:    vfwcvt.f.xu.v v12, v8
113 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
114 ; CHECK-NEXT:    ret
115   %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x bfloat>
116   ret <vscale x 8 x bfloat> %evec
119 define <vscale x 16 x bfloat> @vsitofp_nxv16i1_nxv16bf16(<vscale x 16 x i1> %va) {
120 ; CHECK-LABEL: vsitofp_nxv16i1_nxv16bf16:
121 ; CHECK:       # %bb.0:
122 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
123 ; CHECK-NEXT:    vmv.v.i v8, 0
124 ; CHECK-NEXT:    vmerge.vim v8, v8, -1, v0
125 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
126 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
127 ; CHECK-NEXT:    ret
128   %evec = sitofp <vscale x 16 x i1> %va to <vscale x 16 x bfloat>
129   ret <vscale x 16 x bfloat> %evec
132 define <vscale x 16 x bfloat> @vuitofp_nxv16i1_nxv16bf16(<vscale x 16 x i1> %va) {
133 ; CHECK-LABEL: vuitofp_nxv16i1_nxv16bf16:
134 ; CHECK:       # %bb.0:
135 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
136 ; CHECK-NEXT:    vmv.v.i v8, 0
137 ; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
138 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
139 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
140 ; CHECK-NEXT:    ret
141   %evec = uitofp <vscale x 16 x i1> %va to <vscale x 16 x bfloat>
142   ret <vscale x 16 x bfloat> %evec
145 define <vscale x 32 x bfloat> @vsitofp_nxv32i1_nxv32bf16(<vscale x 32 x i1> %va) {
146 ; CHECK-LABEL: vsitofp_nxv32i1_nxv32bf16:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
149 ; CHECK-NEXT:    vmv.v.i v12, 0
150 ; CHECK-NEXT:    csrr a0, vlenb
151 ; CHECK-NEXT:    vmerge.vim v8, v12, -1, v0
152 ; CHECK-NEXT:    srli a0, a0, 2
153 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
154 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
155 ; CHECK-NEXT:    vslidedown.vx v0, v0, a0
156 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
157 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
158 ; CHECK-NEXT:    vmerge.vim v12, v12, -1, v0
159 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v12
160 ; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16
161 ; CHECK-NEXT:    ret
162   %evec = sitofp <vscale x 32 x i1> %va to <vscale x 32 x bfloat>
163   ret <vscale x 32 x bfloat> %evec
166 define <vscale x 32 x bfloat> @vuitofp_nxv32i1_nxv32bf16(<vscale x 32 x i1> %va) {
167 ; CHECK-LABEL: vuitofp_nxv32i1_nxv32bf16:
168 ; CHECK:       # %bb.0:
169 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
170 ; CHECK-NEXT:    vmv.v.i v12, 0
171 ; CHECK-NEXT:    csrr a0, vlenb
172 ; CHECK-NEXT:    vmerge.vim v8, v12, 1, v0
173 ; CHECK-NEXT:    srli a0, a0, 2
174 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
175 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
176 ; CHECK-NEXT:    vslidedown.vx v0, v0, a0
177 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
178 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
179 ; CHECK-NEXT:    vmerge.vim v12, v12, 1, v0
180 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v12
181 ; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16
182 ; CHECK-NEXT:    ret
183   %evec = uitofp <vscale x 32 x i1> %va to <vscale x 32 x bfloat>
184   ret <vscale x 32 x bfloat> %evec
187 define <vscale x 1 x bfloat> @vsitofp_nxv1i8_nxv1bf16(<vscale x 1 x i8> %va) {
188 ; CHECK-LABEL: vsitofp_nxv1i8_nxv1bf16:
189 ; CHECK:       # %bb.0:
190 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
191 ; CHECK-NEXT:    vsext.vf2 v9, v8
192 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v9
193 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
194 ; CHECK-NEXT:    ret
195   %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x bfloat>
196   ret <vscale x 1 x bfloat> %evec
199 define <vscale x 1 x bfloat> @vsitofp_nxv1i7_nxv1bf16(<vscale x 1 x i7> %va) {
200 ; CHECK-LABEL: vsitofp_nxv1i7_nxv1bf16:
201 ; CHECK:       # %bb.0:
202 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
203 ; CHECK-NEXT:    vadd.vv v8, v8, v8
204 ; CHECK-NEXT:    vsra.vi v8, v8, 1
205 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
206 ; CHECK-NEXT:    vsext.vf2 v9, v8
207 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v9
208 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
209 ; CHECK-NEXT:    ret
210   %evec = sitofp <vscale x 1 x i7> %va to <vscale x 1 x bfloat>
211   ret <vscale x 1 x bfloat> %evec
214 define <vscale x 1 x bfloat> @vuitofp_nxv1i7_nxv1bf16(<vscale x 1 x i7> %va) {
215 ; CHECK-LABEL: vuitofp_nxv1i7_nxv1bf16:
216 ; CHECK:       # %bb.0:
217 ; CHECK-NEXT:    li a0, 127
218 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
219 ; CHECK-NEXT:    vand.vx v8, v8, a0
220 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
221 ; CHECK-NEXT:    vzext.vf2 v9, v8
222 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v9
223 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
224 ; CHECK-NEXT:    ret
225   %evec = uitofp <vscale x 1 x i7> %va to <vscale x 1 x bfloat>
226   ret <vscale x 1 x bfloat> %evec
229 define <vscale x 1 x bfloat> @vuitofp_nxv1i8_nxv1bf16(<vscale x 1 x i8> %va) {
230 ; CHECK-LABEL: vuitofp_nxv1i8_nxv1bf16:
231 ; CHECK:       # %bb.0:
232 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
233 ; CHECK-NEXT:    vzext.vf2 v9, v8
234 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v9
235 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
236 ; CHECK-NEXT:    ret
237   %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x bfloat>
238   ret <vscale x 1 x bfloat> %evec
241 define <vscale x 2 x bfloat> @vsitofp_nxv2i8_nxv2bf16(<vscale x 2 x i8> %va) {
242 ; CHECK-LABEL: vsitofp_nxv2i8_nxv2bf16:
243 ; CHECK:       # %bb.0:
244 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
245 ; CHECK-NEXT:    vsext.vf2 v9, v8
246 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v9
247 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
248 ; CHECK-NEXT:    ret
249   %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x bfloat>
250   ret <vscale x 2 x bfloat> %evec
253 define <vscale x 2 x bfloat> @vuitofp_nxv2i8_nxv2bf16(<vscale x 2 x i8> %va) {
254 ; CHECK-LABEL: vuitofp_nxv2i8_nxv2bf16:
255 ; CHECK:       # %bb.0:
256 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
257 ; CHECK-NEXT:    vzext.vf2 v9, v8
258 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v9
259 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
260 ; CHECK-NEXT:    ret
261   %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x bfloat>
262   ret <vscale x 2 x bfloat> %evec
265 define <vscale x 4 x bfloat> @vsitofp_nxv4i8_nxv4bf16(<vscale x 4 x i8> %va) {
266 ; CHECK-LABEL: vsitofp_nxv4i8_nxv4bf16:
267 ; CHECK:       # %bb.0:
268 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
269 ; CHECK-NEXT:    vsext.vf2 v9, v8
270 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v9
271 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
272 ; CHECK-NEXT:    ret
273   %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x bfloat>
274   ret <vscale x 4 x bfloat> %evec
277 define <vscale x 4 x bfloat> @vuitofp_nxv4i8_nxv4bf16(<vscale x 4 x i8> %va) {
278 ; CHECK-LABEL: vuitofp_nxv4i8_nxv4bf16:
279 ; CHECK:       # %bb.0:
280 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
281 ; CHECK-NEXT:    vzext.vf2 v9, v8
282 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v9
283 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
284 ; CHECK-NEXT:    ret
285   %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x bfloat>
286   ret <vscale x 4 x bfloat> %evec
289 define <vscale x 8 x bfloat> @vsitofp_nxv8i8_nxv8bf16(<vscale x 8 x i8> %va) {
290 ; CHECK-LABEL: vsitofp_nxv8i8_nxv8bf16:
291 ; CHECK:       # %bb.0:
292 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
293 ; CHECK-NEXT:    vsext.vf2 v10, v8
294 ; CHECK-NEXT:    vfwcvt.f.x.v v12, v10
295 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
296 ; CHECK-NEXT:    ret
297   %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x bfloat>
298   ret <vscale x 8 x bfloat> %evec
301 define <vscale x 8 x bfloat> @vuitofp_nxv8i8_nxv8bf16(<vscale x 8 x i8> %va) {
302 ; CHECK-LABEL: vuitofp_nxv8i8_nxv8bf16:
303 ; CHECK:       # %bb.0:
304 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
305 ; CHECK-NEXT:    vzext.vf2 v10, v8
306 ; CHECK-NEXT:    vfwcvt.f.xu.v v12, v10
307 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
308 ; CHECK-NEXT:    ret
309   %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x bfloat>
310   ret <vscale x 8 x bfloat> %evec
313 define <vscale x 16 x bfloat> @vsitofp_nxv16i8_nxv16bf16(<vscale x 16 x i8> %va) {
314 ; CHECK-LABEL: vsitofp_nxv16i8_nxv16bf16:
315 ; CHECK:       # %bb.0:
316 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
317 ; CHECK-NEXT:    vsext.vf2 v12, v8
318 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v12
319 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
320 ; CHECK-NEXT:    ret
321   %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x bfloat>
322   ret <vscale x 16 x bfloat> %evec
325 define <vscale x 16 x bfloat> @vuitofp_nxv16i8_nxv16bf16(<vscale x 16 x i8> %va) {
326 ; CHECK-LABEL: vuitofp_nxv16i8_nxv16bf16:
327 ; CHECK:       # %bb.0:
328 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
329 ; CHECK-NEXT:    vzext.vf2 v12, v8
330 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v12
331 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
332 ; CHECK-NEXT:    ret
333   %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x bfloat>
334   ret <vscale x 16 x bfloat> %evec
337 define <vscale x 32 x bfloat> @vsitofp_nxv32i8_nxv32bf16(<vscale x 32 x i8> %va) {
338 ; CHECK-LABEL: vsitofp_nxv32i8_nxv32bf16:
339 ; CHECK:       # %bb.0:
340 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
341 ; CHECK-NEXT:    vsext.vf2 v12, v8
342 ; CHECK-NEXT:    vsext.vf2 v16, v10
343 ; CHECK-NEXT:    vfwcvt.f.x.v v24, v12
344 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v24
345 ; CHECK-NEXT:    vfwcvt.f.x.v v24, v16
346 ; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v24
347 ; CHECK-NEXT:    ret
348   %evec = sitofp <vscale x 32 x i8> %va to <vscale x 32 x bfloat>
349   ret <vscale x 32 x bfloat> %evec
352 define <vscale x 32 x bfloat> @vuitofp_nxv32i8_nxv32bf16(<vscale x 32 x i8> %va) {
353 ; CHECK-LABEL: vuitofp_nxv32i8_nxv32bf16:
354 ; CHECK:       # %bb.0:
355 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
356 ; CHECK-NEXT:    vzext.vf2 v12, v8
357 ; CHECK-NEXT:    vzext.vf2 v16, v10
358 ; CHECK-NEXT:    vfwcvt.f.xu.v v24, v12
359 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v24
360 ; CHECK-NEXT:    vfwcvt.f.xu.v v24, v16
361 ; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v24
362 ; CHECK-NEXT:    ret
363   %evec = uitofp <vscale x 32 x i8> %va to <vscale x 32 x bfloat>
364   ret <vscale x 32 x bfloat> %evec
367 define <vscale x 1 x bfloat> @vsitofp_nxv1i16_nxv1bf16(<vscale x 1 x i16> %va) {
368 ; CHECK-LABEL: vsitofp_nxv1i16_nxv1bf16:
369 ; CHECK:       # %bb.0:
370 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
371 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
372 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
373 ; CHECK-NEXT:    ret
374   %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x bfloat>
375   ret <vscale x 1 x bfloat> %evec
378 define <vscale x 1 x bfloat> @vuitofp_nxv1i16_nxv1bf16(<vscale x 1 x i16> %va) {
379 ; CHECK-LABEL: vuitofp_nxv1i16_nxv1bf16:
380 ; CHECK:       # %bb.0:
381 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
382 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
383 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
384 ; CHECK-NEXT:    ret
385   %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x bfloat>
386   ret <vscale x 1 x bfloat> %evec
389 define <vscale x 2 x bfloat> @vsitofp_nxv2i16_nxv2bf16(<vscale x 2 x i16> %va) {
390 ; CHECK-LABEL: vsitofp_nxv2i16_nxv2bf16:
391 ; CHECK:       # %bb.0:
392 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
393 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
394 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
395 ; CHECK-NEXT:    ret
396   %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x bfloat>
397   ret <vscale x 2 x bfloat> %evec
400 define <vscale x 2 x bfloat> @vuitofp_nxv2i16_nxv2bf16(<vscale x 2 x i16> %va) {
401 ; CHECK-LABEL: vuitofp_nxv2i16_nxv2bf16:
402 ; CHECK:       # %bb.0:
403 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
404 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
405 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
406 ; CHECK-NEXT:    ret
407   %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x bfloat>
408   ret <vscale x 2 x bfloat> %evec
411 define <vscale x 4 x bfloat> @vsitofp_nxv4i16_nxv4bf16(<vscale x 4 x i16> %va) {
412 ; CHECK-LABEL: vsitofp_nxv4i16_nxv4bf16:
413 ; CHECK:       # %bb.0:
414 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
415 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
416 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
417 ; CHECK-NEXT:    ret
418   %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x bfloat>
419   ret <vscale x 4 x bfloat> %evec
422 define <vscale x 4 x bfloat> @vuitofp_nxv4i16_nxv4bf16(<vscale x 4 x i16> %va) {
423 ; CHECK-LABEL: vuitofp_nxv4i16_nxv4bf16:
424 ; CHECK:       # %bb.0:
425 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
426 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8
427 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
428 ; CHECK-NEXT:    ret
429   %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x bfloat>
430   ret <vscale x 4 x bfloat> %evec
433 define <vscale x 8 x bfloat> @vsitofp_nxv8i16_nxv8bf16(<vscale x 8 x i16> %va) {
434 ; CHECK-LABEL: vsitofp_nxv8i16_nxv8bf16:
435 ; CHECK:       # %bb.0:
436 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
437 ; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
438 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
439 ; CHECK-NEXT:    ret
440   %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x bfloat>
441   ret <vscale x 8 x bfloat> %evec
444 define <vscale x 8 x bfloat> @vuitofp_nxv8i16_nxv8bf16(<vscale x 8 x i16> %va) {
445 ; CHECK-LABEL: vuitofp_nxv8i16_nxv8bf16:
446 ; CHECK:       # %bb.0:
447 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
448 ; CHECK-NEXT:    vfwcvt.f.xu.v v12, v8
449 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
450 ; CHECK-NEXT:    ret
451   %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x bfloat>
452   ret <vscale x 8 x bfloat> %evec
455 define <vscale x 16 x bfloat> @vsitofp_nxv16i16_nxv16bf16(<vscale x 16 x i16> %va) {
456 ; CHECK-LABEL: vsitofp_nxv16i16_nxv16bf16:
457 ; CHECK:       # %bb.0:
458 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
459 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
460 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
461 ; CHECK-NEXT:    ret
462   %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x bfloat>
463   ret <vscale x 16 x bfloat> %evec
466 define <vscale x 16 x bfloat> @vuitofp_nxv16i16_nxv16bf16(<vscale x 16 x i16> %va) {
467 ; CHECK-LABEL: vuitofp_nxv16i16_nxv16bf16:
468 ; CHECK:       # %bb.0:
469 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
470 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
471 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
472 ; CHECK-NEXT:    ret
473   %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x bfloat>
474   ret <vscale x 16 x bfloat> %evec
477 define <vscale x 32 x bfloat> @vsitofp_nxv32i16_nxv32bf16(<vscale x 32 x i16> %va) {
478 ; CHECK-LABEL: vsitofp_nxv32i16_nxv32bf16:
479 ; CHECK:       # %bb.0:
480 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
481 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
482 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
483 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v12
484 ; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16
485 ; CHECK-NEXT:    ret
486   %evec = sitofp <vscale x 32 x i16> %va to <vscale x 32 x bfloat>
487   ret <vscale x 32 x bfloat> %evec
490 define <vscale x 32 x bfloat> @vuitofp_nxv32i16_nxv32bf16(<vscale x 32 x i16> %va) {
491 ; CHECK-LABEL: vuitofp_nxv32i16_nxv32bf16:
492 ; CHECK:       # %bb.0:
493 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
494 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
495 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
496 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v12
497 ; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16
498 ; CHECK-NEXT:    ret
499   %evec = uitofp <vscale x 32 x i16> %va to <vscale x 32 x bfloat>
500   ret <vscale x 32 x bfloat> %evec
503 define <vscale x 1 x bfloat> @vsitofp_nxv1i32_nxv1bf16(<vscale x 1 x i32> %va) {
504 ; CHECK-LABEL: vsitofp_nxv1i32_nxv1bf16:
505 ; CHECK:       # %bb.0:
506 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
507 ; CHECK-NEXT:    vfcvt.f.x.v v9, v8
508 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
509 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
510 ; CHECK-NEXT:    ret
511   %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x bfloat>
512   ret <vscale x 1 x bfloat> %evec
515 define <vscale x 1 x bfloat> @vuitofp_nxv1i32_nxv1bf16(<vscale x 1 x i32> %va) {
516 ; CHECK-LABEL: vuitofp_nxv1i32_nxv1bf16:
517 ; CHECK:       # %bb.0:
518 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
519 ; CHECK-NEXT:    vfcvt.f.xu.v v9, v8
520 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
521 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
522 ; CHECK-NEXT:    ret
523   %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x bfloat>
524   ret <vscale x 1 x bfloat> %evec
527 define <vscale x 2 x bfloat> @vsitofp_nxv2i32_nxv2bf16(<vscale x 2 x i32> %va) {
528 ; CHECK-LABEL: vsitofp_nxv2i32_nxv2bf16:
529 ; CHECK:       # %bb.0:
530 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
531 ; CHECK-NEXT:    vfcvt.f.x.v v9, v8
532 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
533 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
534 ; CHECK-NEXT:    ret
535   %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x bfloat>
536   ret <vscale x 2 x bfloat> %evec
539 define <vscale x 2 x bfloat> @vuitofp_nxv2i32_nxv2bf16(<vscale x 2 x i32> %va) {
540 ; CHECK-LABEL: vuitofp_nxv2i32_nxv2bf16:
541 ; CHECK:       # %bb.0:
542 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
543 ; CHECK-NEXT:    vfcvt.f.xu.v v9, v8
544 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
545 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
546 ; CHECK-NEXT:    ret
547   %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x bfloat>
548   ret <vscale x 2 x bfloat> %evec
551 define <vscale x 4 x bfloat> @vsitofp_nxv4i32_nxv4bf16(<vscale x 4 x i32> %va) {
552 ; CHECK-LABEL: vsitofp_nxv4i32_nxv4bf16:
553 ; CHECK:       # %bb.0:
554 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
555 ; CHECK-NEXT:    vfcvt.f.x.v v10, v8
556 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
557 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
558 ; CHECK-NEXT:    ret
559   %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x bfloat>
560   ret <vscale x 4 x bfloat> %evec
563 define <vscale x 4 x bfloat> @vuitofp_nxv4i32_nxv4bf16(<vscale x 4 x i32> %va) {
564 ; CHECK-LABEL: vuitofp_nxv4i32_nxv4bf16:
565 ; CHECK:       # %bb.0:
566 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
567 ; CHECK-NEXT:    vfcvt.f.xu.v v10, v8
568 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
569 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
570 ; CHECK-NEXT:    ret
571   %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x bfloat>
572   ret <vscale x 4 x bfloat> %evec
575 define <vscale x 8 x bfloat> @vsitofp_nxv8i32_nxv8bf16(<vscale x 8 x i32> %va) {
576 ; CHECK-LABEL: vsitofp_nxv8i32_nxv8bf16:
577 ; CHECK:       # %bb.0:
578 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
579 ; CHECK-NEXT:    vfcvt.f.x.v v12, v8
580 ; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
581 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
582 ; CHECK-NEXT:    ret
583   %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x bfloat>
584   ret <vscale x 8 x bfloat> %evec
587 define <vscale x 8 x bfloat> @vuitofp_nxv8i32_nxv8bf16(<vscale x 8 x i32> %va) {
588 ; CHECK-LABEL: vuitofp_nxv8i32_nxv8bf16:
589 ; CHECK:       # %bb.0:
590 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
591 ; CHECK-NEXT:    vfcvt.f.xu.v v12, v8
592 ; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
593 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
594 ; CHECK-NEXT:    ret
595   %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x bfloat>
596   ret <vscale x 8 x bfloat> %evec
599 define <vscale x 16 x bfloat> @vsitofp_nxv16i32_nxv16bf16(<vscale x 16 x i32> %va) {
600 ; CHECK-LABEL: vsitofp_nxv16i32_nxv16bf16:
601 ; CHECK:       # %bb.0:
602 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
603 ; CHECK-NEXT:    vfcvt.f.x.v v16, v8
604 ; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
605 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
606 ; CHECK-NEXT:    ret
607   %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x bfloat>
608   ret <vscale x 16 x bfloat> %evec
611 define <vscale x 16 x bfloat> @vuitofp_nxv16i32_nxv16bf16(<vscale x 16 x i32> %va) {
612 ; CHECK-LABEL: vuitofp_nxv16i32_nxv16bf16:
613 ; CHECK:       # %bb.0:
614 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
615 ; CHECK-NEXT:    vfcvt.f.xu.v v16, v8
616 ; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
617 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
618 ; CHECK-NEXT:    ret
619   %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x bfloat>
620   ret <vscale x 16 x bfloat> %evec
623 define <vscale x 1 x bfloat> @vsitofp_nxv1i64_nxv1bf16(<vscale x 1 x i64> %va) {
624 ; CHECK-LABEL: vsitofp_nxv1i64_nxv1bf16:
625 ; CHECK:       # %bb.0:
626 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
627 ; CHECK-NEXT:    vfncvt.f.x.w v9, v8
628 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
629 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
630 ; CHECK-NEXT:    ret
631   %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x bfloat>
632   ret <vscale x 1 x bfloat> %evec
635 define <vscale x 1 x bfloat> @vuitofp_nxv1i64_nxv1bf16(<vscale x 1 x i64> %va) {
636 ; CHECK-LABEL: vuitofp_nxv1i64_nxv1bf16:
637 ; CHECK:       # %bb.0:
638 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
639 ; CHECK-NEXT:    vfncvt.f.xu.w v9, v8
640 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
641 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
642 ; CHECK-NEXT:    ret
643   %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x bfloat>
644   ret <vscale x 1 x bfloat> %evec
647 define <vscale x 2 x bfloat> @vsitofp_nxv2i64_nxv2bf16(<vscale x 2 x i64> %va) {
648 ; CHECK-LABEL: vsitofp_nxv2i64_nxv2bf16:
649 ; CHECK:       # %bb.0:
650 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
651 ; CHECK-NEXT:    vfncvt.f.x.w v10, v8
652 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
653 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
654 ; CHECK-NEXT:    ret
655   %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x bfloat>
656   ret <vscale x 2 x bfloat> %evec
659 define <vscale x 2 x bfloat> @vuitofp_nxv2i64_nxv2bf16(<vscale x 2 x i64> %va) {
660 ; CHECK-LABEL: vuitofp_nxv2i64_nxv2bf16:
661 ; CHECK:       # %bb.0:
662 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
663 ; CHECK-NEXT:    vfncvt.f.xu.w v10, v8
664 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
665 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
666 ; CHECK-NEXT:    ret
667   %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x bfloat>
668   ret <vscale x 2 x bfloat> %evec
671 define <vscale x 4 x bfloat> @vsitofp_nxv4i64_nxv4bf16(<vscale x 4 x i64> %va) {
672 ; CHECK-LABEL: vsitofp_nxv4i64_nxv4bf16:
673 ; CHECK:       # %bb.0:
674 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
675 ; CHECK-NEXT:    vfncvt.f.x.w v12, v8
676 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
677 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
678 ; CHECK-NEXT:    ret
679   %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x bfloat>
680   ret <vscale x 4 x bfloat> %evec
683 define <vscale x 4 x bfloat> @vuitofp_nxv4i64_nxv4bf16(<vscale x 4 x i64> %va) {
684 ; CHECK-LABEL: vuitofp_nxv4i64_nxv4bf16:
685 ; CHECK:       # %bb.0:
686 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
687 ; CHECK-NEXT:    vfncvt.f.xu.w v12, v8
688 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
689 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
690 ; CHECK-NEXT:    ret
691   %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x bfloat>
692   ret <vscale x 4 x bfloat> %evec
695 define <vscale x 8 x bfloat> @vsitofp_nxv8i64_nxv8bf16(<vscale x 8 x i64> %va) {
696 ; CHECK-LABEL: vsitofp_nxv8i64_nxv8bf16:
697 ; CHECK:       # %bb.0:
698 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
699 ; CHECK-NEXT:    vfncvt.f.x.w v16, v8
700 ; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
701 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
702 ; CHECK-NEXT:    ret
703   %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x bfloat>
704   ret <vscale x 8 x bfloat> %evec
707 define <vscale x 8 x bfloat> @vuitofp_nxv8i64_nxv8bf16(<vscale x 8 x i64> %va) {
708 ; CHECK-LABEL: vuitofp_nxv8i64_nxv8bf16:
709 ; CHECK:       # %bb.0:
710 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
711 ; CHECK-NEXT:    vfncvt.f.xu.w v16, v8
712 ; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
713 ; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
714 ; CHECK-NEXT:    ret
715   %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x bfloat>
716   ret <vscale x 8 x bfloat> %evec
719 define <vscale x 1 x half> @vsitofp_nxv1i1_nxv1f16(<vscale x 1 x i1> %va) {
720 ; ZVFH-LABEL: vsitofp_nxv1i1_nxv1f16:
721 ; ZVFH:       # %bb.0:
722 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
723 ; ZVFH-NEXT:    vmv.v.i v8, 0
724 ; ZVFH-NEXT:    vmerge.vim v9, v8, -1, v0
725 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9
726 ; ZVFH-NEXT:    ret
728 ; ZVFHMIN-LABEL: vsitofp_nxv1i1_nxv1f16:
729 ; ZVFHMIN:       # %bb.0:
730 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
731 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
732 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0
733 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8
734 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
735 ; ZVFHMIN-NEXT:    ret
736   %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x half>
737   ret <vscale x 1 x half> %evec
740 define <vscale x 1 x half> @vuitofp_nxv1i1_nxv1f16(<vscale x 1 x i1> %va) {
741 ; ZVFH-LABEL: vuitofp_nxv1i1_nxv1f16:
742 ; ZVFH:       # %bb.0:
743 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
744 ; ZVFH-NEXT:    vmv.v.i v8, 0
745 ; ZVFH-NEXT:    vmerge.vim v9, v8, 1, v0
746 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9
747 ; ZVFH-NEXT:    ret
749 ; ZVFHMIN-LABEL: vuitofp_nxv1i1_nxv1f16:
750 ; ZVFHMIN:       # %bb.0:
751 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
752 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
753 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0
754 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8
755 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
756 ; ZVFHMIN-NEXT:    ret
757   %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x half>
758   ret <vscale x 1 x half> %evec
761 define <vscale x 1 x float> @vsitofp_nxv1i1_nxv1f32(<vscale x 1 x i1> %va) {
762 ; CHECK-LABEL: vsitofp_nxv1i1_nxv1f32:
763 ; CHECK:       # %bb.0:
764 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
765 ; CHECK-NEXT:    vmv.v.i v8, 0
766 ; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0
767 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
768 ; CHECK-NEXT:    ret
769   %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x float>
770   ret <vscale x 1 x float> %evec
773 define <vscale x 1 x float> @vuitofp_nxv1i1_nxv1f32(<vscale x 1 x i1> %va) {
774 ; CHECK-LABEL: vuitofp_nxv1i1_nxv1f32:
775 ; CHECK:       # %bb.0:
776 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
777 ; CHECK-NEXT:    vmv.v.i v8, 0
778 ; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0
779 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
780 ; CHECK-NEXT:    ret
781   %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x float>
782   ret <vscale x 1 x float> %evec
785 define <vscale x 1 x double> @vsitofp_nxv1i1_nxv1f64(<vscale x 1 x i1> %va) {
786 ; CHECK-LABEL: vsitofp_nxv1i1_nxv1f64:
787 ; CHECK:       # %bb.0:
788 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
789 ; CHECK-NEXT:    vmv.v.i v8, 0
790 ; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0
791 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
792 ; CHECK-NEXT:    ret
793   %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x double>
794   ret <vscale x 1 x double> %evec
797 define <vscale x 1 x double> @vuitofp_nxv1i1_nxv1f64(<vscale x 1 x i1> %va) {
798 ; CHECK-LABEL: vuitofp_nxv1i1_nxv1f64:
799 ; CHECK:       # %bb.0:
800 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
801 ; CHECK-NEXT:    vmv.v.i v8, 0
802 ; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0
803 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
804 ; CHECK-NEXT:    ret
805   %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x double>
806   ret <vscale x 1 x double> %evec
809 define <vscale x 2 x half> @vsitofp_nxv2i1_nxv2f16(<vscale x 2 x i1> %va) {
810 ; ZVFH-LABEL: vsitofp_nxv2i1_nxv2f16:
811 ; ZVFH:       # %bb.0:
812 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
813 ; ZVFH-NEXT:    vmv.v.i v8, 0
814 ; ZVFH-NEXT:    vmerge.vim v9, v8, -1, v0
815 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9
816 ; ZVFH-NEXT:    ret
818 ; ZVFHMIN-LABEL: vsitofp_nxv2i1_nxv2f16:
819 ; ZVFHMIN:       # %bb.0:
820 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
821 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
822 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0
823 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8
824 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
825 ; ZVFHMIN-NEXT:    ret
826   %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x half>
827   ret <vscale x 2 x half> %evec
830 define <vscale x 2 x half> @vuitofp_nxv2i1_nxv2f16(<vscale x 2 x i1> %va) {
831 ; ZVFH-LABEL: vuitofp_nxv2i1_nxv2f16:
832 ; ZVFH:       # %bb.0:
833 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
834 ; ZVFH-NEXT:    vmv.v.i v8, 0
835 ; ZVFH-NEXT:    vmerge.vim v9, v8, 1, v0
836 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9
837 ; ZVFH-NEXT:    ret
839 ; ZVFHMIN-LABEL: vuitofp_nxv2i1_nxv2f16:
840 ; ZVFHMIN:       # %bb.0:
841 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
842 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
843 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0
844 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8
845 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
846 ; ZVFHMIN-NEXT:    ret
847   %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x half>
848   ret <vscale x 2 x half> %evec
851 define <vscale x 2 x float> @vsitofp_nxv2i1_nxv2f32(<vscale x 2 x i1> %va) {
852 ; CHECK-LABEL: vsitofp_nxv2i1_nxv2f32:
853 ; CHECK:       # %bb.0:
854 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
855 ; CHECK-NEXT:    vmv.v.i v8, 0
856 ; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0
857 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
858 ; CHECK-NEXT:    ret
859   %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x float>
860   ret <vscale x 2 x float> %evec
863 define <vscale x 2 x float> @vuitofp_nxv2i1_nxv2f32(<vscale x 2 x i1> %va) {
864 ; CHECK-LABEL: vuitofp_nxv2i1_nxv2f32:
865 ; CHECK:       # %bb.0:
866 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
867 ; CHECK-NEXT:    vmv.v.i v8, 0
868 ; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0
869 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
870 ; CHECK-NEXT:    ret
871   %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x float>
872   ret <vscale x 2 x float> %evec
875 define <vscale x 2 x double> @vsitofp_nxv2i1_nxv2f64(<vscale x 2 x i1> %va) {
876 ; CHECK-LABEL: vsitofp_nxv2i1_nxv2f64:
877 ; CHECK:       # %bb.0:
878 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
879 ; CHECK-NEXT:    vmv.v.i v8, 0
880 ; CHECK-NEXT:    vmerge.vim v10, v8, -1, v0
881 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
882 ; CHECK-NEXT:    ret
883   %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x double>
884   ret <vscale x 2 x double> %evec
887 define <vscale x 2 x double> @vuitofp_nxv2i1_nxv2f64(<vscale x 2 x i1> %va) {
888 ; CHECK-LABEL: vuitofp_nxv2i1_nxv2f64:
889 ; CHECK:       # %bb.0:
890 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
891 ; CHECK-NEXT:    vmv.v.i v8, 0
892 ; CHECK-NEXT:    vmerge.vim v10, v8, 1, v0
893 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
894 ; CHECK-NEXT:    ret
895   %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x double>
896   ret <vscale x 2 x double> %evec
899 define <vscale x 4 x half> @vsitofp_nxv4i1_nxv4f16(<vscale x 4 x i1> %va) {
900 ; ZVFH-LABEL: vsitofp_nxv4i1_nxv4f16:
901 ; ZVFH:       # %bb.0:
902 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
903 ; ZVFH-NEXT:    vmv.v.i v8, 0
904 ; ZVFH-NEXT:    vmerge.vim v9, v8, -1, v0
905 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9
906 ; ZVFH-NEXT:    ret
908 ; ZVFHMIN-LABEL: vsitofp_nxv4i1_nxv4f16:
909 ; ZVFHMIN:       # %bb.0:
910 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
911 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
912 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0
913 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v8
914 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
915 ; ZVFHMIN-NEXT:    ret
916   %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x half>
917   ret <vscale x 4 x half> %evec
920 define <vscale x 4 x half> @vuitofp_nxv4i1_nxv4f16(<vscale x 4 x i1> %va) {
921 ; ZVFH-LABEL: vuitofp_nxv4i1_nxv4f16:
922 ; ZVFH:       # %bb.0:
923 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
924 ; ZVFH-NEXT:    vmv.v.i v8, 0
925 ; ZVFH-NEXT:    vmerge.vim v9, v8, 1, v0
926 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9
927 ; ZVFH-NEXT:    ret
929 ; ZVFHMIN-LABEL: vuitofp_nxv4i1_nxv4f16:
930 ; ZVFHMIN:       # %bb.0:
931 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
932 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
933 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0
934 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v8
935 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
936 ; ZVFHMIN-NEXT:    ret
937   %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x half>
938   ret <vscale x 4 x half> %evec
941 define <vscale x 4 x float> @vsitofp_nxv4i1_nxv4f32(<vscale x 4 x i1> %va) {
942 ; CHECK-LABEL: vsitofp_nxv4i1_nxv4f32:
943 ; CHECK:       # %bb.0:
944 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
945 ; CHECK-NEXT:    vmv.v.i v8, 0
946 ; CHECK-NEXT:    vmerge.vim v10, v8, -1, v0
947 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
948 ; CHECK-NEXT:    ret
949   %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x float>
950   ret <vscale x 4 x float> %evec
953 define <vscale x 4 x float> @vuitofp_nxv4i1_nxv4f32(<vscale x 4 x i1> %va) {
954 ; CHECK-LABEL: vuitofp_nxv4i1_nxv4f32:
955 ; CHECK:       # %bb.0:
956 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
957 ; CHECK-NEXT:    vmv.v.i v8, 0
958 ; CHECK-NEXT:    vmerge.vim v10, v8, 1, v0
959 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
960 ; CHECK-NEXT:    ret
961   %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x float>
962   ret <vscale x 4 x float> %evec
965 define <vscale x 4 x double> @vsitofp_nxv4i1_nxv4f64(<vscale x 4 x i1> %va) {
966 ; CHECK-LABEL: vsitofp_nxv4i1_nxv4f64:
967 ; CHECK:       # %bb.0:
968 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
969 ; CHECK-NEXT:    vmv.v.i v8, 0
970 ; CHECK-NEXT:    vmerge.vim v12, v8, -1, v0
971 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v12
972 ; CHECK-NEXT:    ret
973   %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x double>
974   ret <vscale x 4 x double> %evec
977 define <vscale x 4 x double> @vuitofp_nxv4i1_nxv4f64(<vscale x 4 x i1> %va) {
978 ; CHECK-LABEL: vuitofp_nxv4i1_nxv4f64:
979 ; CHECK:       # %bb.0:
980 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
981 ; CHECK-NEXT:    vmv.v.i v8, 0
982 ; CHECK-NEXT:    vmerge.vim v12, v8, 1, v0
983 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12
984 ; CHECK-NEXT:    ret
985   %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x double>
986   ret <vscale x 4 x double> %evec
989 define <vscale x 8 x half> @vsitofp_nxv8i1_nxv8f16(<vscale x 8 x i1> %va) {
990 ; ZVFH-LABEL: vsitofp_nxv8i1_nxv8f16:
991 ; ZVFH:       # %bb.0:
992 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
993 ; ZVFH-NEXT:    vmv.v.i v8, 0
994 ; ZVFH-NEXT:    vmerge.vim v10, v8, -1, v0
995 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v10
996 ; ZVFH-NEXT:    ret
998 ; ZVFHMIN-LABEL: vsitofp_nxv8i1_nxv8f16:
999 ; ZVFHMIN:       # %bb.0:
1000 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1001 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
1002 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0
1003 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v12, v8
1004 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1005 ; ZVFHMIN-NEXT:    ret
1006   %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x half>
1007   ret <vscale x 8 x half> %evec
1010 define <vscale x 8 x half> @vuitofp_nxv8i1_nxv8f16(<vscale x 8 x i1> %va) {
1011 ; ZVFH-LABEL: vuitofp_nxv8i1_nxv8f16:
1012 ; ZVFH:       # %bb.0:
1013 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
1014 ; ZVFH-NEXT:    vmv.v.i v8, 0
1015 ; ZVFH-NEXT:    vmerge.vim v10, v8, 1, v0
1016 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v10
1017 ; ZVFH-NEXT:    ret
1019 ; ZVFHMIN-LABEL: vuitofp_nxv8i1_nxv8f16:
1020 ; ZVFHMIN:       # %bb.0:
1021 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1022 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
1023 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0
1024 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v12, v8
1025 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1026 ; ZVFHMIN-NEXT:    ret
1027   %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x half>
1028   ret <vscale x 8 x half> %evec
1031 define <vscale x 8 x float> @vsitofp_nxv8i1_nxv8f32(<vscale x 8 x i1> %va) {
1032 ; CHECK-LABEL: vsitofp_nxv8i1_nxv8f32:
1033 ; CHECK:       # %bb.0:
1034 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1035 ; CHECK-NEXT:    vmv.v.i v8, 0
1036 ; CHECK-NEXT:    vmerge.vim v12, v8, -1, v0
1037 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v12
1038 ; CHECK-NEXT:    ret
1039   %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x float>
1040   ret <vscale x 8 x float> %evec
1043 define <vscale x 8 x float> @vuitofp_nxv8i1_nxv8f32(<vscale x 8 x i1> %va) {
1044 ; CHECK-LABEL: vuitofp_nxv8i1_nxv8f32:
1045 ; CHECK:       # %bb.0:
1046 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1047 ; CHECK-NEXT:    vmv.v.i v8, 0
1048 ; CHECK-NEXT:    vmerge.vim v12, v8, 1, v0
1049 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12
1050 ; CHECK-NEXT:    ret
1051   %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x float>
1052   ret <vscale x 8 x float> %evec
1055 define <vscale x 8 x double> @vsitofp_nxv8i1_nxv8f64(<vscale x 8 x i1> %va) {
1056 ; CHECK-LABEL: vsitofp_nxv8i1_nxv8f64:
1057 ; CHECK:       # %bb.0:
1058 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1059 ; CHECK-NEXT:    vmv.v.i v8, 0
1060 ; CHECK-NEXT:    vmerge.vim v16, v8, -1, v0
1061 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v16
1062 ; CHECK-NEXT:    ret
1063   %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x double>
1064   ret <vscale x 8 x double> %evec
1067 define <vscale x 8 x double> @vuitofp_nxv8i1_nxv8f64(<vscale x 8 x i1> %va) {
1068 ; CHECK-LABEL: vuitofp_nxv8i1_nxv8f64:
1069 ; CHECK:       # %bb.0:
1070 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1071 ; CHECK-NEXT:    vmv.v.i v8, 0
1072 ; CHECK-NEXT:    vmerge.vim v16, v8, 1, v0
1073 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v16
1074 ; CHECK-NEXT:    ret
1075   %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x double>
1076   ret <vscale x 8 x double> %evec
1079 define <vscale x 16 x half> @vsitofp_nxv16i1_nxv16f16(<vscale x 16 x i1> %va) {
1080 ; ZVFH-LABEL: vsitofp_nxv16i1_nxv16f16:
1081 ; ZVFH:       # %bb.0:
1082 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
1083 ; ZVFH-NEXT:    vmv.v.i v8, 0
1084 ; ZVFH-NEXT:    vmerge.vim v12, v8, -1, v0
1085 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v12
1086 ; ZVFH-NEXT:    ret
1088 ; ZVFHMIN-LABEL: vsitofp_nxv16i1_nxv16f16:
1089 ; ZVFHMIN:       # %bb.0:
1090 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1091 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
1092 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0
1093 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v8
1094 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1095 ; ZVFHMIN-NEXT:    ret
1096   %evec = sitofp <vscale x 16 x i1> %va to <vscale x 16 x half>
1097   ret <vscale x 16 x half> %evec
1100 define <vscale x 16 x half> @vuitofp_nxv16i1_nxv16f16(<vscale x 16 x i1> %va) {
1101 ; ZVFH-LABEL: vuitofp_nxv16i1_nxv16f16:
1102 ; ZVFH:       # %bb.0:
1103 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
1104 ; ZVFH-NEXT:    vmv.v.i v8, 0
1105 ; ZVFH-NEXT:    vmerge.vim v12, v8, 1, v0
1106 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v12
1107 ; ZVFH-NEXT:    ret
1109 ; ZVFHMIN-LABEL: vuitofp_nxv16i1_nxv16f16:
1110 ; ZVFHMIN:       # %bb.0:
1111 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1112 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
1113 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0
1114 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v8
1115 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1116 ; ZVFHMIN-NEXT:    ret
1117   %evec = uitofp <vscale x 16 x i1> %va to <vscale x 16 x half>
1118   ret <vscale x 16 x half> %evec
1121 define <vscale x 16 x float> @vsitofp_nxv16i1_nxv16f32(<vscale x 16 x i1> %va) {
1122 ; CHECK-LABEL: vsitofp_nxv16i1_nxv16f32:
1123 ; CHECK:       # %bb.0:
1124 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1125 ; CHECK-NEXT:    vmv.v.i v8, 0
1126 ; CHECK-NEXT:    vmerge.vim v16, v8, -1, v0
1127 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v16
1128 ; CHECK-NEXT:    ret
1129   %evec = sitofp <vscale x 16 x i1> %va to <vscale x 16 x float>
1130   ret <vscale x 16 x float> %evec
1133 define <vscale x 16 x float> @vuitofp_nxv16i1_nxv16f32(<vscale x 16 x i1> %va) {
1134 ; CHECK-LABEL: vuitofp_nxv16i1_nxv16f32:
1135 ; CHECK:       # %bb.0:
1136 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1137 ; CHECK-NEXT:    vmv.v.i v8, 0
1138 ; CHECK-NEXT:    vmerge.vim v16, v8, 1, v0
1139 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v16
1140 ; CHECK-NEXT:    ret
1141   %evec = uitofp <vscale x 16 x i1> %va to <vscale x 16 x float>
1142   ret <vscale x 16 x float> %evec
1145 define <vscale x 32 x half> @vsitofp_nxv32i1_nxv32f16(<vscale x 32 x i1> %va) {
1146 ; ZVFH-LABEL: vsitofp_nxv32i1_nxv32f16:
1147 ; ZVFH:       # %bb.0:
1148 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
1149 ; ZVFH-NEXT:    vmv.v.i v8, 0
1150 ; ZVFH-NEXT:    vmerge.vim v16, v8, -1, v0
1151 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v16
1152 ; ZVFH-NEXT:    ret
1154 ; ZVFHMIN-LABEL: vsitofp_nxv32i1_nxv32f16:
1155 ; ZVFHMIN:       # %bb.0:
1156 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1157 ; ZVFHMIN-NEXT:    vmv.v.i v12, 0
1158 ; ZVFHMIN-NEXT:    csrr a0, vlenb
1159 ; ZVFHMIN-NEXT:    vmerge.vim v8, v12, -1, v0
1160 ; ZVFHMIN-NEXT:    srli a0, a0, 2
1161 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v8
1162 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
1163 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a0
1164 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1165 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1166 ; ZVFHMIN-NEXT:    vmerge.vim v12, v12, -1, v0
1167 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v12
1168 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
1169 ; ZVFHMIN-NEXT:    ret
1170   %evec = sitofp <vscale x 32 x i1> %va to <vscale x 32 x half>
1171   ret <vscale x 32 x half> %evec
1174 define <vscale x 32 x half> @vuitofp_nxv32i1_nxv32f16(<vscale x 32 x i1> %va) {
1175 ; ZVFH-LABEL: vuitofp_nxv32i1_nxv32f16:
1176 ; ZVFH:       # %bb.0:
1177 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
1178 ; ZVFH-NEXT:    vmv.v.i v8, 0
1179 ; ZVFH-NEXT:    vmerge.vim v16, v8, 1, v0
1180 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v16
1181 ; ZVFH-NEXT:    ret
1183 ; ZVFHMIN-LABEL: vuitofp_nxv32i1_nxv32f16:
1184 ; ZVFHMIN:       # %bb.0:
1185 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1186 ; ZVFHMIN-NEXT:    vmv.v.i v12, 0
1187 ; ZVFHMIN-NEXT:    csrr a0, vlenb
1188 ; ZVFHMIN-NEXT:    vmerge.vim v8, v12, 1, v0
1189 ; ZVFHMIN-NEXT:    srli a0, a0, 2
1190 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v8
1191 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
1192 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a0
1193 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1194 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1195 ; ZVFHMIN-NEXT:    vmerge.vim v12, v12, 1, v0
1196 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v12
1197 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
1198 ; ZVFHMIN-NEXT:    ret
1199   %evec = uitofp <vscale x 32 x i1> %va to <vscale x 32 x half>
1200   ret <vscale x 32 x half> %evec
1203 define <vscale x 1 x half> @vsitofp_nxv1i8_nxv1f16(<vscale x 1 x i8> %va) {
1204 ; ZVFH-LABEL: vsitofp_nxv1i8_nxv1f16:
1205 ; ZVFH:       # %bb.0:
1206 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
1207 ; ZVFH-NEXT:    vfwcvt.f.x.v v9, v8
1208 ; ZVFH-NEXT:    vmv1r.v v8, v9
1209 ; ZVFH-NEXT:    ret
1211 ; ZVFHMIN-LABEL: vsitofp_nxv1i8_nxv1f16:
1212 ; ZVFHMIN:       # %bb.0:
1213 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1214 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8
1215 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9
1216 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1217 ; ZVFHMIN-NEXT:    ret
1218   %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x half>
1219   ret <vscale x 1 x half> %evec
1222 define <vscale x 1 x half> @vsitofp_nxv1i7_nxv1f16(<vscale x 1 x i7> %va) {
1223 ; ZVFH-LABEL: vsitofp_nxv1i7_nxv1f16:
1224 ; ZVFH:       # %bb.0:
1225 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
1226 ; ZVFH-NEXT:    vadd.vv v8, v8, v8
1227 ; ZVFH-NEXT:    vsra.vi v9, v8, 1
1228 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9
1229 ; ZVFH-NEXT:    ret
1231 ; ZVFHMIN-LABEL: vsitofp_nxv1i7_nxv1f16:
1232 ; ZVFHMIN:       # %bb.0:
1233 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
1234 ; ZVFHMIN-NEXT:    vadd.vv v8, v8, v8
1235 ; ZVFHMIN-NEXT:    vsra.vi v8, v8, 1
1236 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1237 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8
1238 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9
1239 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1240 ; ZVFHMIN-NEXT:    ret
1241   %evec = sitofp <vscale x 1 x i7> %va to <vscale x 1 x half>
1242   ret <vscale x 1 x half> %evec
1245 define <vscale x 1 x half> @vuitofp_nxv1i7_nxv1f16(<vscale x 1 x i7> %va) {
1246 ; ZVFH-LABEL: vuitofp_nxv1i7_nxv1f16:
1247 ; ZVFH:       # %bb.0:
1248 ; ZVFH-NEXT:    li a0, 127
1249 ; ZVFH-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
1250 ; ZVFH-NEXT:    vand.vx v9, v8, a0
1251 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9
1252 ; ZVFH-NEXT:    ret
1254 ; ZVFHMIN-LABEL: vuitofp_nxv1i7_nxv1f16:
1255 ; ZVFHMIN:       # %bb.0:
1256 ; ZVFHMIN-NEXT:    li a0, 127
1257 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
1258 ; ZVFHMIN-NEXT:    vand.vx v8, v8, a0
1259 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1260 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8
1261 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9
1262 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1263 ; ZVFHMIN-NEXT:    ret
1264   %evec = uitofp <vscale x 1 x i7> %va to <vscale x 1 x half>
1265   ret <vscale x 1 x half> %evec
1268 define <vscale x 1 x half> @vuitofp_nxv1i8_nxv1f16(<vscale x 1 x i8> %va) {
1269 ; ZVFH-LABEL: vuitofp_nxv1i8_nxv1f16:
1270 ; ZVFH:       # %bb.0:
1271 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
1272 ; ZVFH-NEXT:    vfwcvt.f.xu.v v9, v8
1273 ; ZVFH-NEXT:    vmv1r.v v8, v9
1274 ; ZVFH-NEXT:    ret
1276 ; ZVFHMIN-LABEL: vuitofp_nxv1i8_nxv1f16:
1277 ; ZVFHMIN:       # %bb.0:
1278 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1279 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8
1280 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9
1281 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1282 ; ZVFHMIN-NEXT:    ret
1283   %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x half>
1284   ret <vscale x 1 x half> %evec
1287 define <vscale x 1 x float> @vsitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) {
1288 ; CHECK-LABEL: vsitofp_nxv1i8_nxv1f32:
1289 ; CHECK:       # %bb.0:
1290 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1291 ; CHECK-NEXT:    vsext.vf2 v9, v8
1292 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
1293 ; CHECK-NEXT:    ret
1294   %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x float>
1295   ret <vscale x 1 x float> %evec
1298 define <vscale x 1 x float> @vuitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) {
1299 ; CHECK-LABEL: vuitofp_nxv1i8_nxv1f32:
1300 ; CHECK:       # %bb.0:
1301 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1302 ; CHECK-NEXT:    vzext.vf2 v9, v8
1303 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
1304 ; CHECK-NEXT:    ret
1305   %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x float>
1306   ret <vscale x 1 x float> %evec
1309 define <vscale x 1 x double> @vsitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) {
1310 ; CHECK-LABEL: vsitofp_nxv1i8_nxv1f64:
1311 ; CHECK:       # %bb.0:
1312 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1313 ; CHECK-NEXT:    vsext.vf4 v9, v8
1314 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
1315 ; CHECK-NEXT:    ret
1316   %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x double>
1317   ret <vscale x 1 x double> %evec
1320 define <vscale x 1 x double> @vuitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) {
1321 ; CHECK-LABEL: vuitofp_nxv1i8_nxv1f64:
1322 ; CHECK:       # %bb.0:
1323 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1324 ; CHECK-NEXT:    vzext.vf4 v9, v8
1325 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
1326 ; CHECK-NEXT:    ret
1327   %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x double>
1328   ret <vscale x 1 x double> %evec
1331 define <vscale x 2 x half> @vsitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) {
1332 ; ZVFH-LABEL: vsitofp_nxv2i8_nxv2f16:
1333 ; ZVFH:       # %bb.0:
1334 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
1335 ; ZVFH-NEXT:    vfwcvt.f.x.v v9, v8
1336 ; ZVFH-NEXT:    vmv1r.v v8, v9
1337 ; ZVFH-NEXT:    ret
1339 ; ZVFHMIN-LABEL: vsitofp_nxv2i8_nxv2f16:
1340 ; ZVFHMIN:       # %bb.0:
1341 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1342 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8
1343 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9
1344 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1345 ; ZVFHMIN-NEXT:    ret
1346   %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x half>
1347   ret <vscale x 2 x half> %evec
1350 define <vscale x 2 x half> @vuitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) {
1351 ; ZVFH-LABEL: vuitofp_nxv2i8_nxv2f16:
1352 ; ZVFH:       # %bb.0:
1353 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
1354 ; ZVFH-NEXT:    vfwcvt.f.xu.v v9, v8
1355 ; ZVFH-NEXT:    vmv1r.v v8, v9
1356 ; ZVFH-NEXT:    ret
1358 ; ZVFHMIN-LABEL: vuitofp_nxv2i8_nxv2f16:
1359 ; ZVFHMIN:       # %bb.0:
1360 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1361 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8
1362 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9
1363 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1364 ; ZVFHMIN-NEXT:    ret
1365   %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x half>
1366   ret <vscale x 2 x half> %evec
1369 define <vscale x 2 x float> @vsitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) {
1370 ; CHECK-LABEL: vsitofp_nxv2i8_nxv2f32:
1371 ; CHECK:       # %bb.0:
1372 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1373 ; CHECK-NEXT:    vsext.vf2 v9, v8
1374 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
1375 ; CHECK-NEXT:    ret
1376   %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x float>
1377   ret <vscale x 2 x float> %evec
1380 define <vscale x 2 x float> @vuitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) {
1381 ; CHECK-LABEL: vuitofp_nxv2i8_nxv2f32:
1382 ; CHECK:       # %bb.0:
1383 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1384 ; CHECK-NEXT:    vzext.vf2 v9, v8
1385 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
1386 ; CHECK-NEXT:    ret
1387   %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x float>
1388   ret <vscale x 2 x float> %evec
1391 define <vscale x 2 x double> @vsitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) {
1392 ; CHECK-LABEL: vsitofp_nxv2i8_nxv2f64:
1393 ; CHECK:       # %bb.0:
1394 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1395 ; CHECK-NEXT:    vsext.vf4 v10, v8
1396 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
1397 ; CHECK-NEXT:    ret
1398   %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x double>
1399   ret <vscale x 2 x double> %evec
1402 define <vscale x 2 x double> @vuitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) {
1403 ; CHECK-LABEL: vuitofp_nxv2i8_nxv2f64:
1404 ; CHECK:       # %bb.0:
1405 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1406 ; CHECK-NEXT:    vzext.vf4 v10, v8
1407 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
1408 ; CHECK-NEXT:    ret
1409   %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x double>
1410   ret <vscale x 2 x double> %evec
1413 define <vscale x 4 x half> @vsitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) {
1414 ; ZVFH-LABEL: vsitofp_nxv4i8_nxv4f16:
1415 ; ZVFH:       # %bb.0:
1416 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
1417 ; ZVFH-NEXT:    vfwcvt.f.x.v v9, v8
1418 ; ZVFH-NEXT:    vmv1r.v v8, v9
1419 ; ZVFH-NEXT:    ret
1421 ; ZVFHMIN-LABEL: vsitofp_nxv4i8_nxv4f16:
1422 ; ZVFHMIN:       # %bb.0:
1423 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1424 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8
1425 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9
1426 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1427 ; ZVFHMIN-NEXT:    ret
1428   %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x half>
1429   ret <vscale x 4 x half> %evec
1432 define <vscale x 4 x half> @vuitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) {
1433 ; ZVFH-LABEL: vuitofp_nxv4i8_nxv4f16:
1434 ; ZVFH:       # %bb.0:
1435 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
1436 ; ZVFH-NEXT:    vfwcvt.f.xu.v v9, v8
1437 ; ZVFH-NEXT:    vmv1r.v v8, v9
1438 ; ZVFH-NEXT:    ret
1440 ; ZVFHMIN-LABEL: vuitofp_nxv4i8_nxv4f16:
1441 ; ZVFHMIN:       # %bb.0:
1442 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1443 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8
1444 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9
1445 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1446 ; ZVFHMIN-NEXT:    ret
1447   %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x half>
1448   ret <vscale x 4 x half> %evec
1451 define <vscale x 4 x float> @vsitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) {
1452 ; CHECK-LABEL: vsitofp_nxv4i8_nxv4f32:
1453 ; CHECK:       # %bb.0:
1454 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1455 ; CHECK-NEXT:    vsext.vf2 v10, v8
1456 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
1457 ; CHECK-NEXT:    ret
1458   %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x float>
1459   ret <vscale x 4 x float> %evec
1462 define <vscale x 4 x float> @vuitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) {
1463 ; CHECK-LABEL: vuitofp_nxv4i8_nxv4f32:
1464 ; CHECK:       # %bb.0:
1465 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1466 ; CHECK-NEXT:    vzext.vf2 v10, v8
1467 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
1468 ; CHECK-NEXT:    ret
1469   %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x float>
1470   ret <vscale x 4 x float> %evec
1473 define <vscale x 4 x double> @vsitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) {
1474 ; CHECK-LABEL: vsitofp_nxv4i8_nxv4f64:
1475 ; CHECK:       # %bb.0:
1476 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1477 ; CHECK-NEXT:    vsext.vf4 v12, v8
1478 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v12
1479 ; CHECK-NEXT:    ret
1480   %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x double>
1481   ret <vscale x 4 x double> %evec
1484 define <vscale x 4 x double> @vuitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) {
1485 ; CHECK-LABEL: vuitofp_nxv4i8_nxv4f64:
1486 ; CHECK:       # %bb.0:
1487 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1488 ; CHECK-NEXT:    vzext.vf4 v12, v8
1489 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12
1490 ; CHECK-NEXT:    ret
1491   %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x double>
1492   ret <vscale x 4 x double> %evec
1495 define <vscale x 8 x half> @vsitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) {
1496 ; ZVFH-LABEL: vsitofp_nxv8i8_nxv8f16:
1497 ; ZVFH:       # %bb.0:
1498 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
1499 ; ZVFH-NEXT:    vfwcvt.f.x.v v10, v8
1500 ; ZVFH-NEXT:    vmv2r.v v8, v10
1501 ; ZVFH-NEXT:    ret
1503 ; ZVFHMIN-LABEL: vsitofp_nxv8i8_nxv8f16:
1504 ; ZVFHMIN:       # %bb.0:
1505 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1506 ; ZVFHMIN-NEXT:    vsext.vf2 v10, v8
1507 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v12, v10
1508 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1509 ; ZVFHMIN-NEXT:    ret
1510   %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x half>
1511   ret <vscale x 8 x half> %evec
1514 define <vscale x 8 x half> @vuitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) {
1515 ; ZVFH-LABEL: vuitofp_nxv8i8_nxv8f16:
1516 ; ZVFH:       # %bb.0:
1517 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
1518 ; ZVFH-NEXT:    vfwcvt.f.xu.v v10, v8
1519 ; ZVFH-NEXT:    vmv2r.v v8, v10
1520 ; ZVFH-NEXT:    ret
1522 ; ZVFHMIN-LABEL: vuitofp_nxv8i8_nxv8f16:
1523 ; ZVFHMIN:       # %bb.0:
1524 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1525 ; ZVFHMIN-NEXT:    vzext.vf2 v10, v8
1526 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v12, v10
1527 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1528 ; ZVFHMIN-NEXT:    ret
1529   %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x half>
1530   ret <vscale x 8 x half> %evec
1533 define <vscale x 8 x float> @vsitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) {
1534 ; CHECK-LABEL: vsitofp_nxv8i8_nxv8f32:
1535 ; CHECK:       # %bb.0:
1536 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1537 ; CHECK-NEXT:    vsext.vf2 v12, v8
1538 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v12
1539 ; CHECK-NEXT:    ret
1540   %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x float>
1541   ret <vscale x 8 x float> %evec
1544 define <vscale x 8 x float> @vuitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) {
1545 ; CHECK-LABEL: vuitofp_nxv8i8_nxv8f32:
1546 ; CHECK:       # %bb.0:
1547 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1548 ; CHECK-NEXT:    vzext.vf2 v12, v8
1549 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12
1550 ; CHECK-NEXT:    ret
1551   %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x float>
1552   ret <vscale x 8 x float> %evec
1555 define <vscale x 8 x double> @vsitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) {
1556 ; CHECK-LABEL: vsitofp_nxv8i8_nxv8f64:
1557 ; CHECK:       # %bb.0:
1558 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1559 ; CHECK-NEXT:    vsext.vf4 v16, v8
1560 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v16
1561 ; CHECK-NEXT:    ret
1562   %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x double>
1563   ret <vscale x 8 x double> %evec
1566 define <vscale x 8 x double> @vuitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) {
1567 ; CHECK-LABEL: vuitofp_nxv8i8_nxv8f64:
1568 ; CHECK:       # %bb.0:
1569 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1570 ; CHECK-NEXT:    vzext.vf4 v16, v8
1571 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v16
1572 ; CHECK-NEXT:    ret
1573   %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x double>
1574   ret <vscale x 8 x double> %evec
1577 define <vscale x 16 x half> @vsitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) {
1578 ; ZVFH-LABEL: vsitofp_nxv16i8_nxv16f16:
1579 ; ZVFH:       # %bb.0:
1580 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
1581 ; ZVFH-NEXT:    vfwcvt.f.x.v v12, v8
1582 ; ZVFH-NEXT:    vmv4r.v v8, v12
1583 ; ZVFH-NEXT:    ret
1585 ; ZVFHMIN-LABEL: vsitofp_nxv16i8_nxv16f16:
1586 ; ZVFHMIN:       # %bb.0:
1587 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1588 ; ZVFHMIN-NEXT:    vsext.vf2 v12, v8
1589 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v12
1590 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1591 ; ZVFHMIN-NEXT:    ret
1592   %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x half>
1593   ret <vscale x 16 x half> %evec
1596 define <vscale x 16 x half> @vuitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) {
1597 ; ZVFH-LABEL: vuitofp_nxv16i8_nxv16f16:
1598 ; ZVFH:       # %bb.0:
1599 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
1600 ; ZVFH-NEXT:    vfwcvt.f.xu.v v12, v8
1601 ; ZVFH-NEXT:    vmv4r.v v8, v12
1602 ; ZVFH-NEXT:    ret
1604 ; ZVFHMIN-LABEL: vuitofp_nxv16i8_nxv16f16:
1605 ; ZVFHMIN:       # %bb.0:
1606 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1607 ; ZVFHMIN-NEXT:    vzext.vf2 v12, v8
1608 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v12
1609 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1610 ; ZVFHMIN-NEXT:    ret
1611   %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x half>
1612   ret <vscale x 16 x half> %evec
1615 define <vscale x 16 x float> @vsitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) {
1616 ; CHECK-LABEL: vsitofp_nxv16i8_nxv16f32:
1617 ; CHECK:       # %bb.0:
1618 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1619 ; CHECK-NEXT:    vsext.vf2 v16, v8
1620 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v16
1621 ; CHECK-NEXT:    ret
1622   %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x float>
1623   ret <vscale x 16 x float> %evec
1626 define <vscale x 16 x float> @vuitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) {
1627 ; CHECK-LABEL: vuitofp_nxv16i8_nxv16f32:
1628 ; CHECK:       # %bb.0:
1629 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1630 ; CHECK-NEXT:    vzext.vf2 v16, v8
1631 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v16
1632 ; CHECK-NEXT:    ret
1633   %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x float>
1634   ret <vscale x 16 x float> %evec
1637 define <vscale x 32 x half> @vsitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) {
1638 ; ZVFH-LABEL: vsitofp_nxv32i8_nxv32f16:
1639 ; ZVFH:       # %bb.0:
1640 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
1641 ; ZVFH-NEXT:    vfwcvt.f.x.v v16, v8
1642 ; ZVFH-NEXT:    vmv8r.v v8, v16
1643 ; ZVFH-NEXT:    ret
1645 ; ZVFHMIN-LABEL: vsitofp_nxv32i8_nxv32f16:
1646 ; ZVFHMIN:       # %bb.0:
1647 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1648 ; ZVFHMIN-NEXT:    vsext.vf2 v12, v8
1649 ; ZVFHMIN-NEXT:    vsext.vf2 v16, v10
1650 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v24, v12
1651 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24
1652 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v24, v16
1653 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24
1654 ; ZVFHMIN-NEXT:    ret
1655   %evec = sitofp <vscale x 32 x i8> %va to <vscale x 32 x half>
1656   ret <vscale x 32 x half> %evec
1659 define <vscale x 32 x half> @vuitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) {
1660 ; ZVFH-LABEL: vuitofp_nxv32i8_nxv32f16:
1661 ; ZVFH:       # %bb.0:
1662 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
1663 ; ZVFH-NEXT:    vfwcvt.f.xu.v v16, v8
1664 ; ZVFH-NEXT:    vmv8r.v v8, v16
1665 ; ZVFH-NEXT:    ret
1667 ; ZVFHMIN-LABEL: vuitofp_nxv32i8_nxv32f16:
1668 ; ZVFHMIN:       # %bb.0:
1669 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1670 ; ZVFHMIN-NEXT:    vzext.vf2 v12, v8
1671 ; ZVFHMIN-NEXT:    vzext.vf2 v16, v10
1672 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v24, v12
1673 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24
1674 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v24, v16
1675 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24
1676 ; ZVFHMIN-NEXT:    ret
1677   %evec = uitofp <vscale x 32 x i8> %va to <vscale x 32 x half>
1678   ret <vscale x 32 x half> %evec
1681 define <vscale x 1 x half> @vsitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) {
1682 ; ZVFH-LABEL: vsitofp_nxv1i16_nxv1f16:
1683 ; ZVFH:       # %bb.0:
1684 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1685 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
1686 ; ZVFH-NEXT:    ret
1688 ; ZVFHMIN-LABEL: vsitofp_nxv1i16_nxv1f16:
1689 ; ZVFHMIN:       # %bb.0:
1690 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1691 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8
1692 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1693 ; ZVFHMIN-NEXT:    ret
1694   %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x half>
1695   ret <vscale x 1 x half> %evec
1698 define <vscale x 1 x half> @vuitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) {
1699 ; ZVFH-LABEL: vuitofp_nxv1i16_nxv1f16:
1700 ; ZVFH:       # %bb.0:
1701 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1702 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
1703 ; ZVFH-NEXT:    ret
1705 ; ZVFHMIN-LABEL: vuitofp_nxv1i16_nxv1f16:
1706 ; ZVFHMIN:       # %bb.0:
1707 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1708 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8
1709 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1710 ; ZVFHMIN-NEXT:    ret
1711   %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x half>
1712   ret <vscale x 1 x half> %evec
1715 define <vscale x 1 x float> @vsitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) {
1716 ; CHECK-LABEL: vsitofp_nxv1i16_nxv1f32:
1717 ; CHECK:       # %bb.0:
1718 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1719 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
1720 ; CHECK-NEXT:    vmv1r.v v8, v9
1721 ; CHECK-NEXT:    ret
1722   %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x float>
1723   ret <vscale x 1 x float> %evec
1726 define <vscale x 1 x float> @vuitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) {
1727 ; CHECK-LABEL: vuitofp_nxv1i16_nxv1f32:
1728 ; CHECK:       # %bb.0:
1729 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1730 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
1731 ; CHECK-NEXT:    vmv1r.v v8, v9
1732 ; CHECK-NEXT:    ret
1733   %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x float>
1734   ret <vscale x 1 x float> %evec
1737 define <vscale x 1 x double> @vsitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) {
1738 ; CHECK-LABEL: vsitofp_nxv1i16_nxv1f64:
1739 ; CHECK:       # %bb.0:
1740 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1741 ; CHECK-NEXT:    vsext.vf2 v9, v8
1742 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
1743 ; CHECK-NEXT:    ret
1744   %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x double>
1745   ret <vscale x 1 x double> %evec
1748 define <vscale x 1 x double> @vuitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) {
1749 ; CHECK-LABEL: vuitofp_nxv1i16_nxv1f64:
1750 ; CHECK:       # %bb.0:
1751 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1752 ; CHECK-NEXT:    vzext.vf2 v9, v8
1753 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
1754 ; CHECK-NEXT:    ret
1755   %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x double>
1756   ret <vscale x 1 x double> %evec
1759 define <vscale x 2 x half> @vsitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) {
1760 ; ZVFH-LABEL: vsitofp_nxv2i16_nxv2f16:
1761 ; ZVFH:       # %bb.0:
1762 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1763 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
1764 ; ZVFH-NEXT:    ret
1766 ; ZVFHMIN-LABEL: vsitofp_nxv2i16_nxv2f16:
1767 ; ZVFHMIN:       # %bb.0:
1768 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1769 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8
1770 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1771 ; ZVFHMIN-NEXT:    ret
1772   %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x half>
1773   ret <vscale x 2 x half> %evec
1776 define <vscale x 2 x half> @vuitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) {
1777 ; ZVFH-LABEL: vuitofp_nxv2i16_nxv2f16:
1778 ; ZVFH:       # %bb.0:
1779 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1780 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
1781 ; ZVFH-NEXT:    ret
1783 ; ZVFHMIN-LABEL: vuitofp_nxv2i16_nxv2f16:
1784 ; ZVFHMIN:       # %bb.0:
1785 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1786 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8
1787 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1788 ; ZVFHMIN-NEXT:    ret
1789   %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x half>
1790   ret <vscale x 2 x half> %evec
1793 define <vscale x 2 x float> @vsitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) {
1794 ; CHECK-LABEL: vsitofp_nxv2i16_nxv2f32:
1795 ; CHECK:       # %bb.0:
1796 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1797 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
1798 ; CHECK-NEXT:    vmv1r.v v8, v9
1799 ; CHECK-NEXT:    ret
1800   %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x float>
1801   ret <vscale x 2 x float> %evec
1804 define <vscale x 2 x float> @vuitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) {
1805 ; CHECK-LABEL: vuitofp_nxv2i16_nxv2f32:
1806 ; CHECK:       # %bb.0:
1807 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1808 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
1809 ; CHECK-NEXT:    vmv1r.v v8, v9
1810 ; CHECK-NEXT:    ret
1811   %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x float>
1812   ret <vscale x 2 x float> %evec
1815 define <vscale x 2 x double> @vsitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) {
1816 ; CHECK-LABEL: vsitofp_nxv2i16_nxv2f64:
1817 ; CHECK:       # %bb.0:
1818 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1819 ; CHECK-NEXT:    vsext.vf2 v10, v8
1820 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
1821 ; CHECK-NEXT:    ret
1822   %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x double>
1823   ret <vscale x 2 x double> %evec
1826 define <vscale x 2 x double> @vuitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) {
1827 ; CHECK-LABEL: vuitofp_nxv2i16_nxv2f64:
1828 ; CHECK:       # %bb.0:
1829 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1830 ; CHECK-NEXT:    vzext.vf2 v10, v8
1831 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
1832 ; CHECK-NEXT:    ret
1833   %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x double>
1834   ret <vscale x 2 x double> %evec
1837 define <vscale x 4 x half> @vsitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) {
1838 ; ZVFH-LABEL: vsitofp_nxv4i16_nxv4f16:
1839 ; ZVFH:       # %bb.0:
1840 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1841 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
1842 ; ZVFH-NEXT:    ret
1844 ; ZVFHMIN-LABEL: vsitofp_nxv4i16_nxv4f16:
1845 ; ZVFHMIN:       # %bb.0:
1846 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1847 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v8
1848 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1849 ; ZVFHMIN-NEXT:    ret
1850   %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x half>
1851   ret <vscale x 4 x half> %evec
1854 define <vscale x 4 x half> @vuitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) {
1855 ; ZVFH-LABEL: vuitofp_nxv4i16_nxv4f16:
1856 ; ZVFH:       # %bb.0:
1857 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1858 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
1859 ; ZVFH-NEXT:    ret
1861 ; ZVFHMIN-LABEL: vuitofp_nxv4i16_nxv4f16:
1862 ; ZVFHMIN:       # %bb.0:
1863 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1864 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v8
1865 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1866 ; ZVFHMIN-NEXT:    ret
1867   %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x half>
1868   ret <vscale x 4 x half> %evec
1871 define <vscale x 4 x float> @vsitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) {
1872 ; CHECK-LABEL: vsitofp_nxv4i16_nxv4f32:
1873 ; CHECK:       # %bb.0:
1874 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1875 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
1876 ; CHECK-NEXT:    vmv2r.v v8, v10
1877 ; CHECK-NEXT:    ret
1878   %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x float>
1879   ret <vscale x 4 x float> %evec
1882 define <vscale x 4 x float> @vuitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) {
1883 ; CHECK-LABEL: vuitofp_nxv4i16_nxv4f32:
1884 ; CHECK:       # %bb.0:
1885 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1886 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8
1887 ; CHECK-NEXT:    vmv2r.v v8, v10
1888 ; CHECK-NEXT:    ret
1889   %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x float>
1890   ret <vscale x 4 x float> %evec
1893 define <vscale x 4 x double> @vsitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) {
1894 ; CHECK-LABEL: vsitofp_nxv4i16_nxv4f64:
1895 ; CHECK:       # %bb.0:
1896 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1897 ; CHECK-NEXT:    vsext.vf2 v12, v8
1898 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v12
1899 ; CHECK-NEXT:    ret
1900   %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x double>
1901   ret <vscale x 4 x double> %evec
1904 define <vscale x 4 x double> @vuitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) {
1905 ; CHECK-LABEL: vuitofp_nxv4i16_nxv4f64:
1906 ; CHECK:       # %bb.0:
1907 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1908 ; CHECK-NEXT:    vzext.vf2 v12, v8
1909 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12
1910 ; CHECK-NEXT:    ret
1911   %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x double>
1912   ret <vscale x 4 x double> %evec
1915 define <vscale x 8 x half> @vsitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) {
1916 ; ZVFH-LABEL: vsitofp_nxv8i16_nxv8f16:
1917 ; ZVFH:       # %bb.0:
1918 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1919 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
1920 ; ZVFH-NEXT:    ret
1922 ; ZVFHMIN-LABEL: vsitofp_nxv8i16_nxv8f16:
1923 ; ZVFHMIN:       # %bb.0:
1924 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1925 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v12, v8
1926 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1927 ; ZVFHMIN-NEXT:    ret
1928   %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x half>
1929   ret <vscale x 8 x half> %evec
1932 define <vscale x 8 x half> @vuitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) {
1933 ; ZVFH-LABEL: vuitofp_nxv8i16_nxv8f16:
1934 ; ZVFH:       # %bb.0:
1935 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1936 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
1937 ; ZVFH-NEXT:    ret
1939 ; ZVFHMIN-LABEL: vuitofp_nxv8i16_nxv8f16:
1940 ; ZVFHMIN:       # %bb.0:
1941 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1942 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v12, v8
1943 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1944 ; ZVFHMIN-NEXT:    ret
1945   %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x half>
1946   ret <vscale x 8 x half> %evec
1949 define <vscale x 8 x float> @vsitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) {
1950 ; CHECK-LABEL: vsitofp_nxv8i16_nxv8f32:
1951 ; CHECK:       # %bb.0:
1952 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1953 ; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
1954 ; CHECK-NEXT:    vmv4r.v v8, v12
1955 ; CHECK-NEXT:    ret
1956   %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x float>
1957   ret <vscale x 8 x float> %evec
1960 define <vscale x 8 x float> @vuitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) {
1961 ; CHECK-LABEL: vuitofp_nxv8i16_nxv8f32:
1962 ; CHECK:       # %bb.0:
1963 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1964 ; CHECK-NEXT:    vfwcvt.f.xu.v v12, v8
1965 ; CHECK-NEXT:    vmv4r.v v8, v12
1966 ; CHECK-NEXT:    ret
1967   %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x float>
1968   ret <vscale x 8 x float> %evec
1971 define <vscale x 8 x double> @vsitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) {
1972 ; CHECK-LABEL: vsitofp_nxv8i16_nxv8f64:
1973 ; CHECK:       # %bb.0:
1974 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1975 ; CHECK-NEXT:    vsext.vf2 v16, v8
1976 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v16
1977 ; CHECK-NEXT:    ret
1978   %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x double>
1979   ret <vscale x 8 x double> %evec
1982 define <vscale x 8 x double> @vuitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) {
1983 ; CHECK-LABEL: vuitofp_nxv8i16_nxv8f64:
1984 ; CHECK:       # %bb.0:
1985 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1986 ; CHECK-NEXT:    vzext.vf2 v16, v8
1987 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v16
1988 ; CHECK-NEXT:    ret
1989   %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x double>
1990   ret <vscale x 8 x double> %evec
1993 define <vscale x 16 x half> @vsitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) {
1994 ; ZVFH-LABEL: vsitofp_nxv16i16_nxv16f16:
1995 ; ZVFH:       # %bb.0:
1996 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1997 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
1998 ; ZVFH-NEXT:    ret
2000 ; ZVFHMIN-LABEL: vsitofp_nxv16i16_nxv16f16:
2001 ; ZVFHMIN:       # %bb.0:
2002 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2003 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v8
2004 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
2005 ; ZVFHMIN-NEXT:    ret
2006   %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x half>
2007   ret <vscale x 16 x half> %evec
2010 define <vscale x 16 x half> @vuitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) {
2011 ; ZVFH-LABEL: vuitofp_nxv16i16_nxv16f16:
2012 ; ZVFH:       # %bb.0:
2013 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2014 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
2015 ; ZVFH-NEXT:    ret
2017 ; ZVFHMIN-LABEL: vuitofp_nxv16i16_nxv16f16:
2018 ; ZVFHMIN:       # %bb.0:
2019 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2020 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v8
2021 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
2022 ; ZVFHMIN-NEXT:    ret
2023   %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x half>
2024   ret <vscale x 16 x half> %evec
2027 define <vscale x 16 x float> @vsitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) {
2028 ; CHECK-LABEL: vsitofp_nxv16i16_nxv16f32:
2029 ; CHECK:       # %bb.0:
2030 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2031 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
2032 ; CHECK-NEXT:    vmv8r.v v8, v16
2033 ; CHECK-NEXT:    ret
2034   %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x float>
2035   ret <vscale x 16 x float> %evec
2038 define <vscale x 16 x float> @vuitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) {
2039 ; CHECK-LABEL: vuitofp_nxv16i16_nxv16f32:
2040 ; CHECK:       # %bb.0:
2041 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2042 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
2043 ; CHECK-NEXT:    vmv8r.v v8, v16
2044 ; CHECK-NEXT:    ret
2045   %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x float>
2046   ret <vscale x 16 x float> %evec
2049 define <vscale x 32 x half> @vsitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) {
2050 ; ZVFH-LABEL: vsitofp_nxv32i16_nxv32f16:
2051 ; ZVFH:       # %bb.0:
2052 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
2053 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
2054 ; ZVFH-NEXT:    ret
2056 ; ZVFHMIN-LABEL: vsitofp_nxv32i16_nxv32f16:
2057 ; ZVFHMIN:       # %bb.0:
2058 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2059 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v8
2060 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
2061 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v12
2062 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
2063 ; ZVFHMIN-NEXT:    ret
2064   %evec = sitofp <vscale x 32 x i16> %va to <vscale x 32 x half>
2065   ret <vscale x 32 x half> %evec
2068 define <vscale x 32 x half> @vuitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) {
2069 ; ZVFH-LABEL: vuitofp_nxv32i16_nxv32f16:
2070 ; ZVFH:       # %bb.0:
2071 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
2072 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
2073 ; ZVFH-NEXT:    ret
2075 ; ZVFHMIN-LABEL: vuitofp_nxv32i16_nxv32f16:
2076 ; ZVFHMIN:       # %bb.0:
2077 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2078 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v8
2079 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
2080 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v12
2081 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
2082 ; ZVFHMIN-NEXT:    ret
2083   %evec = uitofp <vscale x 32 x i16> %va to <vscale x 32 x half>
2084   ret <vscale x 32 x half> %evec
2087 define <vscale x 1 x half> @vsitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) {
2088 ; ZVFH-LABEL: vsitofp_nxv1i32_nxv1f16:
2089 ; ZVFH:       # %bb.0:
2090 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
2091 ; ZVFH-NEXT:    vfncvt.f.x.w v9, v8
2092 ; ZVFH-NEXT:    vmv1r.v v8, v9
2093 ; ZVFH-NEXT:    ret
2095 ; ZVFHMIN-LABEL: vsitofp_nxv1i32_nxv1f16:
2096 ; ZVFHMIN:       # %bb.0:
2097 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
2098 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v9, v8
2099 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
2100 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
2101 ; ZVFHMIN-NEXT:    ret
2102   %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x half>
2103   ret <vscale x 1 x half> %evec
2106 define <vscale x 1 x half> @vuitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) {
2107 ; ZVFH-LABEL: vuitofp_nxv1i32_nxv1f16:
2108 ; ZVFH:       # %bb.0:
2109 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
2110 ; ZVFH-NEXT:    vfncvt.f.xu.w v9, v8
2111 ; ZVFH-NEXT:    vmv1r.v v8, v9
2112 ; ZVFH-NEXT:    ret
2114 ; ZVFHMIN-LABEL: vuitofp_nxv1i32_nxv1f16:
2115 ; ZVFHMIN:       # %bb.0:
2116 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
2117 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v9, v8
2118 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
2119 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
2120 ; ZVFHMIN-NEXT:    ret
2121   %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x half>
2122   ret <vscale x 1 x half> %evec
2125 define <vscale x 1 x float> @vsitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) {
2126 ; CHECK-LABEL: vsitofp_nxv1i32_nxv1f32:
2127 ; CHECK:       # %bb.0:
2128 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
2129 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
2130 ; CHECK-NEXT:    ret
2131   %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x float>
2132   ret <vscale x 1 x float> %evec
2135 define <vscale x 1 x float> @vuitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) {
2136 ; CHECK-LABEL: vuitofp_nxv1i32_nxv1f32:
2137 ; CHECK:       # %bb.0:
2138 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
2139 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
2140 ; CHECK-NEXT:    ret
2141   %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x float>
2142   ret <vscale x 1 x float> %evec
2145 define <vscale x 1 x double> @vsitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) {
2146 ; CHECK-LABEL: vsitofp_nxv1i32_nxv1f64:
2147 ; CHECK:       # %bb.0:
2148 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
2149 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
2150 ; CHECK-NEXT:    vmv1r.v v8, v9
2151 ; CHECK-NEXT:    ret
2152   %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x double>
2153   ret <vscale x 1 x double> %evec
2156 define <vscale x 1 x double> @vuitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) {
2157 ; CHECK-LABEL: vuitofp_nxv1i32_nxv1f64:
2158 ; CHECK:       # %bb.0:
2159 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
2160 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
2161 ; CHECK-NEXT:    vmv1r.v v8, v9
2162 ; CHECK-NEXT:    ret
2163   %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x double>
2164   ret <vscale x 1 x double> %evec
2167 define <vscale x 2 x half> @vsitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) {
2168 ; ZVFH-LABEL: vsitofp_nxv2i32_nxv2f16:
2169 ; ZVFH:       # %bb.0:
2170 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
2171 ; ZVFH-NEXT:    vfncvt.f.x.w v9, v8
2172 ; ZVFH-NEXT:    vmv1r.v v8, v9
2173 ; ZVFH-NEXT:    ret
2175 ; ZVFHMIN-LABEL: vsitofp_nxv2i32_nxv2f16:
2176 ; ZVFHMIN:       # %bb.0:
2177 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
2178 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v9, v8
2179 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
2180 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
2181 ; ZVFHMIN-NEXT:    ret
2182   %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x half>
2183   ret <vscale x 2 x half> %evec
2186 define <vscale x 2 x half> @vuitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) {
2187 ; ZVFH-LABEL: vuitofp_nxv2i32_nxv2f16:
2188 ; ZVFH:       # %bb.0:
2189 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
2190 ; ZVFH-NEXT:    vfncvt.f.xu.w v9, v8
2191 ; ZVFH-NEXT:    vmv1r.v v8, v9
2192 ; ZVFH-NEXT:    ret
2194 ; ZVFHMIN-LABEL: vuitofp_nxv2i32_nxv2f16:
2195 ; ZVFHMIN:       # %bb.0:
2196 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
2197 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v9, v8
2198 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
2199 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
2200 ; ZVFHMIN-NEXT:    ret
2201   %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x half>
2202   ret <vscale x 2 x half> %evec
2205 define <vscale x 2 x float> @vsitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) {
2206 ; CHECK-LABEL: vsitofp_nxv2i32_nxv2f32:
2207 ; CHECK:       # %bb.0:
2208 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
2209 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
2210 ; CHECK-NEXT:    ret
2211   %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x float>
2212   ret <vscale x 2 x float> %evec
2215 define <vscale x 2 x float> @vuitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) {
2216 ; CHECK-LABEL: vuitofp_nxv2i32_nxv2f32:
2217 ; CHECK:       # %bb.0:
2218 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
2219 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
2220 ; CHECK-NEXT:    ret
2221   %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x float>
2222   ret <vscale x 2 x float> %evec
2225 define <vscale x 2 x double> @vsitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) {
2226 ; CHECK-LABEL: vsitofp_nxv2i32_nxv2f64:
2227 ; CHECK:       # %bb.0:
2228 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
2229 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
2230 ; CHECK-NEXT:    vmv2r.v v8, v10
2231 ; CHECK-NEXT:    ret
2232   %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x double>
2233   ret <vscale x 2 x double> %evec
2236 define <vscale x 2 x double> @vuitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) {
2237 ; CHECK-LABEL: vuitofp_nxv2i32_nxv2f64:
2238 ; CHECK:       # %bb.0:
2239 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
2240 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8
2241 ; CHECK-NEXT:    vmv2r.v v8, v10
2242 ; CHECK-NEXT:    ret
2243   %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x double>
2244   ret <vscale x 2 x double> %evec
2247 define <vscale x 4 x half> @vsitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) {
2248 ; ZVFH-LABEL: vsitofp_nxv4i32_nxv4f16:
2249 ; ZVFH:       # %bb.0:
2250 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
2251 ; ZVFH-NEXT:    vfncvt.f.x.w v10, v8
2252 ; ZVFH-NEXT:    vmv.v.v v8, v10
2253 ; ZVFH-NEXT:    ret
2255 ; ZVFHMIN-LABEL: vsitofp_nxv4i32_nxv4f16:
2256 ; ZVFHMIN:       # %bb.0:
2257 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
2258 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v10, v8
2259 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
2260 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
2261 ; ZVFHMIN-NEXT:    ret
2262   %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x half>
2263   ret <vscale x 4 x half> %evec
2266 define <vscale x 4 x half> @vuitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) {
2267 ; ZVFH-LABEL: vuitofp_nxv4i32_nxv4f16:
2268 ; ZVFH:       # %bb.0:
2269 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
2270 ; ZVFH-NEXT:    vfncvt.f.xu.w v10, v8
2271 ; ZVFH-NEXT:    vmv.v.v v8, v10
2272 ; ZVFH-NEXT:    ret
2274 ; ZVFHMIN-LABEL: vuitofp_nxv4i32_nxv4f16:
2275 ; ZVFHMIN:       # %bb.0:
2276 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
2277 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v10, v8
2278 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
2279 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
2280 ; ZVFHMIN-NEXT:    ret
2281   %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x half>
2282   ret <vscale x 4 x half> %evec
2285 define <vscale x 4 x float> @vsitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) {
2286 ; CHECK-LABEL: vsitofp_nxv4i32_nxv4f32:
2287 ; CHECK:       # %bb.0:
2288 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
2289 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
2290 ; CHECK-NEXT:    ret
2291   %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x float>
2292   ret <vscale x 4 x float> %evec
2295 define <vscale x 4 x float> @vuitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) {
2296 ; CHECK-LABEL: vuitofp_nxv4i32_nxv4f32:
2297 ; CHECK:       # %bb.0:
2298 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
2299 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
2300 ; CHECK-NEXT:    ret
2301   %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x float>
2302   ret <vscale x 4 x float> %evec
2305 define <vscale x 4 x double> @vsitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) {
2306 ; CHECK-LABEL: vsitofp_nxv4i32_nxv4f64:
2307 ; CHECK:       # %bb.0:
2308 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
2309 ; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
2310 ; CHECK-NEXT:    vmv4r.v v8, v12
2311 ; CHECK-NEXT:    ret
2312   %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x double>
2313   ret <vscale x 4 x double> %evec
2316 define <vscale x 4 x double> @vuitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) {
2317 ; CHECK-LABEL: vuitofp_nxv4i32_nxv4f64:
2318 ; CHECK:       # %bb.0:
2319 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
2320 ; CHECK-NEXT:    vfwcvt.f.xu.v v12, v8
2321 ; CHECK-NEXT:    vmv4r.v v8, v12
2322 ; CHECK-NEXT:    ret
2323   %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x double>
2324   ret <vscale x 4 x double> %evec
2327 define <vscale x 8 x half> @vsitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) {
2328 ; ZVFH-LABEL: vsitofp_nxv8i32_nxv8f16:
2329 ; ZVFH:       # %bb.0:
2330 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2331 ; ZVFH-NEXT:    vfncvt.f.x.w v12, v8
2332 ; ZVFH-NEXT:    vmv.v.v v8, v12
2333 ; ZVFH-NEXT:    ret
2335 ; ZVFHMIN-LABEL: vsitofp_nxv8i32_nxv8f16:
2336 ; ZVFHMIN:       # %bb.0:
2337 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2338 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v12, v8
2339 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
2340 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
2341 ; ZVFHMIN-NEXT:    ret
2342   %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x half>
2343   ret <vscale x 8 x half> %evec
2346 define <vscale x 8 x half> @vuitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) {
2347 ; ZVFH-LABEL: vuitofp_nxv8i32_nxv8f16:
2348 ; ZVFH:       # %bb.0:
2349 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2350 ; ZVFH-NEXT:    vfncvt.f.xu.w v12, v8
2351 ; ZVFH-NEXT:    vmv.v.v v8, v12
2352 ; ZVFH-NEXT:    ret
2354 ; ZVFHMIN-LABEL: vuitofp_nxv8i32_nxv8f16:
2355 ; ZVFHMIN:       # %bb.0:
2356 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2357 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v12, v8
2358 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
2359 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
2360 ; ZVFHMIN-NEXT:    ret
2361   %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x half>
2362   ret <vscale x 8 x half> %evec
2365 define <vscale x 8 x float> @vsitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) {
2366 ; CHECK-LABEL: vsitofp_nxv8i32_nxv8f32:
2367 ; CHECK:       # %bb.0:
2368 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2369 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
2370 ; CHECK-NEXT:    ret
2371   %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x float>
2372   ret <vscale x 8 x float> %evec
2375 define <vscale x 8 x float> @vuitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) {
2376 ; CHECK-LABEL: vuitofp_nxv8i32_nxv8f32:
2377 ; CHECK:       # %bb.0:
2378 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2379 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
2380 ; CHECK-NEXT:    ret
2381   %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x float>
2382   ret <vscale x 8 x float> %evec
2385 define <vscale x 8 x double> @vsitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) {
2386 ; CHECK-LABEL: vsitofp_nxv8i32_nxv8f64:
2387 ; CHECK:       # %bb.0:
2388 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2389 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
2390 ; CHECK-NEXT:    vmv8r.v v8, v16
2391 ; CHECK-NEXT:    ret
2392   %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x double>
2393   ret <vscale x 8 x double> %evec
2396 define <vscale x 8 x double> @vuitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) {
2397 ; CHECK-LABEL: vuitofp_nxv8i32_nxv8f64:
2398 ; CHECK:       # %bb.0:
2399 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2400 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
2401 ; CHECK-NEXT:    vmv8r.v v8, v16
2402 ; CHECK-NEXT:    ret
2403   %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x double>
2404   ret <vscale x 8 x double> %evec
2407 define <vscale x 16 x half> @vsitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) {
2408 ; ZVFH-LABEL: vsitofp_nxv16i32_nxv16f16:
2409 ; ZVFH:       # %bb.0:
2410 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2411 ; ZVFH-NEXT:    vfncvt.f.x.w v16, v8
2412 ; ZVFH-NEXT:    vmv.v.v v8, v16
2413 ; ZVFH-NEXT:    ret
2415 ; ZVFHMIN-LABEL: vsitofp_nxv16i32_nxv16f16:
2416 ; ZVFHMIN:       # %bb.0:
2417 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
2418 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v16, v8
2419 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2420 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
2421 ; ZVFHMIN-NEXT:    ret
2422   %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x half>
2423   ret <vscale x 16 x half> %evec
2426 define <vscale x 16 x half> @vuitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) {
2427 ; ZVFH-LABEL: vuitofp_nxv16i32_nxv16f16:
2428 ; ZVFH:       # %bb.0:
2429 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2430 ; ZVFH-NEXT:    vfncvt.f.xu.w v16, v8
2431 ; ZVFH-NEXT:    vmv.v.v v8, v16
2432 ; ZVFH-NEXT:    ret
2434 ; ZVFHMIN-LABEL: vuitofp_nxv16i32_nxv16f16:
2435 ; ZVFHMIN:       # %bb.0:
2436 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
2437 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v16, v8
2438 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2439 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
2440 ; ZVFHMIN-NEXT:    ret
2441   %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x half>
2442   ret <vscale x 16 x half> %evec
2445 define <vscale x 16 x float> @vsitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) {
2446 ; CHECK-LABEL: vsitofp_nxv16i32_nxv16f32:
2447 ; CHECK:       # %bb.0:
2448 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
2449 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
2450 ; CHECK-NEXT:    ret
2451   %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x float>
2452   ret <vscale x 16 x float> %evec
2455 define <vscale x 16 x float> @vuitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) {
2456 ; CHECK-LABEL: vuitofp_nxv16i32_nxv16f32:
2457 ; CHECK:       # %bb.0:
2458 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
2459 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
2460 ; CHECK-NEXT:    ret
2461   %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x float>
2462   ret <vscale x 16 x float> %evec
2465 define <vscale x 1 x half> @vsitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) {
2466 ; CHECK-LABEL: vsitofp_nxv1i64_nxv1f16:
2467 ; CHECK:       # %bb.0:
2468 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
2469 ; CHECK-NEXT:    vfncvt.f.x.w v9, v8
2470 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
2471 ; CHECK-NEXT:    vfncvt.f.f.w v8, v9
2472 ; CHECK-NEXT:    ret
2473   %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x half>
2474   ret <vscale x 1 x half> %evec
2477 define <vscale x 1 x half> @vuitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) {
2478 ; CHECK-LABEL: vuitofp_nxv1i64_nxv1f16:
2479 ; CHECK:       # %bb.0:
2480 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
2481 ; CHECK-NEXT:    vfncvt.f.xu.w v9, v8
2482 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
2483 ; CHECK-NEXT:    vfncvt.f.f.w v8, v9
2484 ; CHECK-NEXT:    ret
2485   %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x half>
2486   ret <vscale x 1 x half> %evec
2489 define <vscale x 1 x float> @vsitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) {
2490 ; CHECK-LABEL: vsitofp_nxv1i64_nxv1f32:
2491 ; CHECK:       # %bb.0:
2492 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
2493 ; CHECK-NEXT:    vfncvt.f.x.w v9, v8
2494 ; CHECK-NEXT:    vmv1r.v v8, v9
2495 ; CHECK-NEXT:    ret
2496   %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x float>
2497   ret <vscale x 1 x float> %evec
2500 define <vscale x 1 x float> @vuitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) {
2501 ; CHECK-LABEL: vuitofp_nxv1i64_nxv1f32:
2502 ; CHECK:       # %bb.0:
2503 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
2504 ; CHECK-NEXT:    vfncvt.f.xu.w v9, v8
2505 ; CHECK-NEXT:    vmv1r.v v8, v9
2506 ; CHECK-NEXT:    ret
2507   %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x float>
2508   ret <vscale x 1 x float> %evec
2511 define <vscale x 1 x double> @vsitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) {
2512 ; CHECK-LABEL: vsitofp_nxv1i64_nxv1f64:
2513 ; CHECK:       # %bb.0:
2514 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
2515 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
2516 ; CHECK-NEXT:    ret
2517   %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x double>
2518   ret <vscale x 1 x double> %evec
2521 define <vscale x 1 x double> @vuitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) {
2522 ; CHECK-LABEL: vuitofp_nxv1i64_nxv1f64:
2523 ; CHECK:       # %bb.0:
2524 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
2525 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
2526 ; CHECK-NEXT:    ret
2527   %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x double>
2528   ret <vscale x 1 x double> %evec
2531 define <vscale x 2 x half> @vsitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) {
2532 ; CHECK-LABEL: vsitofp_nxv2i64_nxv2f16:
2533 ; CHECK:       # %bb.0:
2534 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
2535 ; CHECK-NEXT:    vfncvt.f.x.w v10, v8
2536 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
2537 ; CHECK-NEXT:    vfncvt.f.f.w v8, v10
2538 ; CHECK-NEXT:    ret
2539   %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x half>
2540   ret <vscale x 2 x half> %evec
2543 define <vscale x 2 x half> @vuitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) {
2544 ; CHECK-LABEL: vuitofp_nxv2i64_nxv2f16:
2545 ; CHECK:       # %bb.0:
2546 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
2547 ; CHECK-NEXT:    vfncvt.f.xu.w v10, v8
2548 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
2549 ; CHECK-NEXT:    vfncvt.f.f.w v8, v10
2550 ; CHECK-NEXT:    ret
2551   %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x half>
2552   ret <vscale x 2 x half> %evec
2555 define <vscale x 2 x float> @vsitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) {
2556 ; CHECK-LABEL: vsitofp_nxv2i64_nxv2f32:
2557 ; CHECK:       # %bb.0:
2558 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
2559 ; CHECK-NEXT:    vfncvt.f.x.w v10, v8
2560 ; CHECK-NEXT:    vmv.v.v v8, v10
2561 ; CHECK-NEXT:    ret
2562   %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x float>
2563   ret <vscale x 2 x float> %evec
2566 define <vscale x 2 x float> @vuitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) {
2567 ; CHECK-LABEL: vuitofp_nxv2i64_nxv2f32:
2568 ; CHECK:       # %bb.0:
2569 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
2570 ; CHECK-NEXT:    vfncvt.f.xu.w v10, v8
2571 ; CHECK-NEXT:    vmv.v.v v8, v10
2572 ; CHECK-NEXT:    ret
2573   %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x float>
2574   ret <vscale x 2 x float> %evec
2577 define <vscale x 2 x double> @vsitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) {
2578 ; CHECK-LABEL: vsitofp_nxv2i64_nxv2f64:
2579 ; CHECK:       # %bb.0:
2580 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
2581 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
2582 ; CHECK-NEXT:    ret
2583   %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x double>
2584   ret <vscale x 2 x double> %evec
2587 define <vscale x 2 x double> @vuitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) {
2588 ; CHECK-LABEL: vuitofp_nxv2i64_nxv2f64:
2589 ; CHECK:       # %bb.0:
2590 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
2591 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
2592 ; CHECK-NEXT:    ret
2593   %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x double>
2594   ret <vscale x 2 x double> %evec
2597 define <vscale x 4 x half> @vsitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) {
2598 ; CHECK-LABEL: vsitofp_nxv4i64_nxv4f16:
2599 ; CHECK:       # %bb.0:
2600 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
2601 ; CHECK-NEXT:    vfncvt.f.x.w v12, v8
2602 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
2603 ; CHECK-NEXT:    vfncvt.f.f.w v8, v12
2604 ; CHECK-NEXT:    ret
2605   %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x half>
2606   ret <vscale x 4 x half> %evec
2609 define <vscale x 4 x half> @vuitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) {
2610 ; CHECK-LABEL: vuitofp_nxv4i64_nxv4f16:
2611 ; CHECK:       # %bb.0:
2612 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
2613 ; CHECK-NEXT:    vfncvt.f.xu.w v12, v8
2614 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
2615 ; CHECK-NEXT:    vfncvt.f.f.w v8, v12
2616 ; CHECK-NEXT:    ret
2617   %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x half>
2618   ret <vscale x 4 x half> %evec
2621 define <vscale x 4 x float> @vsitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) {
2622 ; CHECK-LABEL: vsitofp_nxv4i64_nxv4f32:
2623 ; CHECK:       # %bb.0:
2624 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
2625 ; CHECK-NEXT:    vfncvt.f.x.w v12, v8
2626 ; CHECK-NEXT:    vmv.v.v v8, v12
2627 ; CHECK-NEXT:    ret
2628   %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x float>
2629   ret <vscale x 4 x float> %evec
2632 define <vscale x 4 x float> @vuitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) {
2633 ; CHECK-LABEL: vuitofp_nxv4i64_nxv4f32:
2634 ; CHECK:       # %bb.0:
2635 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
2636 ; CHECK-NEXT:    vfncvt.f.xu.w v12, v8
2637 ; CHECK-NEXT:    vmv.v.v v8, v12
2638 ; CHECK-NEXT:    ret
2639   %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x float>
2640   ret <vscale x 4 x float> %evec
2643 define <vscale x 4 x double> @vsitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) {
2644 ; CHECK-LABEL: vsitofp_nxv4i64_nxv4f64:
2645 ; CHECK:       # %bb.0:
2646 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
2647 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
2648 ; CHECK-NEXT:    ret
2649   %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x double>
2650   ret <vscale x 4 x double> %evec
2653 define <vscale x 4 x double> @vuitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) {
2654 ; CHECK-LABEL: vuitofp_nxv4i64_nxv4f64:
2655 ; CHECK:       # %bb.0:
2656 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
2657 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
2658 ; CHECK-NEXT:    ret
2659   %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x double>
2660   ret <vscale x 4 x double> %evec
2663 define <vscale x 8 x half> @vsitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) {
2664 ; CHECK-LABEL: vsitofp_nxv8i64_nxv8f16:
2665 ; CHECK:       # %bb.0:
2666 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2667 ; CHECK-NEXT:    vfncvt.f.x.w v16, v8
2668 ; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
2669 ; CHECK-NEXT:    vfncvt.f.f.w v8, v16
2670 ; CHECK-NEXT:    ret
2671   %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x half>
2672   ret <vscale x 8 x half> %evec
2675 define <vscale x 8 x half> @vuitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) {
2676 ; CHECK-LABEL: vuitofp_nxv8i64_nxv8f16:
2677 ; CHECK:       # %bb.0:
2678 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2679 ; CHECK-NEXT:    vfncvt.f.xu.w v16, v8
2680 ; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
2681 ; CHECK-NEXT:    vfncvt.f.f.w v8, v16
2682 ; CHECK-NEXT:    ret
2683   %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x half>
2684   ret <vscale x 8 x half> %evec
2687 define <vscale x 8 x float> @vsitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) {
2688 ; CHECK-LABEL: vsitofp_nxv8i64_nxv8f32:
2689 ; CHECK:       # %bb.0:
2690 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2691 ; CHECK-NEXT:    vfncvt.f.x.w v16, v8
2692 ; CHECK-NEXT:    vmv.v.v v8, v16
2693 ; CHECK-NEXT:    ret
2694   %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x float>
2695   ret <vscale x 8 x float> %evec
2698 define <vscale x 8 x float> @vuitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) {
2699 ; CHECK-LABEL: vuitofp_nxv8i64_nxv8f32:
2700 ; CHECK:       # %bb.0:
2701 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2702 ; CHECK-NEXT:    vfncvt.f.xu.w v16, v8
2703 ; CHECK-NEXT:    vmv.v.v v8, v16
2704 ; CHECK-NEXT:    ret
2705   %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x float>
2706   ret <vscale x 8 x float> %evec
2709 define <vscale x 8 x double> @vsitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) {
2710 ; CHECK-LABEL: vsitofp_nxv8i64_nxv8f64:
2711 ; CHECK:       # %bb.0:
2712 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2713 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
2714 ; CHECK-NEXT:    ret
2715   %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x double>
2716   ret <vscale x 8 x double> %evec
2719 define <vscale x 8 x double> @vuitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) {
2720 ; CHECK-LABEL: vuitofp_nxv8i64_nxv8f64:
2721 ; CHECK:       # %bb.0:
2722 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2723 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
2724 ; CHECK-NEXT:    ret
2725   %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x double>
2726   ret <vscale x 8 x double> %evec