Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vitofp-sdnode.ll
blob77ef0a340270f5c215cb365cd0ce3a292e7cd116
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
6 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=ilp32d \
7 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
8 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=lp64d \
9 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
11 define <vscale x 1 x half> @vsitofp_nxv1i1_nxv1f16(<vscale x 1 x i1> %va) {
12 ; ZVFH-LABEL: vsitofp_nxv1i1_nxv1f16:
13 ; ZVFH:       # %bb.0:
14 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
15 ; ZVFH-NEXT:    vmv.v.i v8, 0
16 ; ZVFH-NEXT:    vmerge.vim v9, v8, -1, v0
17 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9
18 ; ZVFH-NEXT:    ret
20 ; ZVFHMIN-LABEL: vsitofp_nxv1i1_nxv1f16:
21 ; ZVFHMIN:       # %bb.0:
22 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
23 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
24 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0
25 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8
26 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
27 ; ZVFHMIN-NEXT:    ret
28   %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x half>
29   ret <vscale x 1 x half> %evec
32 define <vscale x 1 x half> @vuitofp_nxv1i1_nxv1f16(<vscale x 1 x i1> %va) {
33 ; ZVFH-LABEL: vuitofp_nxv1i1_nxv1f16:
34 ; ZVFH:       # %bb.0:
35 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
36 ; ZVFH-NEXT:    vmv.v.i v8, 0
37 ; ZVFH-NEXT:    vmerge.vim v9, v8, 1, v0
38 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9
39 ; ZVFH-NEXT:    ret
41 ; ZVFHMIN-LABEL: vuitofp_nxv1i1_nxv1f16:
42 ; ZVFHMIN:       # %bb.0:
43 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
44 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
45 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0
46 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8
47 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
48 ; ZVFHMIN-NEXT:    ret
49   %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x half>
50   ret <vscale x 1 x half> %evec
53 define <vscale x 1 x float> @vsitofp_nxv1i1_nxv1f32(<vscale x 1 x i1> %va) {
54 ; CHECK-LABEL: vsitofp_nxv1i1_nxv1f32:
55 ; CHECK:       # %bb.0:
56 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
57 ; CHECK-NEXT:    vmv.v.i v8, 0
58 ; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0
59 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
60 ; CHECK-NEXT:    ret
61   %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x float>
62   ret <vscale x 1 x float> %evec
65 define <vscale x 1 x float> @vuitofp_nxv1i1_nxv1f32(<vscale x 1 x i1> %va) {
66 ; CHECK-LABEL: vuitofp_nxv1i1_nxv1f32:
67 ; CHECK:       # %bb.0:
68 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
69 ; CHECK-NEXT:    vmv.v.i v8, 0
70 ; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0
71 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
72 ; CHECK-NEXT:    ret
73   %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x float>
74   ret <vscale x 1 x float> %evec
77 define <vscale x 1 x double> @vsitofp_nxv1i1_nxv1f64(<vscale x 1 x i1> %va) {
78 ; CHECK-LABEL: vsitofp_nxv1i1_nxv1f64:
79 ; CHECK:       # %bb.0:
80 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
81 ; CHECK-NEXT:    vmv.v.i v8, 0
82 ; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0
83 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
84 ; CHECK-NEXT:    ret
85   %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x double>
86   ret <vscale x 1 x double> %evec
89 define <vscale x 1 x double> @vuitofp_nxv1i1_nxv1f64(<vscale x 1 x i1> %va) {
90 ; CHECK-LABEL: vuitofp_nxv1i1_nxv1f64:
91 ; CHECK:       # %bb.0:
92 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
93 ; CHECK-NEXT:    vmv.v.i v8, 0
94 ; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0
95 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
96 ; CHECK-NEXT:    ret
97   %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x double>
98   ret <vscale x 1 x double> %evec
101 define <vscale x 2 x half> @vsitofp_nxv2i1_nxv2f16(<vscale x 2 x i1> %va) {
102 ; ZVFH-LABEL: vsitofp_nxv2i1_nxv2f16:
103 ; ZVFH:       # %bb.0:
104 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
105 ; ZVFH-NEXT:    vmv.v.i v8, 0
106 ; ZVFH-NEXT:    vmerge.vim v9, v8, -1, v0
107 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9
108 ; ZVFH-NEXT:    ret
110 ; ZVFHMIN-LABEL: vsitofp_nxv2i1_nxv2f16:
111 ; ZVFHMIN:       # %bb.0:
112 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
113 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
114 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0
115 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8
116 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
117 ; ZVFHMIN-NEXT:    ret
118   %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x half>
119   ret <vscale x 2 x half> %evec
122 define <vscale x 2 x half> @vuitofp_nxv2i1_nxv2f16(<vscale x 2 x i1> %va) {
123 ; ZVFH-LABEL: vuitofp_nxv2i1_nxv2f16:
124 ; ZVFH:       # %bb.0:
125 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
126 ; ZVFH-NEXT:    vmv.v.i v8, 0
127 ; ZVFH-NEXT:    vmerge.vim v9, v8, 1, v0
128 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9
129 ; ZVFH-NEXT:    ret
131 ; ZVFHMIN-LABEL: vuitofp_nxv2i1_nxv2f16:
132 ; ZVFHMIN:       # %bb.0:
133 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
134 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
135 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0
136 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8
137 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
138 ; ZVFHMIN-NEXT:    ret
139   %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x half>
140   ret <vscale x 2 x half> %evec
143 define <vscale x 2 x float> @vsitofp_nxv2i1_nxv2f32(<vscale x 2 x i1> %va) {
144 ; CHECK-LABEL: vsitofp_nxv2i1_nxv2f32:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
147 ; CHECK-NEXT:    vmv.v.i v8, 0
148 ; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0
149 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
150 ; CHECK-NEXT:    ret
151   %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x float>
152   ret <vscale x 2 x float> %evec
155 define <vscale x 2 x float> @vuitofp_nxv2i1_nxv2f32(<vscale x 2 x i1> %va) {
156 ; CHECK-LABEL: vuitofp_nxv2i1_nxv2f32:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
159 ; CHECK-NEXT:    vmv.v.i v8, 0
160 ; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0
161 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
162 ; CHECK-NEXT:    ret
163   %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x float>
164   ret <vscale x 2 x float> %evec
167 define <vscale x 2 x double> @vsitofp_nxv2i1_nxv2f64(<vscale x 2 x i1> %va) {
168 ; CHECK-LABEL: vsitofp_nxv2i1_nxv2f64:
169 ; CHECK:       # %bb.0:
170 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
171 ; CHECK-NEXT:    vmv.v.i v8, 0
172 ; CHECK-NEXT:    vmerge.vim v10, v8, -1, v0
173 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
174 ; CHECK-NEXT:    ret
175   %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x double>
176   ret <vscale x 2 x double> %evec
179 define <vscale x 2 x double> @vuitofp_nxv2i1_nxv2f64(<vscale x 2 x i1> %va) {
180 ; CHECK-LABEL: vuitofp_nxv2i1_nxv2f64:
181 ; CHECK:       # %bb.0:
182 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
183 ; CHECK-NEXT:    vmv.v.i v8, 0
184 ; CHECK-NEXT:    vmerge.vim v10, v8, 1, v0
185 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
186 ; CHECK-NEXT:    ret
187   %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x double>
188   ret <vscale x 2 x double> %evec
191 define <vscale x 4 x half> @vsitofp_nxv4i1_nxv4f16(<vscale x 4 x i1> %va) {
192 ; ZVFH-LABEL: vsitofp_nxv4i1_nxv4f16:
193 ; ZVFH:       # %bb.0:
194 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
195 ; ZVFH-NEXT:    vmv.v.i v8, 0
196 ; ZVFH-NEXT:    vmerge.vim v9, v8, -1, v0
197 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9
198 ; ZVFH-NEXT:    ret
200 ; ZVFHMIN-LABEL: vsitofp_nxv4i1_nxv4f16:
201 ; ZVFHMIN:       # %bb.0:
202 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
203 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
204 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0
205 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v8
206 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
207 ; ZVFHMIN-NEXT:    ret
208   %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x half>
209   ret <vscale x 4 x half> %evec
212 define <vscale x 4 x half> @vuitofp_nxv4i1_nxv4f16(<vscale x 4 x i1> %va) {
213 ; ZVFH-LABEL: vuitofp_nxv4i1_nxv4f16:
214 ; ZVFH:       # %bb.0:
215 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
216 ; ZVFH-NEXT:    vmv.v.i v8, 0
217 ; ZVFH-NEXT:    vmerge.vim v9, v8, 1, v0
218 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9
219 ; ZVFH-NEXT:    ret
221 ; ZVFHMIN-LABEL: vuitofp_nxv4i1_nxv4f16:
222 ; ZVFHMIN:       # %bb.0:
223 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
224 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
225 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0
226 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v8
227 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
228 ; ZVFHMIN-NEXT:    ret
229   %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x half>
230   ret <vscale x 4 x half> %evec
233 define <vscale x 4 x float> @vsitofp_nxv4i1_nxv4f32(<vscale x 4 x i1> %va) {
234 ; CHECK-LABEL: vsitofp_nxv4i1_nxv4f32:
235 ; CHECK:       # %bb.0:
236 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
237 ; CHECK-NEXT:    vmv.v.i v8, 0
238 ; CHECK-NEXT:    vmerge.vim v10, v8, -1, v0
239 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
240 ; CHECK-NEXT:    ret
241   %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x float>
242   ret <vscale x 4 x float> %evec
245 define <vscale x 4 x float> @vuitofp_nxv4i1_nxv4f32(<vscale x 4 x i1> %va) {
246 ; CHECK-LABEL: vuitofp_nxv4i1_nxv4f32:
247 ; CHECK:       # %bb.0:
248 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
249 ; CHECK-NEXT:    vmv.v.i v8, 0
250 ; CHECK-NEXT:    vmerge.vim v10, v8, 1, v0
251 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
252 ; CHECK-NEXT:    ret
253   %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x float>
254   ret <vscale x 4 x float> %evec
257 define <vscale x 4 x double> @vsitofp_nxv4i1_nxv4f64(<vscale x 4 x i1> %va) {
258 ; CHECK-LABEL: vsitofp_nxv4i1_nxv4f64:
259 ; CHECK:       # %bb.0:
260 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
261 ; CHECK-NEXT:    vmv.v.i v8, 0
262 ; CHECK-NEXT:    vmerge.vim v12, v8, -1, v0
263 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v12
264 ; CHECK-NEXT:    ret
265   %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x double>
266   ret <vscale x 4 x double> %evec
269 define <vscale x 4 x double> @vuitofp_nxv4i1_nxv4f64(<vscale x 4 x i1> %va) {
270 ; CHECK-LABEL: vuitofp_nxv4i1_nxv4f64:
271 ; CHECK:       # %bb.0:
272 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
273 ; CHECK-NEXT:    vmv.v.i v8, 0
274 ; CHECK-NEXT:    vmerge.vim v12, v8, 1, v0
275 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12
276 ; CHECK-NEXT:    ret
277   %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x double>
278   ret <vscale x 4 x double> %evec
281 define <vscale x 8 x half> @vsitofp_nxv8i1_nxv8f16(<vscale x 8 x i1> %va) {
282 ; ZVFH-LABEL: vsitofp_nxv8i1_nxv8f16:
283 ; ZVFH:       # %bb.0:
284 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
285 ; ZVFH-NEXT:    vmv.v.i v8, 0
286 ; ZVFH-NEXT:    vmerge.vim v10, v8, -1, v0
287 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v10
288 ; ZVFH-NEXT:    ret
290 ; ZVFHMIN-LABEL: vsitofp_nxv8i1_nxv8f16:
291 ; ZVFHMIN:       # %bb.0:
292 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
293 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
294 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0
295 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v12, v8
296 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
297 ; ZVFHMIN-NEXT:    ret
298   %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x half>
299   ret <vscale x 8 x half> %evec
302 define <vscale x 8 x half> @vuitofp_nxv8i1_nxv8f16(<vscale x 8 x i1> %va) {
303 ; ZVFH-LABEL: vuitofp_nxv8i1_nxv8f16:
304 ; ZVFH:       # %bb.0:
305 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
306 ; ZVFH-NEXT:    vmv.v.i v8, 0
307 ; ZVFH-NEXT:    vmerge.vim v10, v8, 1, v0
308 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v10
309 ; ZVFH-NEXT:    ret
311 ; ZVFHMIN-LABEL: vuitofp_nxv8i1_nxv8f16:
312 ; ZVFHMIN:       # %bb.0:
313 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
314 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
315 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0
316 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v12, v8
317 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
318 ; ZVFHMIN-NEXT:    ret
319   %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x half>
320   ret <vscale x 8 x half> %evec
323 define <vscale x 8 x float> @vsitofp_nxv8i1_nxv8f32(<vscale x 8 x i1> %va) {
324 ; CHECK-LABEL: vsitofp_nxv8i1_nxv8f32:
325 ; CHECK:       # %bb.0:
326 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
327 ; CHECK-NEXT:    vmv.v.i v8, 0
328 ; CHECK-NEXT:    vmerge.vim v12, v8, -1, v0
329 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v12
330 ; CHECK-NEXT:    ret
331   %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x float>
332   ret <vscale x 8 x float> %evec
335 define <vscale x 8 x float> @vuitofp_nxv8i1_nxv8f32(<vscale x 8 x i1> %va) {
336 ; CHECK-LABEL: vuitofp_nxv8i1_nxv8f32:
337 ; CHECK:       # %bb.0:
338 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
339 ; CHECK-NEXT:    vmv.v.i v8, 0
340 ; CHECK-NEXT:    vmerge.vim v12, v8, 1, v0
341 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12
342 ; CHECK-NEXT:    ret
343   %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x float>
344   ret <vscale x 8 x float> %evec
347 define <vscale x 8 x double> @vsitofp_nxv8i1_nxv8f64(<vscale x 8 x i1> %va) {
348 ; CHECK-LABEL: vsitofp_nxv8i1_nxv8f64:
349 ; CHECK:       # %bb.0:
350 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
351 ; CHECK-NEXT:    vmv.v.i v8, 0
352 ; CHECK-NEXT:    vmerge.vim v16, v8, -1, v0
353 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v16
354 ; CHECK-NEXT:    ret
355   %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x double>
356   ret <vscale x 8 x double> %evec
359 define <vscale x 8 x double> @vuitofp_nxv8i1_nxv8f64(<vscale x 8 x i1> %va) {
360 ; CHECK-LABEL: vuitofp_nxv8i1_nxv8f64:
361 ; CHECK:       # %bb.0:
362 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
363 ; CHECK-NEXT:    vmv.v.i v8, 0
364 ; CHECK-NEXT:    vmerge.vim v16, v8, 1, v0
365 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v16
366 ; CHECK-NEXT:    ret
367   %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x double>
368   ret <vscale x 8 x double> %evec
371 define <vscale x 16 x half> @vsitofp_nxv16i1_nxv16f16(<vscale x 16 x i1> %va) {
372 ; ZVFH-LABEL: vsitofp_nxv16i1_nxv16f16:
373 ; ZVFH:       # %bb.0:
374 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
375 ; ZVFH-NEXT:    vmv.v.i v8, 0
376 ; ZVFH-NEXT:    vmerge.vim v12, v8, -1, v0
377 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v12
378 ; ZVFH-NEXT:    ret
380 ; ZVFHMIN-LABEL: vsitofp_nxv16i1_nxv16f16:
381 ; ZVFHMIN:       # %bb.0:
382 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
383 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
384 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0
385 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v8
386 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
387 ; ZVFHMIN-NEXT:    ret
388   %evec = sitofp <vscale x 16 x i1> %va to <vscale x 16 x half>
389   ret <vscale x 16 x half> %evec
392 define <vscale x 16 x half> @vuitofp_nxv16i1_nxv16f16(<vscale x 16 x i1> %va) {
393 ; ZVFH-LABEL: vuitofp_nxv16i1_nxv16f16:
394 ; ZVFH:       # %bb.0:
395 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
396 ; ZVFH-NEXT:    vmv.v.i v8, 0
397 ; ZVFH-NEXT:    vmerge.vim v12, v8, 1, v0
398 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v12
399 ; ZVFH-NEXT:    ret
401 ; ZVFHMIN-LABEL: vuitofp_nxv16i1_nxv16f16:
402 ; ZVFHMIN:       # %bb.0:
403 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
404 ; ZVFHMIN-NEXT:    vmv.v.i v8, 0
405 ; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0
406 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v8
407 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
408 ; ZVFHMIN-NEXT:    ret
409   %evec = uitofp <vscale x 16 x i1> %va to <vscale x 16 x half>
410   ret <vscale x 16 x half> %evec
413 define <vscale x 16 x float> @vsitofp_nxv16i1_nxv16f32(<vscale x 16 x i1> %va) {
414 ; CHECK-LABEL: vsitofp_nxv16i1_nxv16f32:
415 ; CHECK:       # %bb.0:
416 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
417 ; CHECK-NEXT:    vmv.v.i v8, 0
418 ; CHECK-NEXT:    vmerge.vim v16, v8, -1, v0
419 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v16
420 ; CHECK-NEXT:    ret
421   %evec = sitofp <vscale x 16 x i1> %va to <vscale x 16 x float>
422   ret <vscale x 16 x float> %evec
425 define <vscale x 16 x float> @vuitofp_nxv16i1_nxv16f32(<vscale x 16 x i1> %va) {
426 ; CHECK-LABEL: vuitofp_nxv16i1_nxv16f32:
427 ; CHECK:       # %bb.0:
428 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
429 ; CHECK-NEXT:    vmv.v.i v8, 0
430 ; CHECK-NEXT:    vmerge.vim v16, v8, 1, v0
431 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v16
432 ; CHECK-NEXT:    ret
433   %evec = uitofp <vscale x 16 x i1> %va to <vscale x 16 x float>
434   ret <vscale x 16 x float> %evec
437 define <vscale x 32 x half> @vsitofp_nxv32i1_nxv32f16(<vscale x 32 x i1> %va) {
438 ; ZVFH-LABEL: vsitofp_nxv32i1_nxv32f16:
439 ; ZVFH:       # %bb.0:
440 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
441 ; ZVFH-NEXT:    vmv.v.i v8, 0
442 ; ZVFH-NEXT:    vmerge.vim v16, v8, -1, v0
443 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v16
444 ; ZVFH-NEXT:    ret
446 ; ZVFHMIN-LABEL: vsitofp_nxv32i1_nxv32f16:
447 ; ZVFHMIN:       # %bb.0:
448 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
449 ; ZVFHMIN-NEXT:    vmv.v.i v12, 0
450 ; ZVFHMIN-NEXT:    vmerge.vim v8, v12, -1, v0
451 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v8
452 ; ZVFHMIN-NEXT:    csrr a0, vlenb
453 ; ZVFHMIN-NEXT:    srli a0, a0, 2
454 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
455 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a0
456 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
457 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
458 ; ZVFHMIN-NEXT:    vmerge.vim v12, v12, -1, v0
459 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v12
460 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
461 ; ZVFHMIN-NEXT:    ret
462   %evec = sitofp <vscale x 32 x i1> %va to <vscale x 32 x half>
463   ret <vscale x 32 x half> %evec
466 define <vscale x 32 x half> @vuitofp_nxv32i1_nxv32f16(<vscale x 32 x i1> %va) {
467 ; ZVFH-LABEL: vuitofp_nxv32i1_nxv32f16:
468 ; ZVFH:       # %bb.0:
469 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
470 ; ZVFH-NEXT:    vmv.v.i v8, 0
471 ; ZVFH-NEXT:    vmerge.vim v16, v8, 1, v0
472 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v16
473 ; ZVFH-NEXT:    ret
475 ; ZVFHMIN-LABEL: vuitofp_nxv32i1_nxv32f16:
476 ; ZVFHMIN:       # %bb.0:
477 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
478 ; ZVFHMIN-NEXT:    vmv.v.i v12, 0
479 ; ZVFHMIN-NEXT:    vmerge.vim v8, v12, 1, v0
480 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v8
481 ; ZVFHMIN-NEXT:    csrr a0, vlenb
482 ; ZVFHMIN-NEXT:    srli a0, a0, 2
483 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
484 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a0
485 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
486 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
487 ; ZVFHMIN-NEXT:    vmerge.vim v12, v12, 1, v0
488 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v12
489 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
490 ; ZVFHMIN-NEXT:    ret
491   %evec = uitofp <vscale x 32 x i1> %va to <vscale x 32 x half>
492   ret <vscale x 32 x half> %evec
495 define <vscale x 1 x half> @vsitofp_nxv1i8_nxv1f16(<vscale x 1 x i8> %va) {
496 ; ZVFH-LABEL: vsitofp_nxv1i8_nxv1f16:
497 ; ZVFH:       # %bb.0:
498 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
499 ; ZVFH-NEXT:    vfwcvt.f.x.v v9, v8
500 ; ZVFH-NEXT:    vmv1r.v v8, v9
501 ; ZVFH-NEXT:    ret
503 ; ZVFHMIN-LABEL: vsitofp_nxv1i8_nxv1f16:
504 ; ZVFHMIN:       # %bb.0:
505 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
506 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8
507 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9
508 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
509 ; ZVFHMIN-NEXT:    ret
510   %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x half>
511   ret <vscale x 1 x half> %evec
514 define <vscale x 1 x half> @vsitofp_nxv1i7_nxv1f16(<vscale x 1 x i7> %va) {
515 ; ZVFH-LABEL: vsitofp_nxv1i7_nxv1f16:
516 ; ZVFH:       # %bb.0:
517 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
518 ; ZVFH-NEXT:    vadd.vv v8, v8, v8
519 ; ZVFH-NEXT:    vsra.vi v9, v8, 1
520 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9
521 ; ZVFH-NEXT:    ret
523 ; ZVFHMIN-LABEL: vsitofp_nxv1i7_nxv1f16:
524 ; ZVFHMIN:       # %bb.0:
525 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
526 ; ZVFHMIN-NEXT:    vadd.vv v8, v8, v8
527 ; ZVFHMIN-NEXT:    vsra.vi v8, v8, 1
528 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
529 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8
530 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9
531 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
532 ; ZVFHMIN-NEXT:    ret
533   %evec = sitofp <vscale x 1 x i7> %va to <vscale x 1 x half>
534   ret <vscale x 1 x half> %evec
537 define <vscale x 1 x half> @vuitofp_nxv1i7_nxv1f16(<vscale x 1 x i7> %va) {
538 ; ZVFH-LABEL: vuitofp_nxv1i7_nxv1f16:
539 ; ZVFH:       # %bb.0:
540 ; ZVFH-NEXT:    li a0, 127
541 ; ZVFH-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
542 ; ZVFH-NEXT:    vand.vx v9, v8, a0
543 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9
544 ; ZVFH-NEXT:    ret
546 ; ZVFHMIN-LABEL: vuitofp_nxv1i7_nxv1f16:
547 ; ZVFHMIN:       # %bb.0:
548 ; ZVFHMIN-NEXT:    li a0, 127
549 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
550 ; ZVFHMIN-NEXT:    vand.vx v8, v8, a0
551 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
552 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8
553 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9
554 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
555 ; ZVFHMIN-NEXT:    ret
556   %evec = uitofp <vscale x 1 x i7> %va to <vscale x 1 x half>
557   ret <vscale x 1 x half> %evec
560 define <vscale x 1 x half> @vuitofp_nxv1i8_nxv1f16(<vscale x 1 x i8> %va) {
561 ; ZVFH-LABEL: vuitofp_nxv1i8_nxv1f16:
562 ; ZVFH:       # %bb.0:
563 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
564 ; ZVFH-NEXT:    vfwcvt.f.xu.v v9, v8
565 ; ZVFH-NEXT:    vmv1r.v v8, v9
566 ; ZVFH-NEXT:    ret
568 ; ZVFHMIN-LABEL: vuitofp_nxv1i8_nxv1f16:
569 ; ZVFHMIN:       # %bb.0:
570 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
571 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8
572 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9
573 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
574 ; ZVFHMIN-NEXT:    ret
575   %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x half>
576   ret <vscale x 1 x half> %evec
579 define <vscale x 1 x float> @vsitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) {
580 ; CHECK-LABEL: vsitofp_nxv1i8_nxv1f32:
581 ; CHECK:       # %bb.0:
582 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
583 ; CHECK-NEXT:    vsext.vf2 v9, v8
584 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
585 ; CHECK-NEXT:    ret
586   %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x float>
587   ret <vscale x 1 x float> %evec
590 define <vscale x 1 x float> @vuitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) {
591 ; CHECK-LABEL: vuitofp_nxv1i8_nxv1f32:
592 ; CHECK:       # %bb.0:
593 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
594 ; CHECK-NEXT:    vzext.vf2 v9, v8
595 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
596 ; CHECK-NEXT:    ret
597   %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x float>
598   ret <vscale x 1 x float> %evec
601 define <vscale x 1 x double> @vsitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) {
602 ; CHECK-LABEL: vsitofp_nxv1i8_nxv1f64:
603 ; CHECK:       # %bb.0:
604 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
605 ; CHECK-NEXT:    vsext.vf4 v9, v8
606 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
607 ; CHECK-NEXT:    ret
608   %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x double>
609   ret <vscale x 1 x double> %evec
612 define <vscale x 1 x double> @vuitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) {
613 ; CHECK-LABEL: vuitofp_nxv1i8_nxv1f64:
614 ; CHECK:       # %bb.0:
615 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
616 ; CHECK-NEXT:    vzext.vf4 v9, v8
617 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
618 ; CHECK-NEXT:    ret
619   %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x double>
620   ret <vscale x 1 x double> %evec
623 define <vscale x 2 x half> @vsitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) {
624 ; ZVFH-LABEL: vsitofp_nxv2i8_nxv2f16:
625 ; ZVFH:       # %bb.0:
626 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
627 ; ZVFH-NEXT:    vfwcvt.f.x.v v9, v8
628 ; ZVFH-NEXT:    vmv1r.v v8, v9
629 ; ZVFH-NEXT:    ret
631 ; ZVFHMIN-LABEL: vsitofp_nxv2i8_nxv2f16:
632 ; ZVFHMIN:       # %bb.0:
633 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
634 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8
635 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9
636 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
637 ; ZVFHMIN-NEXT:    ret
638   %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x half>
639   ret <vscale x 2 x half> %evec
642 define <vscale x 2 x half> @vuitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) {
643 ; ZVFH-LABEL: vuitofp_nxv2i8_nxv2f16:
644 ; ZVFH:       # %bb.0:
645 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
646 ; ZVFH-NEXT:    vfwcvt.f.xu.v v9, v8
647 ; ZVFH-NEXT:    vmv1r.v v8, v9
648 ; ZVFH-NEXT:    ret
650 ; ZVFHMIN-LABEL: vuitofp_nxv2i8_nxv2f16:
651 ; ZVFHMIN:       # %bb.0:
652 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
653 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8
654 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9
655 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
656 ; ZVFHMIN-NEXT:    ret
657   %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x half>
658   ret <vscale x 2 x half> %evec
661 define <vscale x 2 x float> @vsitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) {
662 ; CHECK-LABEL: vsitofp_nxv2i8_nxv2f32:
663 ; CHECK:       # %bb.0:
664 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
665 ; CHECK-NEXT:    vsext.vf2 v9, v8
666 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
667 ; CHECK-NEXT:    ret
668   %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x float>
669   ret <vscale x 2 x float> %evec
672 define <vscale x 2 x float> @vuitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) {
673 ; CHECK-LABEL: vuitofp_nxv2i8_nxv2f32:
674 ; CHECK:       # %bb.0:
675 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
676 ; CHECK-NEXT:    vzext.vf2 v9, v8
677 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
678 ; CHECK-NEXT:    ret
679   %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x float>
680   ret <vscale x 2 x float> %evec
683 define <vscale x 2 x double> @vsitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) {
684 ; CHECK-LABEL: vsitofp_nxv2i8_nxv2f64:
685 ; CHECK:       # %bb.0:
686 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
687 ; CHECK-NEXT:    vsext.vf4 v10, v8
688 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
689 ; CHECK-NEXT:    ret
690   %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x double>
691   ret <vscale x 2 x double> %evec
694 define <vscale x 2 x double> @vuitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) {
695 ; CHECK-LABEL: vuitofp_nxv2i8_nxv2f64:
696 ; CHECK:       # %bb.0:
697 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
698 ; CHECK-NEXT:    vzext.vf4 v10, v8
699 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
700 ; CHECK-NEXT:    ret
701   %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x double>
702   ret <vscale x 2 x double> %evec
705 define <vscale x 4 x half> @vsitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) {
706 ; ZVFH-LABEL: vsitofp_nxv4i8_nxv4f16:
707 ; ZVFH:       # %bb.0:
708 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
709 ; ZVFH-NEXT:    vfwcvt.f.x.v v9, v8
710 ; ZVFH-NEXT:    vmv1r.v v8, v9
711 ; ZVFH-NEXT:    ret
713 ; ZVFHMIN-LABEL: vsitofp_nxv4i8_nxv4f16:
714 ; ZVFHMIN:       # %bb.0:
715 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
716 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8
717 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9
718 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
719 ; ZVFHMIN-NEXT:    ret
720   %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x half>
721   ret <vscale x 4 x half> %evec
724 define <vscale x 4 x half> @vuitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) {
725 ; ZVFH-LABEL: vuitofp_nxv4i8_nxv4f16:
726 ; ZVFH:       # %bb.0:
727 ; ZVFH-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
728 ; ZVFH-NEXT:    vfwcvt.f.xu.v v9, v8
729 ; ZVFH-NEXT:    vmv1r.v v8, v9
730 ; ZVFH-NEXT:    ret
732 ; ZVFHMIN-LABEL: vuitofp_nxv4i8_nxv4f16:
733 ; ZVFHMIN:       # %bb.0:
734 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
735 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8
736 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9
737 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
738 ; ZVFHMIN-NEXT:    ret
739   %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x half>
740   ret <vscale x 4 x half> %evec
743 define <vscale x 4 x float> @vsitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) {
744 ; CHECK-LABEL: vsitofp_nxv4i8_nxv4f32:
745 ; CHECK:       # %bb.0:
746 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
747 ; CHECK-NEXT:    vsext.vf2 v10, v8
748 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
749 ; CHECK-NEXT:    ret
750   %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x float>
751   ret <vscale x 4 x float> %evec
754 define <vscale x 4 x float> @vuitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) {
755 ; CHECK-LABEL: vuitofp_nxv4i8_nxv4f32:
756 ; CHECK:       # %bb.0:
757 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
758 ; CHECK-NEXT:    vzext.vf2 v10, v8
759 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
760 ; CHECK-NEXT:    ret
761   %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x float>
762   ret <vscale x 4 x float> %evec
765 define <vscale x 4 x double> @vsitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) {
766 ; CHECK-LABEL: vsitofp_nxv4i8_nxv4f64:
767 ; CHECK:       # %bb.0:
768 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
769 ; CHECK-NEXT:    vsext.vf4 v12, v8
770 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v12
771 ; CHECK-NEXT:    ret
772   %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x double>
773   ret <vscale x 4 x double> %evec
776 define <vscale x 4 x double> @vuitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) {
777 ; CHECK-LABEL: vuitofp_nxv4i8_nxv4f64:
778 ; CHECK:       # %bb.0:
779 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
780 ; CHECK-NEXT:    vzext.vf4 v12, v8
781 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12
782 ; CHECK-NEXT:    ret
783   %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x double>
784   ret <vscale x 4 x double> %evec
787 define <vscale x 8 x half> @vsitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) {
788 ; ZVFH-LABEL: vsitofp_nxv8i8_nxv8f16:
789 ; ZVFH:       # %bb.0:
790 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
791 ; ZVFH-NEXT:    vfwcvt.f.x.v v10, v8
792 ; ZVFH-NEXT:    vmv2r.v v8, v10
793 ; ZVFH-NEXT:    ret
795 ; ZVFHMIN-LABEL: vsitofp_nxv8i8_nxv8f16:
796 ; ZVFHMIN:       # %bb.0:
797 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
798 ; ZVFHMIN-NEXT:    vsext.vf2 v10, v8
799 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v12, v10
800 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
801 ; ZVFHMIN-NEXT:    ret
802   %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x half>
803   ret <vscale x 8 x half> %evec
806 define <vscale x 8 x half> @vuitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) {
807 ; ZVFH-LABEL: vuitofp_nxv8i8_nxv8f16:
808 ; ZVFH:       # %bb.0:
809 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
810 ; ZVFH-NEXT:    vfwcvt.f.xu.v v10, v8
811 ; ZVFH-NEXT:    vmv2r.v v8, v10
812 ; ZVFH-NEXT:    ret
814 ; ZVFHMIN-LABEL: vuitofp_nxv8i8_nxv8f16:
815 ; ZVFHMIN:       # %bb.0:
816 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
817 ; ZVFHMIN-NEXT:    vzext.vf2 v10, v8
818 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v12, v10
819 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
820 ; ZVFHMIN-NEXT:    ret
821   %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x half>
822   ret <vscale x 8 x half> %evec
825 define <vscale x 8 x float> @vsitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) {
826 ; CHECK-LABEL: vsitofp_nxv8i8_nxv8f32:
827 ; CHECK:       # %bb.0:
828 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
829 ; CHECK-NEXT:    vsext.vf2 v12, v8
830 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v12
831 ; CHECK-NEXT:    ret
832   %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x float>
833   ret <vscale x 8 x float> %evec
836 define <vscale x 8 x float> @vuitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) {
837 ; CHECK-LABEL: vuitofp_nxv8i8_nxv8f32:
838 ; CHECK:       # %bb.0:
839 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
840 ; CHECK-NEXT:    vzext.vf2 v12, v8
841 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12
842 ; CHECK-NEXT:    ret
843   %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x float>
844   ret <vscale x 8 x float> %evec
847 define <vscale x 8 x double> @vsitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) {
848 ; CHECK-LABEL: vsitofp_nxv8i8_nxv8f64:
849 ; CHECK:       # %bb.0:
850 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
851 ; CHECK-NEXT:    vsext.vf4 v16, v8
852 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v16
853 ; CHECK-NEXT:    ret
854   %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x double>
855   ret <vscale x 8 x double> %evec
858 define <vscale x 8 x double> @vuitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) {
859 ; CHECK-LABEL: vuitofp_nxv8i8_nxv8f64:
860 ; CHECK:       # %bb.0:
861 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
862 ; CHECK-NEXT:    vzext.vf4 v16, v8
863 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v16
864 ; CHECK-NEXT:    ret
865   %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x double>
866   ret <vscale x 8 x double> %evec
869 define <vscale x 16 x half> @vsitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) {
870 ; ZVFH-LABEL: vsitofp_nxv16i8_nxv16f16:
871 ; ZVFH:       # %bb.0:
872 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
873 ; ZVFH-NEXT:    vfwcvt.f.x.v v12, v8
874 ; ZVFH-NEXT:    vmv4r.v v8, v12
875 ; ZVFH-NEXT:    ret
877 ; ZVFHMIN-LABEL: vsitofp_nxv16i8_nxv16f16:
878 ; ZVFHMIN:       # %bb.0:
879 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
880 ; ZVFHMIN-NEXT:    vsext.vf2 v12, v8
881 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v12
882 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
883 ; ZVFHMIN-NEXT:    ret
884   %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x half>
885   ret <vscale x 16 x half> %evec
888 define <vscale x 16 x half> @vuitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) {
889 ; ZVFH-LABEL: vuitofp_nxv16i8_nxv16f16:
890 ; ZVFH:       # %bb.0:
891 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
892 ; ZVFH-NEXT:    vfwcvt.f.xu.v v12, v8
893 ; ZVFH-NEXT:    vmv4r.v v8, v12
894 ; ZVFH-NEXT:    ret
896 ; ZVFHMIN-LABEL: vuitofp_nxv16i8_nxv16f16:
897 ; ZVFHMIN:       # %bb.0:
898 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
899 ; ZVFHMIN-NEXT:    vzext.vf2 v12, v8
900 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v12
901 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
902 ; ZVFHMIN-NEXT:    ret
903   %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x half>
904   ret <vscale x 16 x half> %evec
907 define <vscale x 16 x float> @vsitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) {
908 ; CHECK-LABEL: vsitofp_nxv16i8_nxv16f32:
909 ; CHECK:       # %bb.0:
910 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
911 ; CHECK-NEXT:    vsext.vf2 v16, v8
912 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v16
913 ; CHECK-NEXT:    ret
914   %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x float>
915   ret <vscale x 16 x float> %evec
918 define <vscale x 16 x float> @vuitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) {
919 ; CHECK-LABEL: vuitofp_nxv16i8_nxv16f32:
920 ; CHECK:       # %bb.0:
921 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
922 ; CHECK-NEXT:    vzext.vf2 v16, v8
923 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v16
924 ; CHECK-NEXT:    ret
925   %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x float>
926   ret <vscale x 16 x float> %evec
929 define <vscale x 32 x half> @vsitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) {
930 ; ZVFH-LABEL: vsitofp_nxv32i8_nxv32f16:
931 ; ZVFH:       # %bb.0:
932 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
933 ; ZVFH-NEXT:    vfwcvt.f.x.v v16, v8
934 ; ZVFH-NEXT:    vmv8r.v v8, v16
935 ; ZVFH-NEXT:    ret
937 ; ZVFHMIN-LABEL: vsitofp_nxv32i8_nxv32f16:
938 ; ZVFHMIN:       # %bb.0:
939 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
940 ; ZVFHMIN-NEXT:    vsext.vf2 v12, v8
941 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v24, v12
942 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v16, v24
943 ; ZVFHMIN-NEXT:    vsext.vf2 v12, v10
944 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v24, v12
945 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v24
946 ; ZVFHMIN-NEXT:    vmv8r.v v8, v16
947 ; ZVFHMIN-NEXT:    ret
948   %evec = sitofp <vscale x 32 x i8> %va to <vscale x 32 x half>
949   ret <vscale x 32 x half> %evec
952 define <vscale x 32 x half> @vuitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) {
953 ; ZVFH-LABEL: vuitofp_nxv32i8_nxv32f16:
954 ; ZVFH:       # %bb.0:
955 ; ZVFH-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
956 ; ZVFH-NEXT:    vfwcvt.f.xu.v v16, v8
957 ; ZVFH-NEXT:    vmv8r.v v8, v16
958 ; ZVFH-NEXT:    ret
960 ; ZVFHMIN-LABEL: vuitofp_nxv32i8_nxv32f16:
961 ; ZVFHMIN:       # %bb.0:
962 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
963 ; ZVFHMIN-NEXT:    vzext.vf2 v12, v8
964 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v24, v12
965 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v16, v24
966 ; ZVFHMIN-NEXT:    vzext.vf2 v12, v10
967 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v24, v12
968 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v24
969 ; ZVFHMIN-NEXT:    vmv8r.v v8, v16
970 ; ZVFHMIN-NEXT:    ret
971   %evec = uitofp <vscale x 32 x i8> %va to <vscale x 32 x half>
972   ret <vscale x 32 x half> %evec
975 define <vscale x 1 x half> @vsitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) {
976 ; ZVFH-LABEL: vsitofp_nxv1i16_nxv1f16:
977 ; ZVFH:       # %bb.0:
978 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
979 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
980 ; ZVFH-NEXT:    ret
982 ; ZVFHMIN-LABEL: vsitofp_nxv1i16_nxv1f16:
983 ; ZVFHMIN:       # %bb.0:
984 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
985 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8
986 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
987 ; ZVFHMIN-NEXT:    ret
988   %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x half>
989   ret <vscale x 1 x half> %evec
992 define <vscale x 1 x half> @vuitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) {
993 ; ZVFH-LABEL: vuitofp_nxv1i16_nxv1f16:
994 ; ZVFH:       # %bb.0:
995 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
996 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
997 ; ZVFH-NEXT:    ret
999 ; ZVFHMIN-LABEL: vuitofp_nxv1i16_nxv1f16:
1000 ; ZVFHMIN:       # %bb.0:
1001 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1002 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8
1003 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1004 ; ZVFHMIN-NEXT:    ret
1005   %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x half>
1006   ret <vscale x 1 x half> %evec
1009 define <vscale x 1 x float> @vsitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) {
1010 ; CHECK-LABEL: vsitofp_nxv1i16_nxv1f32:
1011 ; CHECK:       # %bb.0:
1012 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1013 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
1014 ; CHECK-NEXT:    vmv1r.v v8, v9
1015 ; CHECK-NEXT:    ret
1016   %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x float>
1017   ret <vscale x 1 x float> %evec
1020 define <vscale x 1 x float> @vuitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) {
1021 ; CHECK-LABEL: vuitofp_nxv1i16_nxv1f32:
1022 ; CHECK:       # %bb.0:
1023 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1024 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
1025 ; CHECK-NEXT:    vmv1r.v v8, v9
1026 ; CHECK-NEXT:    ret
1027   %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x float>
1028   ret <vscale x 1 x float> %evec
1031 define <vscale x 1 x double> @vsitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) {
1032 ; CHECK-LABEL: vsitofp_nxv1i16_nxv1f64:
1033 ; CHECK:       # %bb.0:
1034 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1035 ; CHECK-NEXT:    vsext.vf2 v9, v8
1036 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
1037 ; CHECK-NEXT:    ret
1038   %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x double>
1039   ret <vscale x 1 x double> %evec
1042 define <vscale x 1 x double> @vuitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) {
1043 ; CHECK-LABEL: vuitofp_nxv1i16_nxv1f64:
1044 ; CHECK:       # %bb.0:
1045 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1046 ; CHECK-NEXT:    vzext.vf2 v9, v8
1047 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
1048 ; CHECK-NEXT:    ret
1049   %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x double>
1050   ret <vscale x 1 x double> %evec
1053 define <vscale x 2 x half> @vsitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) {
1054 ; ZVFH-LABEL: vsitofp_nxv2i16_nxv2f16:
1055 ; ZVFH:       # %bb.0:
1056 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1057 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
1058 ; ZVFH-NEXT:    ret
1060 ; ZVFHMIN-LABEL: vsitofp_nxv2i16_nxv2f16:
1061 ; ZVFHMIN:       # %bb.0:
1062 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1063 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8
1064 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1065 ; ZVFHMIN-NEXT:    ret
1066   %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x half>
1067   ret <vscale x 2 x half> %evec
1070 define <vscale x 2 x half> @vuitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) {
1071 ; ZVFH-LABEL: vuitofp_nxv2i16_nxv2f16:
1072 ; ZVFH:       # %bb.0:
1073 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1074 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
1075 ; ZVFH-NEXT:    ret
1077 ; ZVFHMIN-LABEL: vuitofp_nxv2i16_nxv2f16:
1078 ; ZVFHMIN:       # %bb.0:
1079 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1080 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8
1081 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1082 ; ZVFHMIN-NEXT:    ret
1083   %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x half>
1084   ret <vscale x 2 x half> %evec
1087 define <vscale x 2 x float> @vsitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) {
1088 ; CHECK-LABEL: vsitofp_nxv2i16_nxv2f32:
1089 ; CHECK:       # %bb.0:
1090 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1091 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
1092 ; CHECK-NEXT:    vmv1r.v v8, v9
1093 ; CHECK-NEXT:    ret
1094   %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x float>
1095   ret <vscale x 2 x float> %evec
1098 define <vscale x 2 x float> @vuitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) {
1099 ; CHECK-LABEL: vuitofp_nxv2i16_nxv2f32:
1100 ; CHECK:       # %bb.0:
1101 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1102 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
1103 ; CHECK-NEXT:    vmv1r.v v8, v9
1104 ; CHECK-NEXT:    ret
1105   %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x float>
1106   ret <vscale x 2 x float> %evec
1109 define <vscale x 2 x double> @vsitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) {
1110 ; CHECK-LABEL: vsitofp_nxv2i16_nxv2f64:
1111 ; CHECK:       # %bb.0:
1112 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1113 ; CHECK-NEXT:    vsext.vf2 v10, v8
1114 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
1115 ; CHECK-NEXT:    ret
1116   %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x double>
1117   ret <vscale x 2 x double> %evec
1120 define <vscale x 2 x double> @vuitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) {
1121 ; CHECK-LABEL: vuitofp_nxv2i16_nxv2f64:
1122 ; CHECK:       # %bb.0:
1123 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1124 ; CHECK-NEXT:    vzext.vf2 v10, v8
1125 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
1126 ; CHECK-NEXT:    ret
1127   %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x double>
1128   ret <vscale x 2 x double> %evec
1131 define <vscale x 4 x half> @vsitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) {
1132 ; ZVFH-LABEL: vsitofp_nxv4i16_nxv4f16:
1133 ; ZVFH:       # %bb.0:
1134 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1135 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
1136 ; ZVFH-NEXT:    ret
1138 ; ZVFHMIN-LABEL: vsitofp_nxv4i16_nxv4f16:
1139 ; ZVFHMIN:       # %bb.0:
1140 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1141 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v8
1142 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1143 ; ZVFHMIN-NEXT:    ret
1144   %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x half>
1145   ret <vscale x 4 x half> %evec
1148 define <vscale x 4 x half> @vuitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) {
1149 ; ZVFH-LABEL: vuitofp_nxv4i16_nxv4f16:
1150 ; ZVFH:       # %bb.0:
1151 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1152 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
1153 ; ZVFH-NEXT:    ret
1155 ; ZVFHMIN-LABEL: vuitofp_nxv4i16_nxv4f16:
1156 ; ZVFHMIN:       # %bb.0:
1157 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1158 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v8
1159 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1160 ; ZVFHMIN-NEXT:    ret
1161   %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x half>
1162   ret <vscale x 4 x half> %evec
1165 define <vscale x 4 x float> @vsitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) {
1166 ; CHECK-LABEL: vsitofp_nxv4i16_nxv4f32:
1167 ; CHECK:       # %bb.0:
1168 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1169 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
1170 ; CHECK-NEXT:    vmv2r.v v8, v10
1171 ; CHECK-NEXT:    ret
1172   %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x float>
1173   ret <vscale x 4 x float> %evec
1176 define <vscale x 4 x float> @vuitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) {
1177 ; CHECK-LABEL: vuitofp_nxv4i16_nxv4f32:
1178 ; CHECK:       # %bb.0:
1179 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1180 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8
1181 ; CHECK-NEXT:    vmv2r.v v8, v10
1182 ; CHECK-NEXT:    ret
1183   %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x float>
1184   ret <vscale x 4 x float> %evec
1187 define <vscale x 4 x double> @vsitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) {
1188 ; CHECK-LABEL: vsitofp_nxv4i16_nxv4f64:
1189 ; CHECK:       # %bb.0:
1190 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1191 ; CHECK-NEXT:    vsext.vf2 v12, v8
1192 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v12
1193 ; CHECK-NEXT:    ret
1194   %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x double>
1195   ret <vscale x 4 x double> %evec
1198 define <vscale x 4 x double> @vuitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) {
1199 ; CHECK-LABEL: vuitofp_nxv4i16_nxv4f64:
1200 ; CHECK:       # %bb.0:
1201 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1202 ; CHECK-NEXT:    vzext.vf2 v12, v8
1203 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12
1204 ; CHECK-NEXT:    ret
1205   %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x double>
1206   ret <vscale x 4 x double> %evec
1209 define <vscale x 8 x half> @vsitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) {
1210 ; ZVFH-LABEL: vsitofp_nxv8i16_nxv8f16:
1211 ; ZVFH:       # %bb.0:
1212 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1213 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
1214 ; ZVFH-NEXT:    ret
1216 ; ZVFHMIN-LABEL: vsitofp_nxv8i16_nxv8f16:
1217 ; ZVFHMIN:       # %bb.0:
1218 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1219 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v12, v8
1220 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1221 ; ZVFHMIN-NEXT:    ret
1222   %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x half>
1223   ret <vscale x 8 x half> %evec
1226 define <vscale x 8 x half> @vuitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) {
1227 ; ZVFH-LABEL: vuitofp_nxv8i16_nxv8f16:
1228 ; ZVFH:       # %bb.0:
1229 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1230 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
1231 ; ZVFH-NEXT:    ret
1233 ; ZVFHMIN-LABEL: vuitofp_nxv8i16_nxv8f16:
1234 ; ZVFHMIN:       # %bb.0:
1235 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1236 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v12, v8
1237 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1238 ; ZVFHMIN-NEXT:    ret
1239   %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x half>
1240   ret <vscale x 8 x half> %evec
1243 define <vscale x 8 x float> @vsitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) {
1244 ; CHECK-LABEL: vsitofp_nxv8i16_nxv8f32:
1245 ; CHECK:       # %bb.0:
1246 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1247 ; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
1248 ; CHECK-NEXT:    vmv4r.v v8, v12
1249 ; CHECK-NEXT:    ret
1250   %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x float>
1251   ret <vscale x 8 x float> %evec
1254 define <vscale x 8 x float> @vuitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) {
1255 ; CHECK-LABEL: vuitofp_nxv8i16_nxv8f32:
1256 ; CHECK:       # %bb.0:
1257 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1258 ; CHECK-NEXT:    vfwcvt.f.xu.v v12, v8
1259 ; CHECK-NEXT:    vmv4r.v v8, v12
1260 ; CHECK-NEXT:    ret
1261   %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x float>
1262   ret <vscale x 8 x float> %evec
1265 define <vscale x 8 x double> @vsitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) {
1266 ; CHECK-LABEL: vsitofp_nxv8i16_nxv8f64:
1267 ; CHECK:       # %bb.0:
1268 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1269 ; CHECK-NEXT:    vsext.vf2 v16, v8
1270 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v16
1271 ; CHECK-NEXT:    ret
1272   %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x double>
1273   ret <vscale x 8 x double> %evec
1276 define <vscale x 8 x double> @vuitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) {
1277 ; CHECK-LABEL: vuitofp_nxv8i16_nxv8f64:
1278 ; CHECK:       # %bb.0:
1279 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1280 ; CHECK-NEXT:    vzext.vf2 v16, v8
1281 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v16
1282 ; CHECK-NEXT:    ret
1283   %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x double>
1284   ret <vscale x 8 x double> %evec
1287 define <vscale x 16 x half> @vsitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) {
1288 ; ZVFH-LABEL: vsitofp_nxv16i16_nxv16f16:
1289 ; ZVFH:       # %bb.0:
1290 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1291 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
1292 ; ZVFH-NEXT:    ret
1294 ; ZVFHMIN-LABEL: vsitofp_nxv16i16_nxv16f16:
1295 ; ZVFHMIN:       # %bb.0:
1296 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1297 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v8
1298 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1299 ; ZVFHMIN-NEXT:    ret
1300   %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x half>
1301   ret <vscale x 16 x half> %evec
1304 define <vscale x 16 x half> @vuitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) {
1305 ; ZVFH-LABEL: vuitofp_nxv16i16_nxv16f16:
1306 ; ZVFH:       # %bb.0:
1307 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1308 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
1309 ; ZVFH-NEXT:    ret
1311 ; ZVFHMIN-LABEL: vuitofp_nxv16i16_nxv16f16:
1312 ; ZVFHMIN:       # %bb.0:
1313 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1314 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v8
1315 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1316 ; ZVFHMIN-NEXT:    ret
1317   %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x half>
1318   ret <vscale x 16 x half> %evec
1321 define <vscale x 16 x float> @vsitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) {
1322 ; CHECK-LABEL: vsitofp_nxv16i16_nxv16f32:
1323 ; CHECK:       # %bb.0:
1324 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1325 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
1326 ; CHECK-NEXT:    vmv8r.v v8, v16
1327 ; CHECK-NEXT:    ret
1328   %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x float>
1329   ret <vscale x 16 x float> %evec
1332 define <vscale x 16 x float> @vuitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) {
1333 ; CHECK-LABEL: vuitofp_nxv16i16_nxv16f32:
1334 ; CHECK:       # %bb.0:
1335 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1336 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
1337 ; CHECK-NEXT:    vmv8r.v v8, v16
1338 ; CHECK-NEXT:    ret
1339   %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x float>
1340   ret <vscale x 16 x float> %evec
1343 define <vscale x 32 x half> @vsitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) {
1344 ; ZVFH-LABEL: vsitofp_nxv32i16_nxv32f16:
1345 ; ZVFH:       # %bb.0:
1346 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
1347 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
1348 ; ZVFH-NEXT:    ret
1350 ; ZVFHMIN-LABEL: vsitofp_nxv32i16_nxv32f16:
1351 ; ZVFHMIN:       # %bb.0:
1352 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1353 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v8
1354 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1355 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v16, v12
1356 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
1357 ; ZVFHMIN-NEXT:    ret
1358   %evec = sitofp <vscale x 32 x i16> %va to <vscale x 32 x half>
1359   ret <vscale x 32 x half> %evec
1362 define <vscale x 32 x half> @vuitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) {
1363 ; ZVFH-LABEL: vuitofp_nxv32i16_nxv32f16:
1364 ; ZVFH:       # %bb.0:
1365 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
1366 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
1367 ; ZVFH-NEXT:    ret
1369 ; ZVFHMIN-LABEL: vuitofp_nxv32i16_nxv32f16:
1370 ; ZVFHMIN:       # %bb.0:
1371 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1372 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v8
1373 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1374 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v16, v12
1375 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
1376 ; ZVFHMIN-NEXT:    ret
1377   %evec = uitofp <vscale x 32 x i16> %va to <vscale x 32 x half>
1378   ret <vscale x 32 x half> %evec
1381 define <vscale x 1 x half> @vsitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) {
1382 ; ZVFH-LABEL: vsitofp_nxv1i32_nxv1f16:
1383 ; ZVFH:       # %bb.0:
1384 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1385 ; ZVFH-NEXT:    vfncvt.f.x.w v9, v8
1386 ; ZVFH-NEXT:    vmv1r.v v8, v9
1387 ; ZVFH-NEXT:    ret
1389 ; ZVFHMIN-LABEL: vsitofp_nxv1i32_nxv1f16:
1390 ; ZVFHMIN:       # %bb.0:
1391 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1392 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v9, v8
1393 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1394 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1395 ; ZVFHMIN-NEXT:    ret
1396   %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x half>
1397   ret <vscale x 1 x half> %evec
1400 define <vscale x 1 x half> @vuitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) {
1401 ; ZVFH-LABEL: vuitofp_nxv1i32_nxv1f16:
1402 ; ZVFH:       # %bb.0:
1403 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
1404 ; ZVFH-NEXT:    vfncvt.f.xu.w v9, v8
1405 ; ZVFH-NEXT:    vmv1r.v v8, v9
1406 ; ZVFH-NEXT:    ret
1408 ; ZVFHMIN-LABEL: vuitofp_nxv1i32_nxv1f16:
1409 ; ZVFHMIN:       # %bb.0:
1410 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1411 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v9, v8
1412 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1413 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1414 ; ZVFHMIN-NEXT:    ret
1415   %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x half>
1416   ret <vscale x 1 x half> %evec
1419 define <vscale x 1 x float> @vsitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) {
1420 ; CHECK-LABEL: vsitofp_nxv1i32_nxv1f32:
1421 ; CHECK:       # %bb.0:
1422 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1423 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1424 ; CHECK-NEXT:    ret
1425   %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x float>
1426   ret <vscale x 1 x float> %evec
1429 define <vscale x 1 x float> @vuitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) {
1430 ; CHECK-LABEL: vuitofp_nxv1i32_nxv1f32:
1431 ; CHECK:       # %bb.0:
1432 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1433 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1434 ; CHECK-NEXT:    ret
1435   %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x float>
1436   ret <vscale x 1 x float> %evec
1439 define <vscale x 1 x double> @vsitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) {
1440 ; CHECK-LABEL: vsitofp_nxv1i32_nxv1f64:
1441 ; CHECK:       # %bb.0:
1442 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1443 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
1444 ; CHECK-NEXT:    vmv1r.v v8, v9
1445 ; CHECK-NEXT:    ret
1446   %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x double>
1447   ret <vscale x 1 x double> %evec
1450 define <vscale x 1 x double> @vuitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) {
1451 ; CHECK-LABEL: vuitofp_nxv1i32_nxv1f64:
1452 ; CHECK:       # %bb.0:
1453 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1454 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
1455 ; CHECK-NEXT:    vmv1r.v v8, v9
1456 ; CHECK-NEXT:    ret
1457   %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x double>
1458   ret <vscale x 1 x double> %evec
1461 define <vscale x 2 x half> @vsitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) {
1462 ; ZVFH-LABEL: vsitofp_nxv2i32_nxv2f16:
1463 ; ZVFH:       # %bb.0:
1464 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1465 ; ZVFH-NEXT:    vfncvt.f.x.w v9, v8
1466 ; ZVFH-NEXT:    vmv1r.v v8, v9
1467 ; ZVFH-NEXT:    ret
1469 ; ZVFHMIN-LABEL: vsitofp_nxv2i32_nxv2f16:
1470 ; ZVFHMIN:       # %bb.0:
1471 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1472 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v9, v8
1473 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1474 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1475 ; ZVFHMIN-NEXT:    ret
1476   %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x half>
1477   ret <vscale x 2 x half> %evec
1480 define <vscale x 2 x half> @vuitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) {
1481 ; ZVFH-LABEL: vuitofp_nxv2i32_nxv2f16:
1482 ; ZVFH:       # %bb.0:
1483 ; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1484 ; ZVFH-NEXT:    vfncvt.f.xu.w v9, v8
1485 ; ZVFH-NEXT:    vmv1r.v v8, v9
1486 ; ZVFH-NEXT:    ret
1488 ; ZVFHMIN-LABEL: vuitofp_nxv2i32_nxv2f16:
1489 ; ZVFHMIN:       # %bb.0:
1490 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1491 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v9, v8
1492 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1493 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
1494 ; ZVFHMIN-NEXT:    ret
1495   %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x half>
1496   ret <vscale x 2 x half> %evec
1499 define <vscale x 2 x float> @vsitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) {
1500 ; CHECK-LABEL: vsitofp_nxv2i32_nxv2f32:
1501 ; CHECK:       # %bb.0:
1502 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1503 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1504 ; CHECK-NEXT:    ret
1505   %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x float>
1506   ret <vscale x 2 x float> %evec
1509 define <vscale x 2 x float> @vuitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) {
1510 ; CHECK-LABEL: vuitofp_nxv2i32_nxv2f32:
1511 ; CHECK:       # %bb.0:
1512 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1513 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1514 ; CHECK-NEXT:    ret
1515   %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x float>
1516   ret <vscale x 2 x float> %evec
1519 define <vscale x 2 x double> @vsitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) {
1520 ; CHECK-LABEL: vsitofp_nxv2i32_nxv2f64:
1521 ; CHECK:       # %bb.0:
1522 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1523 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
1524 ; CHECK-NEXT:    vmv2r.v v8, v10
1525 ; CHECK-NEXT:    ret
1526   %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x double>
1527   ret <vscale x 2 x double> %evec
1530 define <vscale x 2 x double> @vuitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) {
1531 ; CHECK-LABEL: vuitofp_nxv2i32_nxv2f64:
1532 ; CHECK:       # %bb.0:
1533 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1534 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8
1535 ; CHECK-NEXT:    vmv2r.v v8, v10
1536 ; CHECK-NEXT:    ret
1537   %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x double>
1538   ret <vscale x 2 x double> %evec
1541 define <vscale x 4 x half> @vsitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) {
1542 ; ZVFH-LABEL: vsitofp_nxv4i32_nxv4f16:
1543 ; ZVFH:       # %bb.0:
1544 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1545 ; ZVFH-NEXT:    vfncvt.f.x.w v10, v8
1546 ; ZVFH-NEXT:    vmv.v.v v8, v10
1547 ; ZVFH-NEXT:    ret
1549 ; ZVFHMIN-LABEL: vsitofp_nxv4i32_nxv4f16:
1550 ; ZVFHMIN:       # %bb.0:
1551 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1552 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v10, v8
1553 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1554 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1555 ; ZVFHMIN-NEXT:    ret
1556   %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x half>
1557   ret <vscale x 4 x half> %evec
1560 define <vscale x 4 x half> @vuitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) {
1561 ; ZVFH-LABEL: vuitofp_nxv4i32_nxv4f16:
1562 ; ZVFH:       # %bb.0:
1563 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1564 ; ZVFH-NEXT:    vfncvt.f.xu.w v10, v8
1565 ; ZVFH-NEXT:    vmv.v.v v8, v10
1566 ; ZVFH-NEXT:    ret
1568 ; ZVFHMIN-LABEL: vuitofp_nxv4i32_nxv4f16:
1569 ; ZVFHMIN:       # %bb.0:
1570 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1571 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v10, v8
1572 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1573 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
1574 ; ZVFHMIN-NEXT:    ret
1575   %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x half>
1576   ret <vscale x 4 x half> %evec
1579 define <vscale x 4 x float> @vsitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) {
1580 ; CHECK-LABEL: vsitofp_nxv4i32_nxv4f32:
1581 ; CHECK:       # %bb.0:
1582 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1583 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1584 ; CHECK-NEXT:    ret
1585   %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x float>
1586   ret <vscale x 4 x float> %evec
1589 define <vscale x 4 x float> @vuitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) {
1590 ; CHECK-LABEL: vuitofp_nxv4i32_nxv4f32:
1591 ; CHECK:       # %bb.0:
1592 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1593 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1594 ; CHECK-NEXT:    ret
1595   %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x float>
1596   ret <vscale x 4 x float> %evec
1599 define <vscale x 4 x double> @vsitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) {
1600 ; CHECK-LABEL: vsitofp_nxv4i32_nxv4f64:
1601 ; CHECK:       # %bb.0:
1602 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1603 ; CHECK-NEXT:    vfwcvt.f.x.v v12, v8
1604 ; CHECK-NEXT:    vmv4r.v v8, v12
1605 ; CHECK-NEXT:    ret
1606   %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x double>
1607   ret <vscale x 4 x double> %evec
1610 define <vscale x 4 x double> @vuitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) {
1611 ; CHECK-LABEL: vuitofp_nxv4i32_nxv4f64:
1612 ; CHECK:       # %bb.0:
1613 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1614 ; CHECK-NEXT:    vfwcvt.f.xu.v v12, v8
1615 ; CHECK-NEXT:    vmv4r.v v8, v12
1616 ; CHECK-NEXT:    ret
1617   %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x double>
1618   ret <vscale x 4 x double> %evec
1621 define <vscale x 8 x half> @vsitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) {
1622 ; ZVFH-LABEL: vsitofp_nxv8i32_nxv8f16:
1623 ; ZVFH:       # %bb.0:
1624 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1625 ; ZVFH-NEXT:    vfncvt.f.x.w v12, v8
1626 ; ZVFH-NEXT:    vmv.v.v v8, v12
1627 ; ZVFH-NEXT:    ret
1629 ; ZVFHMIN-LABEL: vsitofp_nxv8i32_nxv8f16:
1630 ; ZVFHMIN:       # %bb.0:
1631 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1632 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v12, v8
1633 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1634 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1635 ; ZVFHMIN-NEXT:    ret
1636   %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x half>
1637   ret <vscale x 8 x half> %evec
1640 define <vscale x 8 x half> @vuitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) {
1641 ; ZVFH-LABEL: vuitofp_nxv8i32_nxv8f16:
1642 ; ZVFH:       # %bb.0:
1643 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1644 ; ZVFH-NEXT:    vfncvt.f.xu.w v12, v8
1645 ; ZVFH-NEXT:    vmv.v.v v8, v12
1646 ; ZVFH-NEXT:    ret
1648 ; ZVFHMIN-LABEL: vuitofp_nxv8i32_nxv8f16:
1649 ; ZVFHMIN:       # %bb.0:
1650 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1651 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v12, v8
1652 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1653 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1654 ; ZVFHMIN-NEXT:    ret
1655   %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x half>
1656   ret <vscale x 8 x half> %evec
1659 define <vscale x 8 x float> @vsitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) {
1660 ; CHECK-LABEL: vsitofp_nxv8i32_nxv8f32:
1661 ; CHECK:       # %bb.0:
1662 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1663 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1664 ; CHECK-NEXT:    ret
1665   %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x float>
1666   ret <vscale x 8 x float> %evec
1669 define <vscale x 8 x float> @vuitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) {
1670 ; CHECK-LABEL: vuitofp_nxv8i32_nxv8f32:
1671 ; CHECK:       # %bb.0:
1672 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1673 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1674 ; CHECK-NEXT:    ret
1675   %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x float>
1676   ret <vscale x 8 x float> %evec
1679 define <vscale x 8 x double> @vsitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) {
1680 ; CHECK-LABEL: vsitofp_nxv8i32_nxv8f64:
1681 ; CHECK:       # %bb.0:
1682 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1683 ; CHECK-NEXT:    vfwcvt.f.x.v v16, v8
1684 ; CHECK-NEXT:    vmv8r.v v8, v16
1685 ; CHECK-NEXT:    ret
1686   %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x double>
1687   ret <vscale x 8 x double> %evec
1690 define <vscale x 8 x double> @vuitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) {
1691 ; CHECK-LABEL: vuitofp_nxv8i32_nxv8f64:
1692 ; CHECK:       # %bb.0:
1693 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1694 ; CHECK-NEXT:    vfwcvt.f.xu.v v16, v8
1695 ; CHECK-NEXT:    vmv8r.v v8, v16
1696 ; CHECK-NEXT:    ret
1697   %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x double>
1698   ret <vscale x 8 x double> %evec
1701 define <vscale x 16 x half> @vsitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) {
1702 ; ZVFH-LABEL: vsitofp_nxv16i32_nxv16f16:
1703 ; ZVFH:       # %bb.0:
1704 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1705 ; ZVFH-NEXT:    vfncvt.f.x.w v16, v8
1706 ; ZVFH-NEXT:    vmv.v.v v8, v16
1707 ; ZVFH-NEXT:    ret
1709 ; ZVFHMIN-LABEL: vsitofp_nxv16i32_nxv16f16:
1710 ; ZVFHMIN:       # %bb.0:
1711 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
1712 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v16, v8
1713 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1714 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1715 ; ZVFHMIN-NEXT:    ret
1716   %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x half>
1717   ret <vscale x 16 x half> %evec
1720 define <vscale x 16 x half> @vuitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) {
1721 ; ZVFH-LABEL: vuitofp_nxv16i32_nxv16f16:
1722 ; ZVFH:       # %bb.0:
1723 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
1724 ; ZVFH-NEXT:    vfncvt.f.xu.w v16, v8
1725 ; ZVFH-NEXT:    vmv.v.v v8, v16
1726 ; ZVFH-NEXT:    ret
1728 ; ZVFHMIN-LABEL: vuitofp_nxv16i32_nxv16f16:
1729 ; ZVFHMIN:       # %bb.0:
1730 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
1731 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v16, v8
1732 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1733 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1734 ; ZVFHMIN-NEXT:    ret
1735   %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x half>
1736   ret <vscale x 16 x half> %evec
1739 define <vscale x 16 x float> @vsitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) {
1740 ; CHECK-LABEL: vsitofp_nxv16i32_nxv16f32:
1741 ; CHECK:       # %bb.0:
1742 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
1743 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1744 ; CHECK-NEXT:    ret
1745   %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x float>
1746   ret <vscale x 16 x float> %evec
1749 define <vscale x 16 x float> @vuitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) {
1750 ; CHECK-LABEL: vuitofp_nxv16i32_nxv16f32:
1751 ; CHECK:       # %bb.0:
1752 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
1753 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1754 ; CHECK-NEXT:    ret
1755   %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x float>
1756   ret <vscale x 16 x float> %evec
1759 define <vscale x 1 x half> @vsitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) {
1760 ; CHECK-LABEL: vsitofp_nxv1i64_nxv1f16:
1761 ; CHECK:       # %bb.0:
1762 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1763 ; CHECK-NEXT:    vfncvt.f.x.w v9, v8
1764 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1765 ; CHECK-NEXT:    vfncvt.f.f.w v8, v9
1766 ; CHECK-NEXT:    ret
1767   %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x half>
1768   ret <vscale x 1 x half> %evec
1771 define <vscale x 1 x half> @vuitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) {
1772 ; CHECK-LABEL: vuitofp_nxv1i64_nxv1f16:
1773 ; CHECK:       # %bb.0:
1774 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1775 ; CHECK-NEXT:    vfncvt.f.xu.w v9, v8
1776 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1777 ; CHECK-NEXT:    vfncvt.f.f.w v8, v9
1778 ; CHECK-NEXT:    ret
1779   %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x half>
1780   ret <vscale x 1 x half> %evec
1783 define <vscale x 1 x float> @vsitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) {
1784 ; CHECK-LABEL: vsitofp_nxv1i64_nxv1f32:
1785 ; CHECK:       # %bb.0:
1786 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1787 ; CHECK-NEXT:    vfncvt.f.x.w v9, v8
1788 ; CHECK-NEXT:    vmv1r.v v8, v9
1789 ; CHECK-NEXT:    ret
1790   %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x float>
1791   ret <vscale x 1 x float> %evec
1794 define <vscale x 1 x float> @vuitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) {
1795 ; CHECK-LABEL: vuitofp_nxv1i64_nxv1f32:
1796 ; CHECK:       # %bb.0:
1797 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
1798 ; CHECK-NEXT:    vfncvt.f.xu.w v9, v8
1799 ; CHECK-NEXT:    vmv1r.v v8, v9
1800 ; CHECK-NEXT:    ret
1801   %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x float>
1802   ret <vscale x 1 x float> %evec
1805 define <vscale x 1 x double> @vsitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) {
1806 ; CHECK-LABEL: vsitofp_nxv1i64_nxv1f64:
1807 ; CHECK:       # %bb.0:
1808 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
1809 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1810 ; CHECK-NEXT:    ret
1811   %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x double>
1812   ret <vscale x 1 x double> %evec
1815 define <vscale x 1 x double> @vuitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) {
1816 ; CHECK-LABEL: vuitofp_nxv1i64_nxv1f64:
1817 ; CHECK:       # %bb.0:
1818 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
1819 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1820 ; CHECK-NEXT:    ret
1821   %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x double>
1822   ret <vscale x 1 x double> %evec
1825 define <vscale x 2 x half> @vsitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) {
1826 ; CHECK-LABEL: vsitofp_nxv2i64_nxv2f16:
1827 ; CHECK:       # %bb.0:
1828 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1829 ; CHECK-NEXT:    vfncvt.f.x.w v10, v8
1830 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1831 ; CHECK-NEXT:    vfncvt.f.f.w v8, v10
1832 ; CHECK-NEXT:    ret
1833   %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x half>
1834   ret <vscale x 2 x half> %evec
1837 define <vscale x 2 x half> @vuitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) {
1838 ; CHECK-LABEL: vuitofp_nxv2i64_nxv2f16:
1839 ; CHECK:       # %bb.0:
1840 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1841 ; CHECK-NEXT:    vfncvt.f.xu.w v10, v8
1842 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1843 ; CHECK-NEXT:    vfncvt.f.f.w v8, v10
1844 ; CHECK-NEXT:    ret
1845   %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x half>
1846   ret <vscale x 2 x half> %evec
1849 define <vscale x 2 x float> @vsitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) {
1850 ; CHECK-LABEL: vsitofp_nxv2i64_nxv2f32:
1851 ; CHECK:       # %bb.0:
1852 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1853 ; CHECK-NEXT:    vfncvt.f.x.w v10, v8
1854 ; CHECK-NEXT:    vmv.v.v v8, v10
1855 ; CHECK-NEXT:    ret
1856   %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x float>
1857   ret <vscale x 2 x float> %evec
1860 define <vscale x 2 x float> @vuitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) {
1861 ; CHECK-LABEL: vuitofp_nxv2i64_nxv2f32:
1862 ; CHECK:       # %bb.0:
1863 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
1864 ; CHECK-NEXT:    vfncvt.f.xu.w v10, v8
1865 ; CHECK-NEXT:    vmv.v.v v8, v10
1866 ; CHECK-NEXT:    ret
1867   %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x float>
1868   ret <vscale x 2 x float> %evec
1871 define <vscale x 2 x double> @vsitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) {
1872 ; CHECK-LABEL: vsitofp_nxv2i64_nxv2f64:
1873 ; CHECK:       # %bb.0:
1874 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
1875 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1876 ; CHECK-NEXT:    ret
1877   %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x double>
1878   ret <vscale x 2 x double> %evec
1881 define <vscale x 2 x double> @vuitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) {
1882 ; CHECK-LABEL: vuitofp_nxv2i64_nxv2f64:
1883 ; CHECK:       # %bb.0:
1884 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
1885 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1886 ; CHECK-NEXT:    ret
1887   %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x double>
1888   ret <vscale x 2 x double> %evec
1891 define <vscale x 4 x half> @vsitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) {
1892 ; CHECK-LABEL: vsitofp_nxv4i64_nxv4f16:
1893 ; CHECK:       # %bb.0:
1894 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1895 ; CHECK-NEXT:    vfncvt.f.x.w v12, v8
1896 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1897 ; CHECK-NEXT:    vfncvt.f.f.w v8, v12
1898 ; CHECK-NEXT:    ret
1899   %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x half>
1900   ret <vscale x 4 x half> %evec
1903 define <vscale x 4 x half> @vuitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) {
1904 ; CHECK-LABEL: vuitofp_nxv4i64_nxv4f16:
1905 ; CHECK:       # %bb.0:
1906 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1907 ; CHECK-NEXT:    vfncvt.f.xu.w v12, v8
1908 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1909 ; CHECK-NEXT:    vfncvt.f.f.w v8, v12
1910 ; CHECK-NEXT:    ret
1911   %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x half>
1912   ret <vscale x 4 x half> %evec
1915 define <vscale x 4 x float> @vsitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) {
1916 ; CHECK-LABEL: vsitofp_nxv4i64_nxv4f32:
1917 ; CHECK:       # %bb.0:
1918 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1919 ; CHECK-NEXT:    vfncvt.f.x.w v12, v8
1920 ; CHECK-NEXT:    vmv.v.v v8, v12
1921 ; CHECK-NEXT:    ret
1922   %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x float>
1923   ret <vscale x 4 x float> %evec
1926 define <vscale x 4 x float> @vuitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) {
1927 ; CHECK-LABEL: vuitofp_nxv4i64_nxv4f32:
1928 ; CHECK:       # %bb.0:
1929 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
1930 ; CHECK-NEXT:    vfncvt.f.xu.w v12, v8
1931 ; CHECK-NEXT:    vmv.v.v v8, v12
1932 ; CHECK-NEXT:    ret
1933   %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x float>
1934   ret <vscale x 4 x float> %evec
1937 define <vscale x 4 x double> @vsitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) {
1938 ; CHECK-LABEL: vsitofp_nxv4i64_nxv4f64:
1939 ; CHECK:       # %bb.0:
1940 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
1941 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
1942 ; CHECK-NEXT:    ret
1943   %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x double>
1944   ret <vscale x 4 x double> %evec
1947 define <vscale x 4 x double> @vuitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) {
1948 ; CHECK-LABEL: vuitofp_nxv4i64_nxv4f64:
1949 ; CHECK:       # %bb.0:
1950 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
1951 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
1952 ; CHECK-NEXT:    ret
1953   %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x double>
1954   ret <vscale x 4 x double> %evec
1957 define <vscale x 8 x half> @vsitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) {
1958 ; CHECK-LABEL: vsitofp_nxv8i64_nxv8f16:
1959 ; CHECK:       # %bb.0:
1960 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1961 ; CHECK-NEXT:    vfncvt.f.x.w v16, v8
1962 ; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1963 ; CHECK-NEXT:    vfncvt.f.f.w v8, v16
1964 ; CHECK-NEXT:    ret
1965   %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x half>
1966   ret <vscale x 8 x half> %evec
1969 define <vscale x 8 x half> @vuitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) {
1970 ; CHECK-LABEL: vuitofp_nxv8i64_nxv8f16:
1971 ; CHECK:       # %bb.0:
1972 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1973 ; CHECK-NEXT:    vfncvt.f.xu.w v16, v8
1974 ; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1975 ; CHECK-NEXT:    vfncvt.f.f.w v8, v16
1976 ; CHECK-NEXT:    ret
1977   %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x half>
1978   ret <vscale x 8 x half> %evec
1981 define <vscale x 8 x float> @vsitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) {
1982 ; CHECK-LABEL: vsitofp_nxv8i64_nxv8f32:
1983 ; CHECK:       # %bb.0:
1984 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1985 ; CHECK-NEXT:    vfncvt.f.x.w v16, v8
1986 ; CHECK-NEXT:    vmv.v.v v8, v16
1987 ; CHECK-NEXT:    ret
1988   %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x float>
1989   ret <vscale x 8 x float> %evec
1992 define <vscale x 8 x float> @vuitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) {
1993 ; CHECK-LABEL: vuitofp_nxv8i64_nxv8f32:
1994 ; CHECK:       # %bb.0:
1995 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1996 ; CHECK-NEXT:    vfncvt.f.xu.w v16, v8
1997 ; CHECK-NEXT:    vmv.v.v v8, v16
1998 ; CHECK-NEXT:    ret
1999   %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x float>
2000   ret <vscale x 8 x float> %evec
2003 define <vscale x 8 x double> @vsitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) {
2004 ; CHECK-LABEL: vsitofp_nxv8i64_nxv8f64:
2005 ; CHECK:       # %bb.0:
2006 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2007 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
2008 ; CHECK-NEXT:    ret
2009   %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x double>
2010   ret <vscale x 8 x double> %evec
2013 define <vscale x 8 x double> @vuitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) {
2014 ; CHECK-LABEL: vuitofp_nxv8i64_nxv8f64:
2015 ; CHECK:       # %bb.0:
2016 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2017 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
2018 ; CHECK-NEXT:    ret
2019   %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x double>
2020   ret <vscale x 8 x double> %evec