1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+zvfbfmin,+v \
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 i1> @vfptosi_nxv1bf16_nxv1i1(<vscale x 1 x bfloat> %va) {
16 ; CHECK-LABEL: vfptosi_nxv1bf16_nxv1i1:
18 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
19 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
20 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v9
21 ; CHECK-NEXT: vand.vi v8, v8, 1
22 ; CHECK-NEXT: vmsne.vi v0, v8, 0
24 %evec = fptosi <vscale x 1 x bfloat> %va to <vscale x 1 x i1>
25 ret <vscale x 1 x i1> %evec
28 define <vscale x 1 x i7> @vfptosi_nxv1bf16_nxv1i7(<vscale x 1 x bfloat> %va) {
29 ; CHECK-LABEL: vfptosi_nxv1bf16_nxv1i7:
31 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
32 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
33 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v9
34 ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
35 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
37 %evec = fptosi <vscale x 1 x bfloat> %va to <vscale x 1 x i7>
38 ret <vscale x 1 x i7> %evec
41 define <vscale x 1 x i7> @vfptoui_nxv1bf16_nxv1i7(<vscale x 1 x bfloat> %va) {
42 ; CHECK-LABEL: vfptoui_nxv1bf16_nxv1i7:
44 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
45 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
46 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v9
47 ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
48 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
50 %evec = fptoui <vscale x 1 x bfloat> %va to <vscale x 1 x i7>
51 ret <vscale x 1 x i7> %evec
54 define <vscale x 1 x i1> @vfptoui_nxv1bf16_nxv1i1(<vscale x 1 x bfloat> %va) {
55 ; CHECK-LABEL: vfptoui_nxv1bf16_nxv1i1:
57 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
58 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
59 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v9
60 ; CHECK-NEXT: vand.vi v8, v8, 1
61 ; CHECK-NEXT: vmsne.vi v0, v8, 0
63 %evec = fptoui <vscale x 1 x bfloat> %va to <vscale x 1 x i1>
64 ret <vscale x 1 x i1> %evec
67 define <vscale x 1 x i8> @vfptosi_nxv1bf16_nxv1i8(<vscale x 1 x bfloat> %va) {
68 ; CHECK-LABEL: vfptosi_nxv1bf16_nxv1i8:
70 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
71 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
72 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v9
73 ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
74 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
76 %evec = fptosi <vscale x 1 x bfloat> %va to <vscale x 1 x i8>
77 ret <vscale x 1 x i8> %evec
80 define <vscale x 1 x i8> @vfptoui_nxv1bf16_nxv1i8(<vscale x 1 x bfloat> %va) {
81 ; CHECK-LABEL: vfptoui_nxv1bf16_nxv1i8:
83 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
84 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
85 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v9
86 ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
87 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
89 %evec = fptoui <vscale x 1 x bfloat> %va to <vscale x 1 x i8>
90 ret <vscale x 1 x i8> %evec
93 define <vscale x 1 x i16> @vfptosi_nxv1bf16_nxv1i16(<vscale x 1 x bfloat> %va) {
94 ; CHECK-LABEL: vfptosi_nxv1bf16_nxv1i16:
96 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
97 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
98 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v9
100 %evec = fptosi <vscale x 1 x bfloat> %va to <vscale x 1 x i16>
101 ret <vscale x 1 x i16> %evec
104 define <vscale x 1 x i16> @vfptoui_nxv1bf16_nxv1i16(<vscale x 1 x bfloat> %va) {
105 ; CHECK-LABEL: vfptoui_nxv1bf16_nxv1i16:
107 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
108 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
109 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v9
111 %evec = fptoui <vscale x 1 x bfloat> %va to <vscale x 1 x i16>
112 ret <vscale x 1 x i16> %evec
115 define <vscale x 1 x i32> @vfptosi_nxv1bf16_nxv1i32(<vscale x 1 x bfloat> %va) {
116 ; CHECK-LABEL: vfptosi_nxv1bf16_nxv1i32:
118 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
119 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
120 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
121 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v9
123 %evec = fptosi <vscale x 1 x bfloat> %va to <vscale x 1 x i32>
124 ret <vscale x 1 x i32> %evec
127 define <vscale x 1 x i32> @vfptoui_nxv1bf16_nxv1i32(<vscale x 1 x bfloat> %va) {
128 ; CHECK-LABEL: vfptoui_nxv1bf16_nxv1i32:
130 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
131 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
132 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
133 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v9
135 %evec = fptoui <vscale x 1 x bfloat> %va to <vscale x 1 x i32>
136 ret <vscale x 1 x i32> %evec
139 define <vscale x 1 x i64> @vfptosi_nxv1bf16_nxv1i64(<vscale x 1 x bfloat> %va) {
140 ; CHECK-LABEL: vfptosi_nxv1bf16_nxv1i64:
142 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
143 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
144 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
145 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v9
147 %evec = fptosi <vscale x 1 x bfloat> %va to <vscale x 1 x i64>
148 ret <vscale x 1 x i64> %evec
151 define <vscale x 1 x i64> @vfptoui_nxv1bf16_nxv1i64(<vscale x 1 x bfloat> %va) {
152 ; CHECK-LABEL: vfptoui_nxv1bf16_nxv1i64:
154 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
155 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
156 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
157 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v9
159 %evec = fptoui <vscale x 1 x bfloat> %va to <vscale x 1 x i64>
160 ret <vscale x 1 x i64> %evec
163 define <vscale x 2 x i1> @vfptosi_nxv2bf16_nxv2i1(<vscale x 2 x bfloat> %va) {
164 ; CHECK-LABEL: vfptosi_nxv2bf16_nxv2i1:
166 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
167 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
168 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v9
169 ; CHECK-NEXT: vand.vi v8, v8, 1
170 ; CHECK-NEXT: vmsne.vi v0, v8, 0
172 %evec = fptosi <vscale x 2 x bfloat> %va to <vscale x 2 x i1>
173 ret <vscale x 2 x i1> %evec
176 define <vscale x 2 x i1> @vfptoui_nxv2bf16_nxv2i1(<vscale x 2 x bfloat> %va) {
177 ; CHECK-LABEL: vfptoui_nxv2bf16_nxv2i1:
179 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
180 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
181 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v9
182 ; CHECK-NEXT: vand.vi v8, v8, 1
183 ; CHECK-NEXT: vmsne.vi v0, v8, 0
185 %evec = fptoui <vscale x 2 x bfloat> %va to <vscale x 2 x i1>
186 ret <vscale x 2 x i1> %evec
189 define <vscale x 2 x i8> @vfptosi_nxv2bf16_nxv2i8(<vscale x 2 x bfloat> %va) {
190 ; CHECK-LABEL: vfptosi_nxv2bf16_nxv2i8:
192 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
193 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
194 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v9
195 ; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
196 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
198 %evec = fptosi <vscale x 2 x bfloat> %va to <vscale x 2 x i8>
199 ret <vscale x 2 x i8> %evec
202 define <vscale x 2 x i8> @vfptoui_nxv2bf16_nxv2i8(<vscale x 2 x bfloat> %va) {
203 ; CHECK-LABEL: vfptoui_nxv2bf16_nxv2i8:
205 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
206 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
207 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v9
208 ; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
209 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
211 %evec = fptoui <vscale x 2 x bfloat> %va to <vscale x 2 x i8>
212 ret <vscale x 2 x i8> %evec
215 define <vscale x 2 x i16> @vfptosi_nxv2bf16_nxv2i16(<vscale x 2 x bfloat> %va) {
216 ; CHECK-LABEL: vfptosi_nxv2bf16_nxv2i16:
218 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
219 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
220 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v9
222 %evec = fptosi <vscale x 2 x bfloat> %va to <vscale x 2 x i16>
223 ret <vscale x 2 x i16> %evec
226 define <vscale x 2 x i16> @vfptoui_nxv2bf16_nxv2i16(<vscale x 2 x bfloat> %va) {
227 ; CHECK-LABEL: vfptoui_nxv2bf16_nxv2i16:
229 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
230 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
231 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v9
233 %evec = fptoui <vscale x 2 x bfloat> %va to <vscale x 2 x i16>
234 ret <vscale x 2 x i16> %evec
237 define <vscale x 2 x i32> @vfptosi_nxv2bf16_nxv2i32(<vscale x 2 x bfloat> %va) {
238 ; CHECK-LABEL: vfptosi_nxv2bf16_nxv2i32:
240 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
241 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
242 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
243 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v9
245 %evec = fptosi <vscale x 2 x bfloat> %va to <vscale x 2 x i32>
246 ret <vscale x 2 x i32> %evec
249 define <vscale x 2 x i32> @vfptoui_nxv2bf16_nxv2i32(<vscale x 2 x bfloat> %va) {
250 ; CHECK-LABEL: vfptoui_nxv2bf16_nxv2i32:
252 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
253 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
254 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
255 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v9
257 %evec = fptoui <vscale x 2 x bfloat> %va to <vscale x 2 x i32>
258 ret <vscale x 2 x i32> %evec
261 define <vscale x 2 x i64> @vfptosi_nxv2bf16_nxv2i64(<vscale x 2 x bfloat> %va) {
262 ; CHECK-LABEL: vfptosi_nxv2bf16_nxv2i64:
264 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
265 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
266 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
267 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v10
269 %evec = fptosi <vscale x 2 x bfloat> %va to <vscale x 2 x i64>
270 ret <vscale x 2 x i64> %evec
273 define <vscale x 2 x i64> @vfptoui_nxv2bf16_nxv2i64(<vscale x 2 x bfloat> %va) {
274 ; CHECK-LABEL: vfptoui_nxv2bf16_nxv2i64:
276 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
277 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
278 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
279 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v10
281 %evec = fptoui <vscale x 2 x bfloat> %va to <vscale x 2 x i64>
282 ret <vscale x 2 x i64> %evec
285 define <vscale x 4 x i1> @vfptosi_nxv4bf16_nxv4i1(<vscale x 4 x bfloat> %va) {
286 ; CHECK-LABEL: vfptosi_nxv4bf16_nxv4i1:
288 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
289 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
290 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v10
291 ; CHECK-NEXT: vand.vi v8, v8, 1
292 ; CHECK-NEXT: vmsne.vi v0, v8, 0
294 %evec = fptosi <vscale x 4 x bfloat> %va to <vscale x 4 x i1>
295 ret <vscale x 4 x i1> %evec
298 define <vscale x 4 x i1> @vfptoui_nxv4bf16_nxv4i1(<vscale x 4 x bfloat> %va) {
299 ; CHECK-LABEL: vfptoui_nxv4bf16_nxv4i1:
301 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
302 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
303 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v10
304 ; CHECK-NEXT: vand.vi v8, v8, 1
305 ; CHECK-NEXT: vmsne.vi v0, v8, 0
307 %evec = fptoui <vscale x 4 x bfloat> %va to <vscale x 4 x i1>
308 ret <vscale x 4 x i1> %evec
311 define <vscale x 4 x i8> @vfptosi_nxv4bf16_nxv4i8(<vscale x 4 x bfloat> %va) {
312 ; CHECK-LABEL: vfptosi_nxv4bf16_nxv4i8:
314 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
315 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
316 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v10
317 ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
318 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
320 %evec = fptosi <vscale x 4 x bfloat> %va to <vscale x 4 x i8>
321 ret <vscale x 4 x i8> %evec
324 define <vscale x 4 x i8> @vfptoui_nxv4bf16_nxv4i8(<vscale x 4 x bfloat> %va) {
325 ; CHECK-LABEL: vfptoui_nxv4bf16_nxv4i8:
327 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
328 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
329 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v10
330 ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
331 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
333 %evec = fptoui <vscale x 4 x bfloat> %va to <vscale x 4 x i8>
334 ret <vscale x 4 x i8> %evec
337 define <vscale x 4 x i16> @vfptosi_nxv4bf16_nxv4i16(<vscale x 4 x bfloat> %va) {
338 ; CHECK-LABEL: vfptosi_nxv4bf16_nxv4i16:
340 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
341 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
342 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v10
344 %evec = fptosi <vscale x 4 x bfloat> %va to <vscale x 4 x i16>
345 ret <vscale x 4 x i16> %evec
348 define <vscale x 4 x i16> @vfptoui_nxv4bf16_nxv4i16(<vscale x 4 x bfloat> %va) {
349 ; CHECK-LABEL: vfptoui_nxv4bf16_nxv4i16:
351 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
352 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
353 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v10
355 %evec = fptoui <vscale x 4 x bfloat> %va to <vscale x 4 x i16>
356 ret <vscale x 4 x i16> %evec
359 define <vscale x 4 x i32> @vfptosi_nxv4bf16_nxv4i32(<vscale x 4 x bfloat> %va) {
360 ; CHECK-LABEL: vfptosi_nxv4bf16_nxv4i32:
362 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
363 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
364 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
365 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v10
367 %evec = fptosi <vscale x 4 x bfloat> %va to <vscale x 4 x i32>
368 ret <vscale x 4 x i32> %evec
371 define <vscale x 4 x i32> @vfptoui_nxv4bf16_nxv4i32(<vscale x 4 x bfloat> %va) {
372 ; CHECK-LABEL: vfptoui_nxv4bf16_nxv4i32:
374 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
375 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
376 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
377 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v10
379 %evec = fptoui <vscale x 4 x bfloat> %va to <vscale x 4 x i32>
380 ret <vscale x 4 x i32> %evec
383 define <vscale x 4 x i64> @vfptosi_nxv4bf16_nxv4i64(<vscale x 4 x bfloat> %va) {
384 ; CHECK-LABEL: vfptosi_nxv4bf16_nxv4i64:
386 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
387 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
388 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
389 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v12
391 %evec = fptosi <vscale x 4 x bfloat> %va to <vscale x 4 x i64>
392 ret <vscale x 4 x i64> %evec
395 define <vscale x 4 x i64> @vfptoui_nxv4bf16_nxv4i64(<vscale x 4 x bfloat> %va) {
396 ; CHECK-LABEL: vfptoui_nxv4bf16_nxv4i64:
398 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
399 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
400 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
401 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v12
403 %evec = fptoui <vscale x 4 x bfloat> %va to <vscale x 4 x i64>
404 ret <vscale x 4 x i64> %evec
407 define <vscale x 8 x i1> @vfptosi_nxv8bf16_nxv8i1(<vscale x 8 x bfloat> %va) {
408 ; CHECK-LABEL: vfptosi_nxv8bf16_nxv8i1:
410 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
411 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
412 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v12
413 ; CHECK-NEXT: vand.vi v8, v8, 1
414 ; CHECK-NEXT: vmsne.vi v0, v8, 0
416 %evec = fptosi <vscale x 8 x bfloat> %va to <vscale x 8 x i1>
417 ret <vscale x 8 x i1> %evec
420 define <vscale x 8 x i1> @vfptoui_nxv8bf16_nxv8i1(<vscale x 8 x bfloat> %va) {
421 ; CHECK-LABEL: vfptoui_nxv8bf16_nxv8i1:
423 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
424 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
425 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v12
426 ; CHECK-NEXT: vand.vi v8, v8, 1
427 ; CHECK-NEXT: vmsne.vi v0, v8, 0
429 %evec = fptoui <vscale x 8 x bfloat> %va to <vscale x 8 x i1>
430 ret <vscale x 8 x i1> %evec
433 define <vscale x 8 x i8> @vfptosi_nxv8bf16_nxv8i8(<vscale x 8 x bfloat> %va) {
434 ; CHECK-LABEL: vfptosi_nxv8bf16_nxv8i8:
436 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
437 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
438 ; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v12
439 ; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma
440 ; CHECK-NEXT: vnsrl.wi v8, v10, 0
442 %evec = fptosi <vscale x 8 x bfloat> %va to <vscale x 8 x i8>
443 ret <vscale x 8 x i8> %evec
446 define <vscale x 8 x i8> @vfptoui_nxv8bf16_nxv8i8(<vscale x 8 x bfloat> %va) {
447 ; CHECK-LABEL: vfptoui_nxv8bf16_nxv8i8:
449 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
450 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
451 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v12
452 ; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma
453 ; CHECK-NEXT: vnsrl.wi v8, v10, 0
455 %evec = fptoui <vscale x 8 x bfloat> %va to <vscale x 8 x i8>
456 ret <vscale x 8 x i8> %evec
459 define <vscale x 8 x i16> @vfptosi_nxv8bf16_nxv8i16(<vscale x 8 x bfloat> %va) {
460 ; CHECK-LABEL: vfptosi_nxv8bf16_nxv8i16:
462 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
463 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
464 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v12
466 %evec = fptosi <vscale x 8 x bfloat> %va to <vscale x 8 x i16>
467 ret <vscale x 8 x i16> %evec
470 define <vscale x 8 x i16> @vfptoui_nxv8bf16_nxv8i16(<vscale x 8 x bfloat> %va) {
471 ; CHECK-LABEL: vfptoui_nxv8bf16_nxv8i16:
473 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
474 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
475 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v12
477 %evec = fptoui <vscale x 8 x bfloat> %va to <vscale x 8 x i16>
478 ret <vscale x 8 x i16> %evec
481 define <vscale x 8 x i32> @vfptosi_nxv8bf16_nxv8i32(<vscale x 8 x bfloat> %va) {
482 ; CHECK-LABEL: vfptosi_nxv8bf16_nxv8i32:
484 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
485 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
486 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
487 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v12
489 %evec = fptosi <vscale x 8 x bfloat> %va to <vscale x 8 x i32>
490 ret <vscale x 8 x i32> %evec
493 define <vscale x 8 x i32> @vfptoui_nxv8bf16_nxv8i32(<vscale x 8 x bfloat> %va) {
494 ; CHECK-LABEL: vfptoui_nxv8bf16_nxv8i32:
496 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
497 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
498 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
499 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v12
501 %evec = fptoui <vscale x 8 x bfloat> %va to <vscale x 8 x i32>
502 ret <vscale x 8 x i32> %evec
505 define <vscale x 8 x i64> @vfptosi_nxv8bf16_nxv8i64(<vscale x 8 x bfloat> %va) {
506 ; CHECK-LABEL: vfptosi_nxv8bf16_nxv8i64:
508 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
509 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
510 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
511 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v16
513 %evec = fptosi <vscale x 8 x bfloat> %va to <vscale x 8 x i64>
514 ret <vscale x 8 x i64> %evec
517 define <vscale x 8 x i64> @vfptoui_nxv8bf16_nxv8i64(<vscale x 8 x bfloat> %va) {
518 ; CHECK-LABEL: vfptoui_nxv8bf16_nxv8i64:
520 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
521 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
522 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
523 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v16
525 %evec = fptoui <vscale x 8 x bfloat> %va to <vscale x 8 x i64>
526 ret <vscale x 8 x i64> %evec
529 define <vscale x 16 x i1> @vfptosi_nxv16bf16_nxv16i1(<vscale x 16 x bfloat> %va) {
530 ; CHECK-LABEL: vfptosi_nxv16bf16_nxv16i1:
532 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
533 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
534 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v16
535 ; CHECK-NEXT: vand.vi v8, v8, 1
536 ; CHECK-NEXT: vmsne.vi v0, v8, 0
538 %evec = fptosi <vscale x 16 x bfloat> %va to <vscale x 16 x i1>
539 ret <vscale x 16 x i1> %evec
542 define <vscale x 16 x i1> @vfptoui_nxv16bf16_nxv16i1(<vscale x 16 x bfloat> %va) {
543 ; CHECK-LABEL: vfptoui_nxv16bf16_nxv16i1:
545 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
546 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
547 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v16
548 ; CHECK-NEXT: vand.vi v8, v8, 1
549 ; CHECK-NEXT: vmsne.vi v0, v8, 0
551 %evec = fptoui <vscale x 16 x bfloat> %va to <vscale x 16 x i1>
552 ret <vscale x 16 x i1> %evec
555 define <vscale x 16 x i8> @vfptosi_nxv16bf16_nxv16i8(<vscale x 16 x bfloat> %va) {
556 ; CHECK-LABEL: vfptosi_nxv16bf16_nxv16i8:
558 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
559 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
560 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v16
561 ; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma
562 ; CHECK-NEXT: vnsrl.wi v8, v12, 0
564 %evec = fptosi <vscale x 16 x bfloat> %va to <vscale x 16 x i8>
565 ret <vscale x 16 x i8> %evec
568 define <vscale x 16 x i8> @vfptoui_nxv16bf16_nxv16i8(<vscale x 16 x bfloat> %va) {
569 ; CHECK-LABEL: vfptoui_nxv16bf16_nxv16i8:
571 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
572 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
573 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v16
574 ; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma
575 ; CHECK-NEXT: vnsrl.wi v8, v12, 0
577 %evec = fptoui <vscale x 16 x bfloat> %va to <vscale x 16 x i8>
578 ret <vscale x 16 x i8> %evec
581 define <vscale x 16 x i16> @vfptosi_nxv16bf16_nxv16i16(<vscale x 16 x bfloat> %va) {
582 ; CHECK-LABEL: vfptosi_nxv16bf16_nxv16i16:
584 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
585 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
586 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v16
588 %evec = fptosi <vscale x 16 x bfloat> %va to <vscale x 16 x i16>
589 ret <vscale x 16 x i16> %evec
592 define <vscale x 16 x i16> @vfptoui_nxv16bf16_nxv16i16(<vscale x 16 x bfloat> %va) {
593 ; CHECK-LABEL: vfptoui_nxv16bf16_nxv16i16:
595 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
596 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
597 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v16
599 %evec = fptoui <vscale x 16 x bfloat> %va to <vscale x 16 x i16>
600 ret <vscale x 16 x i16> %evec
603 define <vscale x 16 x i32> @vfptosi_nxv16bf16_nxv16i32(<vscale x 16 x bfloat> %va) {
604 ; CHECK-LABEL: vfptosi_nxv16bf16_nxv16i32:
606 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
607 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
608 ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma
609 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v16
611 %evec = fptosi <vscale x 16 x bfloat> %va to <vscale x 16 x i32>
612 ret <vscale x 16 x i32> %evec
615 define <vscale x 16 x i32> @vfptoui_nxv16bf16_nxv16i32(<vscale x 16 x bfloat> %va) {
616 ; CHECK-LABEL: vfptoui_nxv16bf16_nxv16i32:
618 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
619 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
620 ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma
621 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v16
623 %evec = fptoui <vscale x 16 x bfloat> %va to <vscale x 16 x i32>
624 ret <vscale x 16 x i32> %evec
627 define <vscale x 32 x i1> @vfptosi_nxv32bf16_nxv32i1(<vscale x 32 x bfloat> %va) {
628 ; CHECK-LABEL: vfptosi_nxv32bf16_nxv32i1:
630 ; CHECK-NEXT: csrr a0, vlenb
631 ; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma
632 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12
633 ; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v8
634 ; CHECK-NEXT: srli a0, a0, 2
635 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v16
636 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v24
637 ; CHECK-NEXT: add a1, a0, a0
638 ; CHECK-NEXT: vand.vi v8, v8, 1
639 ; CHECK-NEXT: vand.vi v12, v12, 1
640 ; CHECK-NEXT: vmsne.vi v16, v8, 0
641 ; CHECK-NEXT: vmsne.vi v0, v12, 0
642 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
643 ; CHECK-NEXT: vslideup.vx v0, v16, a0
645 %evec = fptosi <vscale x 32 x bfloat> %va to <vscale x 32 x i1>
646 ret <vscale x 32 x i1> %evec
649 define <vscale x 32 x i1> @vfptoui_nxv32bf16_nxv32i1(<vscale x 32 x bfloat> %va) {
650 ; CHECK-LABEL: vfptoui_nxv32bf16_nxv32i1:
652 ; CHECK-NEXT: csrr a0, vlenb
653 ; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma
654 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12
655 ; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v8
656 ; CHECK-NEXT: srli a0, a0, 2
657 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v16
658 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v24
659 ; CHECK-NEXT: add a1, a0, a0
660 ; CHECK-NEXT: vand.vi v8, v8, 1
661 ; CHECK-NEXT: vand.vi v12, v12, 1
662 ; CHECK-NEXT: vmsne.vi v16, v8, 0
663 ; CHECK-NEXT: vmsne.vi v0, v12, 0
664 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
665 ; CHECK-NEXT: vslideup.vx v0, v16, a0
667 %evec = fptoui <vscale x 32 x bfloat> %va to <vscale x 32 x i1>
668 ret <vscale x 32 x i1> %evec
671 define <vscale x 32 x i8> @vfptosi_nxv32bf16_nxv32i8(<vscale x 32 x bfloat> %va) {
672 ; CHECK-LABEL: vfptosi_nxv32bf16_nxv32i8:
674 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
675 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
676 ; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v12
677 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v16
678 ; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma
679 ; CHECK-NEXT: vnsrl.wi v8, v12, 0
680 ; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma
681 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v24
682 ; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma
683 ; CHECK-NEXT: vnsrl.wi v10, v12, 0
685 %evec = fptosi <vscale x 32 x bfloat> %va to <vscale x 32 x i8>
686 ret <vscale x 32 x i8> %evec
689 define <vscale x 32 x i8> @vfptoui_nxv32bf16_nxv32i8(<vscale x 32 x bfloat> %va) {
690 ; CHECK-LABEL: vfptoui_nxv32bf16_nxv32i8:
692 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
693 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
694 ; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v12
695 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v16
696 ; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma
697 ; CHECK-NEXT: vnsrl.wi v8, v12, 0
698 ; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma
699 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v24
700 ; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma
701 ; CHECK-NEXT: vnsrl.wi v10, v12, 0
703 %evec = fptoui <vscale x 32 x bfloat> %va to <vscale x 32 x i8>
704 ret <vscale x 32 x i8> %evec
707 define <vscale x 32 x i16> @vfptosi_nxv32bf16_nxv32i16(<vscale x 32 x bfloat> %va) {
708 ; CHECK-LABEL: vfptosi_nxv32bf16_nxv32i16:
710 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
711 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
712 ; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v16
713 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12
714 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v16
716 %evec = fptosi <vscale x 32 x bfloat> %va to <vscale x 32 x i16>
717 ret <vscale x 32 x i16> %evec
720 define <vscale x 32 x i16> @vfptoui_nxv32bf16_nxv32i16(<vscale x 32 x bfloat> %va) {
721 ; CHECK-LABEL: vfptoui_nxv32bf16_nxv32i16:
723 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
724 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
725 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v16
726 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12
727 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v16
729 %evec = fptoui <vscale x 32 x bfloat> %va to <vscale x 32 x i16>
730 ret <vscale x 32 x i16> %evec
733 define <vscale x 1 x i1> @vfptosi_nxv1f16_nxv1i1(<vscale x 1 x half> %va) {
734 ; ZVFH-LABEL: vfptosi_nxv1f16_nxv1i1:
736 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
737 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v9, v8
738 ; ZVFH-NEXT: vand.vi v8, v9, 1
739 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
742 ; ZVFHMIN-LABEL: vfptosi_nxv1f16_nxv1i1:
744 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
745 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
746 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v9
747 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
748 ; ZVFHMIN-NEXT: vmsne.vi v0, v8, 0
750 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i1>
751 ret <vscale x 1 x i1> %evec
754 define <vscale x 1 x i7> @vfptosi_nxv1f16_nxv1i7(<vscale x 1 x half> %va) {
755 ; ZVFH-LABEL: vfptosi_nxv1f16_nxv1i7:
757 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
758 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v9, v8
759 ; ZVFH-NEXT: vmv1r.v v8, v9
762 ; ZVFHMIN-LABEL: vfptosi_nxv1f16_nxv1i7:
764 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
765 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
766 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v9
767 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
768 ; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0
770 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i7>
771 ret <vscale x 1 x i7> %evec
774 define <vscale x 1 x i7> @vfptoui_nxv1f16_nxv1i7(<vscale x 1 x half> %va) {
775 ; ZVFH-LABEL: vfptoui_nxv1f16_nxv1i7:
777 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
778 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v9, v8
779 ; ZVFH-NEXT: vmv1r.v v8, v9
782 ; ZVFHMIN-LABEL: vfptoui_nxv1f16_nxv1i7:
784 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
785 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
786 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v9
787 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
788 ; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0
790 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i7>
791 ret <vscale x 1 x i7> %evec
794 define <vscale x 1 x i1> @vfptoui_nxv1f16_nxv1i1(<vscale x 1 x half> %va) {
795 ; ZVFH-LABEL: vfptoui_nxv1f16_nxv1i1:
797 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
798 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v9, v8
799 ; ZVFH-NEXT: vand.vi v8, v9, 1
800 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
803 ; ZVFHMIN-LABEL: vfptoui_nxv1f16_nxv1i1:
805 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
806 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
807 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v9
808 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
809 ; ZVFHMIN-NEXT: vmsne.vi v0, v8, 0
811 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i1>
812 ret <vscale x 1 x i1> %evec
815 define <vscale x 1 x i8> @vfptosi_nxv1f16_nxv1i8(<vscale x 1 x half> %va) {
816 ; ZVFH-LABEL: vfptosi_nxv1f16_nxv1i8:
818 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
819 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v9, v8
820 ; ZVFH-NEXT: vmv1r.v v8, v9
823 ; ZVFHMIN-LABEL: vfptosi_nxv1f16_nxv1i8:
825 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
826 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
827 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v9
828 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
829 ; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0
831 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i8>
832 ret <vscale x 1 x i8> %evec
835 define <vscale x 1 x i8> @vfptoui_nxv1f16_nxv1i8(<vscale x 1 x half> %va) {
836 ; ZVFH-LABEL: vfptoui_nxv1f16_nxv1i8:
838 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
839 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v9, v8
840 ; ZVFH-NEXT: vmv1r.v v8, v9
843 ; ZVFHMIN-LABEL: vfptoui_nxv1f16_nxv1i8:
845 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
846 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
847 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v9
848 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
849 ; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0
851 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i8>
852 ret <vscale x 1 x i8> %evec
855 define <vscale x 1 x i16> @vfptosi_nxv1f16_nxv1i16(<vscale x 1 x half> %va) {
856 ; ZVFH-LABEL: vfptosi_nxv1f16_nxv1i16:
858 ; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
859 ; ZVFH-NEXT: vfcvt.rtz.x.f.v v8, v8
862 ; ZVFHMIN-LABEL: vfptosi_nxv1f16_nxv1i16:
864 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
865 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
866 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v9
868 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i16>
869 ret <vscale x 1 x i16> %evec
872 define <vscale x 1 x i16> @vfptoui_nxv1f16_nxv1i16(<vscale x 1 x half> %va) {
873 ; ZVFH-LABEL: vfptoui_nxv1f16_nxv1i16:
875 ; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
876 ; ZVFH-NEXT: vfcvt.rtz.xu.f.v v8, v8
879 ; ZVFHMIN-LABEL: vfptoui_nxv1f16_nxv1i16:
881 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
882 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
883 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v9
885 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i16>
886 ret <vscale x 1 x i16> %evec
889 define <vscale x 1 x i32> @vfptosi_nxv1f16_nxv1i32(<vscale x 1 x half> %va) {
890 ; ZVFH-LABEL: vfptosi_nxv1f16_nxv1i32:
892 ; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
893 ; ZVFH-NEXT: vfwcvt.rtz.x.f.v v9, v8
894 ; ZVFH-NEXT: vmv1r.v v8, v9
897 ; ZVFHMIN-LABEL: vfptosi_nxv1f16_nxv1i32:
899 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
900 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
901 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
902 ; ZVFHMIN-NEXT: vfcvt.rtz.x.f.v v8, v9
904 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i32>
905 ret <vscale x 1 x i32> %evec
908 define <vscale x 1 x i32> @vfptoui_nxv1f16_nxv1i32(<vscale x 1 x half> %va) {
909 ; ZVFH-LABEL: vfptoui_nxv1f16_nxv1i32:
911 ; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
912 ; ZVFH-NEXT: vfwcvt.rtz.xu.f.v v9, v8
913 ; ZVFH-NEXT: vmv1r.v v8, v9
916 ; ZVFHMIN-LABEL: vfptoui_nxv1f16_nxv1i32:
918 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
919 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
920 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
921 ; ZVFHMIN-NEXT: vfcvt.rtz.xu.f.v v8, v9
923 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i32>
924 ret <vscale x 1 x i32> %evec
927 define <vscale x 1 x i64> @vfptosi_nxv1f16_nxv1i64(<vscale x 1 x half> %va) {
928 ; CHECK-LABEL: vfptosi_nxv1f16_nxv1i64:
930 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
931 ; CHECK-NEXT: vfwcvt.f.f.v v9, v8
932 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
933 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v9
935 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i64>
936 ret <vscale x 1 x i64> %evec
939 define <vscale x 1 x i64> @vfptoui_nxv1f16_nxv1i64(<vscale x 1 x half> %va) {
940 ; CHECK-LABEL: vfptoui_nxv1f16_nxv1i64:
942 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
943 ; CHECK-NEXT: vfwcvt.f.f.v v9, v8
944 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
945 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v9
947 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i64>
948 ret <vscale x 1 x i64> %evec
951 define <vscale x 2 x i1> @vfptosi_nxv2f16_nxv2i1(<vscale x 2 x half> %va) {
952 ; ZVFH-LABEL: vfptosi_nxv2f16_nxv2i1:
954 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
955 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v9, v8
956 ; ZVFH-NEXT: vand.vi v8, v9, 1
957 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
960 ; ZVFHMIN-LABEL: vfptosi_nxv2f16_nxv2i1:
962 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
963 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
964 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v9
965 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
966 ; ZVFHMIN-NEXT: vmsne.vi v0, v8, 0
968 %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i1>
969 ret <vscale x 2 x i1> %evec
972 define <vscale x 2 x i1> @vfptoui_nxv2f16_nxv2i1(<vscale x 2 x half> %va) {
973 ; ZVFH-LABEL: vfptoui_nxv2f16_nxv2i1:
975 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
976 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v9, v8
977 ; ZVFH-NEXT: vand.vi v8, v9, 1
978 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
981 ; ZVFHMIN-LABEL: vfptoui_nxv2f16_nxv2i1:
983 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
984 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
985 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v9
986 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
987 ; ZVFHMIN-NEXT: vmsne.vi v0, v8, 0
989 %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i1>
990 ret <vscale x 2 x i1> %evec
993 define <vscale x 2 x i8> @vfptosi_nxv2f16_nxv2i8(<vscale x 2 x half> %va) {
994 ; ZVFH-LABEL: vfptosi_nxv2f16_nxv2i8:
996 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
997 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v9, v8
998 ; ZVFH-NEXT: vmv1r.v v8, v9
1001 ; ZVFHMIN-LABEL: vfptosi_nxv2f16_nxv2i8:
1003 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1004 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
1005 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v9
1006 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
1007 ; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0
1009 %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i8>
1010 ret <vscale x 2 x i8> %evec
1013 define <vscale x 2 x i8> @vfptoui_nxv2f16_nxv2i8(<vscale x 2 x half> %va) {
1014 ; ZVFH-LABEL: vfptoui_nxv2f16_nxv2i8:
1016 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
1017 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v9, v8
1018 ; ZVFH-NEXT: vmv1r.v v8, v9
1021 ; ZVFHMIN-LABEL: vfptoui_nxv2f16_nxv2i8:
1023 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1024 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
1025 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v9
1026 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
1027 ; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0
1029 %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i8>
1030 ret <vscale x 2 x i8> %evec
1033 define <vscale x 2 x i16> @vfptosi_nxv2f16_nxv2i16(<vscale x 2 x half> %va) {
1034 ; ZVFH-LABEL: vfptosi_nxv2f16_nxv2i16:
1036 ; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1037 ; ZVFH-NEXT: vfcvt.rtz.x.f.v v8, v8
1040 ; ZVFHMIN-LABEL: vfptosi_nxv2f16_nxv2i16:
1042 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1043 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
1044 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v9
1046 %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i16>
1047 ret <vscale x 2 x i16> %evec
1050 define <vscale x 2 x i16> @vfptoui_nxv2f16_nxv2i16(<vscale x 2 x half> %va) {
1051 ; ZVFH-LABEL: vfptoui_nxv2f16_nxv2i16:
1053 ; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1054 ; ZVFH-NEXT: vfcvt.rtz.xu.f.v v8, v8
1057 ; ZVFHMIN-LABEL: vfptoui_nxv2f16_nxv2i16:
1059 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1060 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
1061 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v9
1063 %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i16>
1064 ret <vscale x 2 x i16> %evec
1067 define <vscale x 2 x i32> @vfptosi_nxv2f16_nxv2i32(<vscale x 2 x half> %va) {
1068 ; ZVFH-LABEL: vfptosi_nxv2f16_nxv2i32:
1070 ; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1071 ; ZVFH-NEXT: vfwcvt.rtz.x.f.v v9, v8
1072 ; ZVFH-NEXT: vmv1r.v v8, v9
1075 ; ZVFHMIN-LABEL: vfptosi_nxv2f16_nxv2i32:
1077 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1078 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
1079 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
1080 ; ZVFHMIN-NEXT: vfcvt.rtz.x.f.v v8, v9
1082 %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i32>
1083 ret <vscale x 2 x i32> %evec
1086 define <vscale x 2 x i32> @vfptoui_nxv2f16_nxv2i32(<vscale x 2 x half> %va) {
1087 ; ZVFH-LABEL: vfptoui_nxv2f16_nxv2i32:
1089 ; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1090 ; ZVFH-NEXT: vfwcvt.rtz.xu.f.v v9, v8
1091 ; ZVFH-NEXT: vmv1r.v v8, v9
1094 ; ZVFHMIN-LABEL: vfptoui_nxv2f16_nxv2i32:
1096 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1097 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
1098 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
1099 ; ZVFHMIN-NEXT: vfcvt.rtz.xu.f.v v8, v9
1101 %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i32>
1102 ret <vscale x 2 x i32> %evec
1105 define <vscale x 2 x i64> @vfptosi_nxv2f16_nxv2i64(<vscale x 2 x half> %va) {
1106 ; CHECK-LABEL: vfptosi_nxv2f16_nxv2i64:
1108 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1109 ; CHECK-NEXT: vfwcvt.f.f.v v10, v8
1110 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
1111 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v10
1113 %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i64>
1114 ret <vscale x 2 x i64> %evec
1117 define <vscale x 2 x i64> @vfptoui_nxv2f16_nxv2i64(<vscale x 2 x half> %va) {
1118 ; CHECK-LABEL: vfptoui_nxv2f16_nxv2i64:
1120 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1121 ; CHECK-NEXT: vfwcvt.f.f.v v10, v8
1122 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
1123 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v10
1125 %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i64>
1126 ret <vscale x 2 x i64> %evec
1129 define <vscale x 4 x i1> @vfptosi_nxv4f16_nxv4i1(<vscale x 4 x half> %va) {
1130 ; ZVFH-LABEL: vfptosi_nxv4f16_nxv4i1:
1132 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
1133 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v9, v8
1134 ; ZVFH-NEXT: vand.vi v8, v9, 1
1135 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
1138 ; ZVFHMIN-LABEL: vfptosi_nxv4f16_nxv4i1:
1140 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1141 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
1142 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v10
1143 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
1144 ; ZVFHMIN-NEXT: vmsne.vi v0, v8, 0
1146 %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i1>
1147 ret <vscale x 4 x i1> %evec
1150 define <vscale x 4 x i1> @vfptoui_nxv4f16_nxv4i1(<vscale x 4 x half> %va) {
1151 ; ZVFH-LABEL: vfptoui_nxv4f16_nxv4i1:
1153 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
1154 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v9, v8
1155 ; ZVFH-NEXT: vand.vi v8, v9, 1
1156 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
1159 ; ZVFHMIN-LABEL: vfptoui_nxv4f16_nxv4i1:
1161 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1162 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
1163 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v10
1164 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
1165 ; ZVFHMIN-NEXT: vmsne.vi v0, v8, 0
1167 %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i1>
1168 ret <vscale x 4 x i1> %evec
1171 define <vscale x 4 x i8> @vfptosi_nxv4f16_nxv4i8(<vscale x 4 x half> %va) {
1172 ; ZVFH-LABEL: vfptosi_nxv4f16_nxv4i8:
1174 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
1175 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v9, v8
1176 ; ZVFH-NEXT: vmv1r.v v8, v9
1179 ; ZVFHMIN-LABEL: vfptosi_nxv4f16_nxv4i8:
1181 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1182 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
1183 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v10
1184 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
1185 ; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0
1187 %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i8>
1188 ret <vscale x 4 x i8> %evec
1191 define <vscale x 4 x i8> @vfptoui_nxv4f16_nxv4i8(<vscale x 4 x half> %va) {
1192 ; ZVFH-LABEL: vfptoui_nxv4f16_nxv4i8:
1194 ; ZVFH-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
1195 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v9, v8
1196 ; ZVFH-NEXT: vmv1r.v v8, v9
1199 ; ZVFHMIN-LABEL: vfptoui_nxv4f16_nxv4i8:
1201 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1202 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
1203 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v10
1204 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
1205 ; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0
1207 %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i8>
1208 ret <vscale x 4 x i8> %evec
1211 define <vscale x 4 x i16> @vfptosi_nxv4f16_nxv4i16(<vscale x 4 x half> %va) {
1212 ; ZVFH-LABEL: vfptosi_nxv4f16_nxv4i16:
1214 ; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1215 ; ZVFH-NEXT: vfcvt.rtz.x.f.v v8, v8
1218 ; ZVFHMIN-LABEL: vfptosi_nxv4f16_nxv4i16:
1220 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1221 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
1222 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v10
1224 %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i16>
1225 ret <vscale x 4 x i16> %evec
1228 define <vscale x 4 x i16> @vfptoui_nxv4f16_nxv4i16(<vscale x 4 x half> %va) {
1229 ; ZVFH-LABEL: vfptoui_nxv4f16_nxv4i16:
1231 ; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1232 ; ZVFH-NEXT: vfcvt.rtz.xu.f.v v8, v8
1235 ; ZVFHMIN-LABEL: vfptoui_nxv4f16_nxv4i16:
1237 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1238 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
1239 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v10
1241 %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i16>
1242 ret <vscale x 4 x i16> %evec
1245 define <vscale x 4 x i32> @vfptosi_nxv4f16_nxv4i32(<vscale x 4 x half> %va) {
1246 ; ZVFH-LABEL: vfptosi_nxv4f16_nxv4i32:
1248 ; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1249 ; ZVFH-NEXT: vfwcvt.rtz.x.f.v v10, v8
1250 ; ZVFH-NEXT: vmv2r.v v8, v10
1253 ; ZVFHMIN-LABEL: vfptosi_nxv4f16_nxv4i32:
1255 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1256 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
1257 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
1258 ; ZVFHMIN-NEXT: vfcvt.rtz.x.f.v v8, v10
1260 %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i32>
1261 ret <vscale x 4 x i32> %evec
1264 define <vscale x 4 x i32> @vfptoui_nxv4f16_nxv4i32(<vscale x 4 x half> %va) {
1265 ; ZVFH-LABEL: vfptoui_nxv4f16_nxv4i32:
1267 ; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1268 ; ZVFH-NEXT: vfwcvt.rtz.xu.f.v v10, v8
1269 ; ZVFH-NEXT: vmv2r.v v8, v10
1272 ; ZVFHMIN-LABEL: vfptoui_nxv4f16_nxv4i32:
1274 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1275 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
1276 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
1277 ; ZVFHMIN-NEXT: vfcvt.rtz.xu.f.v v8, v10
1279 %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i32>
1280 ret <vscale x 4 x i32> %evec
1283 define <vscale x 4 x i64> @vfptosi_nxv4f16_nxv4i64(<vscale x 4 x half> %va) {
1284 ; CHECK-LABEL: vfptosi_nxv4f16_nxv4i64:
1286 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1287 ; CHECK-NEXT: vfwcvt.f.f.v v12, v8
1288 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
1289 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v12
1291 %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i64>
1292 ret <vscale x 4 x i64> %evec
1295 define <vscale x 4 x i64> @vfptoui_nxv4f16_nxv4i64(<vscale x 4 x half> %va) {
1296 ; CHECK-LABEL: vfptoui_nxv4f16_nxv4i64:
1298 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1299 ; CHECK-NEXT: vfwcvt.f.f.v v12, v8
1300 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
1301 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v12
1303 %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i64>
1304 ret <vscale x 4 x i64> %evec
1307 define <vscale x 8 x i1> @vfptosi_nxv8f16_nxv8i1(<vscale x 8 x half> %va) {
1308 ; ZVFH-LABEL: vfptosi_nxv8f16_nxv8i1:
1310 ; ZVFH-NEXT: vsetvli a0, zero, e8, m1, ta, ma
1311 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v10, v8
1312 ; ZVFH-NEXT: vand.vi v8, v10, 1
1313 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
1316 ; ZVFHMIN-LABEL: vfptosi_nxv8f16_nxv8i1:
1318 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1319 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1320 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v12
1321 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
1322 ; ZVFHMIN-NEXT: vmsne.vi v0, v8, 0
1324 %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i1>
1325 ret <vscale x 8 x i1> %evec
1328 define <vscale x 8 x i1> @vfptoui_nxv8f16_nxv8i1(<vscale x 8 x half> %va) {
1329 ; ZVFH-LABEL: vfptoui_nxv8f16_nxv8i1:
1331 ; ZVFH-NEXT: vsetvli a0, zero, e8, m1, ta, ma
1332 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v10, v8
1333 ; ZVFH-NEXT: vand.vi v8, v10, 1
1334 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
1337 ; ZVFHMIN-LABEL: vfptoui_nxv8f16_nxv8i1:
1339 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1340 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1341 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v12
1342 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
1343 ; ZVFHMIN-NEXT: vmsne.vi v0, v8, 0
1345 %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i1>
1346 ret <vscale x 8 x i1> %evec
1349 define <vscale x 8 x i8> @vfptosi_nxv8f16_nxv8i8(<vscale x 8 x half> %va) {
1350 ; ZVFH-LABEL: vfptosi_nxv8f16_nxv8i8:
1352 ; ZVFH-NEXT: vsetvli a0, zero, e8, m1, ta, ma
1353 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v10, v8
1354 ; ZVFH-NEXT: vmv.v.v v8, v10
1357 ; ZVFHMIN-LABEL: vfptosi_nxv8f16_nxv8i8:
1359 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1360 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1361 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v10, v12
1362 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, m1, ta, ma
1363 ; ZVFHMIN-NEXT: vnsrl.wi v8, v10, 0
1365 %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i8>
1366 ret <vscale x 8 x i8> %evec
1369 define <vscale x 8 x i8> @vfptoui_nxv8f16_nxv8i8(<vscale x 8 x half> %va) {
1370 ; ZVFH-LABEL: vfptoui_nxv8f16_nxv8i8:
1372 ; ZVFH-NEXT: vsetvli a0, zero, e8, m1, ta, ma
1373 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v10, v8
1374 ; ZVFH-NEXT: vmv.v.v v8, v10
1377 ; ZVFHMIN-LABEL: vfptoui_nxv8f16_nxv8i8:
1379 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1380 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1381 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v10, v12
1382 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, m1, ta, ma
1383 ; ZVFHMIN-NEXT: vnsrl.wi v8, v10, 0
1385 %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i8>
1386 ret <vscale x 8 x i8> %evec
1389 define <vscale x 8 x i16> @vfptosi_nxv8f16_nxv8i16(<vscale x 8 x half> %va) {
1390 ; ZVFH-LABEL: vfptosi_nxv8f16_nxv8i16:
1392 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1393 ; ZVFH-NEXT: vfcvt.rtz.x.f.v v8, v8
1396 ; ZVFHMIN-LABEL: vfptosi_nxv8f16_nxv8i16:
1398 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1399 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1400 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v12
1402 %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i16>
1403 ret <vscale x 8 x i16> %evec
1406 define <vscale x 8 x i16> @vfptoui_nxv8f16_nxv8i16(<vscale x 8 x half> %va) {
1407 ; ZVFH-LABEL: vfptoui_nxv8f16_nxv8i16:
1409 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1410 ; ZVFH-NEXT: vfcvt.rtz.xu.f.v v8, v8
1413 ; ZVFHMIN-LABEL: vfptoui_nxv8f16_nxv8i16:
1415 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1416 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1417 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v12
1419 %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i16>
1420 ret <vscale x 8 x i16> %evec
1423 define <vscale x 8 x i32> @vfptosi_nxv8f16_nxv8i32(<vscale x 8 x half> %va) {
1424 ; ZVFH-LABEL: vfptosi_nxv8f16_nxv8i32:
1426 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1427 ; ZVFH-NEXT: vfwcvt.rtz.x.f.v v12, v8
1428 ; ZVFH-NEXT: vmv4r.v v8, v12
1431 ; ZVFHMIN-LABEL: vfptosi_nxv8f16_nxv8i32:
1433 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1434 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1435 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1436 ; ZVFHMIN-NEXT: vfcvt.rtz.x.f.v v8, v12
1438 %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i32>
1439 ret <vscale x 8 x i32> %evec
1442 define <vscale x 8 x i32> @vfptoui_nxv8f16_nxv8i32(<vscale x 8 x half> %va) {
1443 ; ZVFH-LABEL: vfptoui_nxv8f16_nxv8i32:
1445 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1446 ; ZVFH-NEXT: vfwcvt.rtz.xu.f.v v12, v8
1447 ; ZVFH-NEXT: vmv4r.v v8, v12
1450 ; ZVFHMIN-LABEL: vfptoui_nxv8f16_nxv8i32:
1452 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1453 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1454 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1455 ; ZVFHMIN-NEXT: vfcvt.rtz.xu.f.v v8, v12
1457 %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i32>
1458 ret <vscale x 8 x i32> %evec
1461 define <vscale x 8 x i64> @vfptosi_nxv8f16_nxv8i64(<vscale x 8 x half> %va) {
1462 ; CHECK-LABEL: vfptosi_nxv8f16_nxv8i64:
1464 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1465 ; CHECK-NEXT: vfwcvt.f.f.v v16, v8
1466 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1467 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v16
1469 %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i64>
1470 ret <vscale x 8 x i64> %evec
1473 define <vscale x 8 x i64> @vfptoui_nxv8f16_nxv8i64(<vscale x 8 x half> %va) {
1474 ; CHECK-LABEL: vfptoui_nxv8f16_nxv8i64:
1476 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1477 ; CHECK-NEXT: vfwcvt.f.f.v v16, v8
1478 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1479 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v16
1481 %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i64>
1482 ret <vscale x 8 x i64> %evec
1485 define <vscale x 16 x i1> @vfptosi_nxv16f16_nxv16i1(<vscale x 16 x half> %va) {
1486 ; ZVFH-LABEL: vfptosi_nxv16f16_nxv16i1:
1488 ; ZVFH-NEXT: vsetvli a0, zero, e8, m2, ta, ma
1489 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v12, v8
1490 ; ZVFH-NEXT: vand.vi v8, v12, 1
1491 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
1494 ; ZVFHMIN-LABEL: vfptosi_nxv16f16_nxv16i1:
1496 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1497 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1498 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v16
1499 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
1500 ; ZVFHMIN-NEXT: vmsne.vi v0, v8, 0
1502 %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i1>
1503 ret <vscale x 16 x i1> %evec
1506 define <vscale x 16 x i1> @vfptoui_nxv16f16_nxv16i1(<vscale x 16 x half> %va) {
1507 ; ZVFH-LABEL: vfptoui_nxv16f16_nxv16i1:
1509 ; ZVFH-NEXT: vsetvli a0, zero, e8, m2, ta, ma
1510 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v12, v8
1511 ; ZVFH-NEXT: vand.vi v8, v12, 1
1512 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
1515 ; ZVFHMIN-LABEL: vfptoui_nxv16f16_nxv16i1:
1517 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1518 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1519 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v16
1520 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
1521 ; ZVFHMIN-NEXT: vmsne.vi v0, v8, 0
1523 %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i1>
1524 ret <vscale x 16 x i1> %evec
1527 define <vscale x 16 x i8> @vfptosi_nxv16f16_nxv16i8(<vscale x 16 x half> %va) {
1528 ; ZVFH-LABEL: vfptosi_nxv16f16_nxv16i8:
1530 ; ZVFH-NEXT: vsetvli a0, zero, e8, m2, ta, ma
1531 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v12, v8
1532 ; ZVFH-NEXT: vmv.v.v v8, v12
1535 ; ZVFHMIN-LABEL: vfptosi_nxv16f16_nxv16i8:
1537 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1538 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1539 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v12, v16
1540 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, m2, ta, ma
1541 ; ZVFHMIN-NEXT: vnsrl.wi v8, v12, 0
1543 %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i8>
1544 ret <vscale x 16 x i8> %evec
1547 define <vscale x 16 x i8> @vfptoui_nxv16f16_nxv16i8(<vscale x 16 x half> %va) {
1548 ; ZVFH-LABEL: vfptoui_nxv16f16_nxv16i8:
1550 ; ZVFH-NEXT: vsetvli a0, zero, e8, m2, ta, ma
1551 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v12, v8
1552 ; ZVFH-NEXT: vmv.v.v v8, v12
1555 ; ZVFHMIN-LABEL: vfptoui_nxv16f16_nxv16i8:
1557 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1558 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1559 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v12, v16
1560 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, m2, ta, ma
1561 ; ZVFHMIN-NEXT: vnsrl.wi v8, v12, 0
1563 %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i8>
1564 ret <vscale x 16 x i8> %evec
1567 define <vscale x 16 x i16> @vfptosi_nxv16f16_nxv16i16(<vscale x 16 x half> %va) {
1568 ; ZVFH-LABEL: vfptosi_nxv16f16_nxv16i16:
1570 ; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1571 ; ZVFH-NEXT: vfcvt.rtz.x.f.v v8, v8
1574 ; ZVFHMIN-LABEL: vfptosi_nxv16f16_nxv16i16:
1576 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1577 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1578 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v16
1580 %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i16>
1581 ret <vscale x 16 x i16> %evec
1584 define <vscale x 16 x i16> @vfptoui_nxv16f16_nxv16i16(<vscale x 16 x half> %va) {
1585 ; ZVFH-LABEL: vfptoui_nxv16f16_nxv16i16:
1587 ; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1588 ; ZVFH-NEXT: vfcvt.rtz.xu.f.v v8, v8
1591 ; ZVFHMIN-LABEL: vfptoui_nxv16f16_nxv16i16:
1593 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1594 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1595 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v16
1597 %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i16>
1598 ret <vscale x 16 x i16> %evec
1601 define <vscale x 16 x i32> @vfptosi_nxv16f16_nxv16i32(<vscale x 16 x half> %va) {
1602 ; ZVFH-LABEL: vfptosi_nxv16f16_nxv16i32:
1604 ; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1605 ; ZVFH-NEXT: vfwcvt.rtz.x.f.v v16, v8
1606 ; ZVFH-NEXT: vmv8r.v v8, v16
1609 ; ZVFHMIN-LABEL: vfptosi_nxv16f16_nxv16i32:
1611 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1612 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1613 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
1614 ; ZVFHMIN-NEXT: vfcvt.rtz.x.f.v v8, v16
1616 %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i32>
1617 ret <vscale x 16 x i32> %evec
1620 define <vscale x 16 x i32> @vfptoui_nxv16f16_nxv16i32(<vscale x 16 x half> %va) {
1621 ; ZVFH-LABEL: vfptoui_nxv16f16_nxv16i32:
1623 ; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1624 ; ZVFH-NEXT: vfwcvt.rtz.xu.f.v v16, v8
1625 ; ZVFH-NEXT: vmv8r.v v8, v16
1628 ; ZVFHMIN-LABEL: vfptoui_nxv16f16_nxv16i32:
1630 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1631 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1632 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
1633 ; ZVFHMIN-NEXT: vfcvt.rtz.xu.f.v v8, v16
1635 %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i32>
1636 ret <vscale x 16 x i32> %evec
1639 define <vscale x 32 x i1> @vfptosi_nxv32f16_nxv32i1(<vscale x 32 x half> %va) {
1640 ; ZVFH-LABEL: vfptosi_nxv32f16_nxv32i1:
1642 ; ZVFH-NEXT: vsetvli a0, zero, e8, m4, ta, ma
1643 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v16, v8
1644 ; ZVFH-NEXT: vand.vi v8, v16, 1
1645 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
1648 ; ZVFHMIN-LABEL: vfptosi_nxv32f16_nxv32i1:
1650 ; ZVFHMIN-NEXT: csrr a0, vlenb
1651 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma
1652 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12
1653 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8
1654 ; ZVFHMIN-NEXT: srli a0, a0, 2
1655 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v16
1656 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v12, v24
1657 ; ZVFHMIN-NEXT: add a1, a0, a0
1658 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
1659 ; ZVFHMIN-NEXT: vand.vi v12, v12, 1
1660 ; ZVFHMIN-NEXT: vmsne.vi v16, v8, 0
1661 ; ZVFHMIN-NEXT: vmsne.vi v0, v12, 0
1662 ; ZVFHMIN-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
1663 ; ZVFHMIN-NEXT: vslideup.vx v0, v16, a0
1665 %evec = fptosi <vscale x 32 x half> %va to <vscale x 32 x i1>
1666 ret <vscale x 32 x i1> %evec
1669 define <vscale x 32 x i1> @vfptoui_nxv32f16_nxv32i1(<vscale x 32 x half> %va) {
1670 ; ZVFH-LABEL: vfptoui_nxv32f16_nxv32i1:
1672 ; ZVFH-NEXT: vsetvli a0, zero, e8, m4, ta, ma
1673 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v16, v8
1674 ; ZVFH-NEXT: vand.vi v8, v16, 1
1675 ; ZVFH-NEXT: vmsne.vi v0, v8, 0
1678 ; ZVFHMIN-LABEL: vfptoui_nxv32f16_nxv32i1:
1680 ; ZVFHMIN-NEXT: csrr a0, vlenb
1681 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma
1682 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12
1683 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8
1684 ; ZVFHMIN-NEXT: srli a0, a0, 2
1685 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v16
1686 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v12, v24
1687 ; ZVFHMIN-NEXT: add a1, a0, a0
1688 ; ZVFHMIN-NEXT: vand.vi v8, v8, 1
1689 ; ZVFHMIN-NEXT: vand.vi v12, v12, 1
1690 ; ZVFHMIN-NEXT: vmsne.vi v16, v8, 0
1691 ; ZVFHMIN-NEXT: vmsne.vi v0, v12, 0
1692 ; ZVFHMIN-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
1693 ; ZVFHMIN-NEXT: vslideup.vx v0, v16, a0
1695 %evec = fptoui <vscale x 32 x half> %va to <vscale x 32 x i1>
1696 ret <vscale x 32 x i1> %evec
1699 define <vscale x 32 x i8> @vfptosi_nxv32f16_nxv32i8(<vscale x 32 x half> %va) {
1700 ; ZVFH-LABEL: vfptosi_nxv32f16_nxv32i8:
1702 ; ZVFH-NEXT: vsetvli a0, zero, e8, m4, ta, ma
1703 ; ZVFH-NEXT: vfncvt.rtz.x.f.w v16, v8
1704 ; ZVFH-NEXT: vmv.v.v v8, v16
1707 ; ZVFHMIN-LABEL: vfptosi_nxv32f16_nxv32i8:
1709 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1710 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1711 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12
1712 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v12, v16
1713 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, m2, ta, ma
1714 ; ZVFHMIN-NEXT: vnsrl.wi v8, v12, 0
1715 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
1716 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v12, v24
1717 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, m2, ta, ma
1718 ; ZVFHMIN-NEXT: vnsrl.wi v10, v12, 0
1720 %evec = fptosi <vscale x 32 x half> %va to <vscale x 32 x i8>
1721 ret <vscale x 32 x i8> %evec
1724 define <vscale x 32 x i8> @vfptoui_nxv32f16_nxv32i8(<vscale x 32 x half> %va) {
1725 ; ZVFH-LABEL: vfptoui_nxv32f16_nxv32i8:
1727 ; ZVFH-NEXT: vsetvli a0, zero, e8, m4, ta, ma
1728 ; ZVFH-NEXT: vfncvt.rtz.xu.f.w v16, v8
1729 ; ZVFH-NEXT: vmv.v.v v8, v16
1732 ; ZVFHMIN-LABEL: vfptoui_nxv32f16_nxv32i8:
1734 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1735 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1736 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12
1737 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v12, v16
1738 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, m2, ta, ma
1739 ; ZVFHMIN-NEXT: vnsrl.wi v8, v12, 0
1740 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
1741 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v12, v24
1742 ; ZVFHMIN-NEXT: vsetvli zero, zero, e8, m2, ta, ma
1743 ; ZVFHMIN-NEXT: vnsrl.wi v10, v12, 0
1745 %evec = fptoui <vscale x 32 x half> %va to <vscale x 32 x i8>
1746 ret <vscale x 32 x i8> %evec
1749 define <vscale x 32 x i16> @vfptosi_nxv32f16_nxv32i16(<vscale x 32 x half> %va) {
1750 ; ZVFH-LABEL: vfptosi_nxv32f16_nxv32i16:
1752 ; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma
1753 ; ZVFH-NEXT: vfcvt.rtz.x.f.v v8, v8
1756 ; ZVFHMIN-LABEL: vfptosi_nxv32f16_nxv32i16:
1758 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1759 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1760 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v16
1761 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12
1762 ; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v12, v16
1764 %evec = fptosi <vscale x 32 x half> %va to <vscale x 32 x i16>
1765 ret <vscale x 32 x i16> %evec
1768 define <vscale x 32 x i16> @vfptoui_nxv32f16_nxv32i16(<vscale x 32 x half> %va) {
1769 ; ZVFH-LABEL: vfptoui_nxv32f16_nxv32i16:
1771 ; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma
1772 ; ZVFH-NEXT: vfcvt.rtz.xu.f.v v8, v8
1775 ; ZVFHMIN-LABEL: vfptoui_nxv32f16_nxv32i16:
1777 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1778 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1779 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v16
1780 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12
1781 ; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v12, v16
1783 %evec = fptoui <vscale x 32 x half> %va to <vscale x 32 x i16>
1784 ret <vscale x 32 x i16> %evec
1787 define <vscale x 1 x i1> @vfptosi_nxv1f32_nxv1i1(<vscale x 1 x float> %va) {
1788 ; CHECK-LABEL: vfptosi_nxv1f32_nxv1i1:
1790 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
1791 ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8
1792 ; CHECK-NEXT: vand.vi v8, v9, 1
1793 ; CHECK-NEXT: vmsne.vi v0, v8, 0
1795 %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i1>
1796 ret <vscale x 1 x i1> %evec
1799 define <vscale x 1 x i1> @vfptoui_nxv1f32_nxv1i1(<vscale x 1 x float> %va) {
1800 ; CHECK-LABEL: vfptoui_nxv1f32_nxv1i1:
1802 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
1803 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8
1804 ; CHECK-NEXT: vand.vi v8, v9, 1
1805 ; CHECK-NEXT: vmsne.vi v0, v8, 0
1807 %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i1>
1808 ret <vscale x 1 x i1> %evec
1811 define <vscale x 1 x i8> @vfptosi_nxv1f32_nxv1i8(<vscale x 1 x float> %va) {
1812 ; CHECK-LABEL: vfptosi_nxv1f32_nxv1i8:
1814 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
1815 ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8
1816 ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
1817 ; CHECK-NEXT: vnsrl.wi v8, v9, 0
1819 %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i8>
1820 ret <vscale x 1 x i8> %evec
1823 define <vscale x 1 x i8> @vfptoui_nxv1f32_nxv1i8(<vscale x 1 x float> %va) {
1824 ; CHECK-LABEL: vfptoui_nxv1f32_nxv1i8:
1826 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
1827 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8
1828 ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
1829 ; CHECK-NEXT: vnsrl.wi v8, v9, 0
1831 %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i8>
1832 ret <vscale x 1 x i8> %evec
1835 define <vscale x 1 x i16> @vfptosi_nxv1f32_nxv1i16(<vscale x 1 x float> %va) {
1836 ; CHECK-LABEL: vfptosi_nxv1f32_nxv1i16:
1838 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
1839 ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8
1840 ; CHECK-NEXT: vmv1r.v v8, v9
1842 %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i16>
1843 ret <vscale x 1 x i16> %evec
1846 define <vscale x 1 x i16> @vfptoui_nxv1f32_nxv1i16(<vscale x 1 x float> %va) {
1847 ; CHECK-LABEL: vfptoui_nxv1f32_nxv1i16:
1849 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
1850 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8
1851 ; CHECK-NEXT: vmv1r.v v8, v9
1853 %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i16>
1854 ret <vscale x 1 x i16> %evec
1857 define <vscale x 1 x i32> @vfptosi_nxv1f32_nxv1i32(<vscale x 1 x float> %va) {
1858 ; CHECK-LABEL: vfptosi_nxv1f32_nxv1i32:
1860 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
1861 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8
1863 %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i32>
1864 ret <vscale x 1 x i32> %evec
1867 define <vscale x 1 x i32> @vfptoui_nxv1f32_nxv1i32(<vscale x 1 x float> %va) {
1868 ; CHECK-LABEL: vfptoui_nxv1f32_nxv1i32:
1870 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
1871 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8
1873 %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i32>
1874 ret <vscale x 1 x i32> %evec
1877 define <vscale x 1 x i64> @vfptosi_nxv1f32_nxv1i64(<vscale x 1 x float> %va) {
1878 ; CHECK-LABEL: vfptosi_nxv1f32_nxv1i64:
1880 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
1881 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8
1882 ; CHECK-NEXT: vmv1r.v v8, v9
1884 %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i64>
1885 ret <vscale x 1 x i64> %evec
1888 define <vscale x 1 x i64> @vfptoui_nxv1f32_nxv1i64(<vscale x 1 x float> %va) {
1889 ; CHECK-LABEL: vfptoui_nxv1f32_nxv1i64:
1891 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
1892 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8
1893 ; CHECK-NEXT: vmv1r.v v8, v9
1895 %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i64>
1896 ret <vscale x 1 x i64> %evec
1899 define <vscale x 2 x i1> @vfptosi_nxv2f32_nxv2i1(<vscale x 2 x float> %va) {
1900 ; CHECK-LABEL: vfptosi_nxv2f32_nxv2i1:
1902 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1903 ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8
1904 ; CHECK-NEXT: vand.vi v8, v9, 1
1905 ; CHECK-NEXT: vmsne.vi v0, v8, 0
1907 %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i1>
1908 ret <vscale x 2 x i1> %evec
1911 define <vscale x 2 x i1> @vfptoui_nxv2f32_nxv2i1(<vscale x 2 x float> %va) {
1912 ; CHECK-LABEL: vfptoui_nxv2f32_nxv2i1:
1914 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1915 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8
1916 ; CHECK-NEXT: vand.vi v8, v9, 1
1917 ; CHECK-NEXT: vmsne.vi v0, v8, 0
1919 %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i1>
1920 ret <vscale x 2 x i1> %evec
1923 define <vscale x 2 x i8> @vfptosi_nxv2f32_nxv2i8(<vscale x 2 x float> %va) {
1924 ; CHECK-LABEL: vfptosi_nxv2f32_nxv2i8:
1926 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1927 ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8
1928 ; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
1929 ; CHECK-NEXT: vnsrl.wi v8, v9, 0
1931 %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i8>
1932 ret <vscale x 2 x i8> %evec
1935 define <vscale x 2 x i8> @vfptoui_nxv2f32_nxv2i8(<vscale x 2 x float> %va) {
1936 ; CHECK-LABEL: vfptoui_nxv2f32_nxv2i8:
1938 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1939 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8
1940 ; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
1941 ; CHECK-NEXT: vnsrl.wi v8, v9, 0
1943 %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i8>
1944 ret <vscale x 2 x i8> %evec
1947 define <vscale x 2 x i16> @vfptosi_nxv2f32_nxv2i16(<vscale x 2 x float> %va) {
1948 ; CHECK-LABEL: vfptosi_nxv2f32_nxv2i16:
1950 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1951 ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8
1952 ; CHECK-NEXT: vmv1r.v v8, v9
1954 %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i16>
1955 ret <vscale x 2 x i16> %evec
1958 define <vscale x 2 x i16> @vfptoui_nxv2f32_nxv2i16(<vscale x 2 x float> %va) {
1959 ; CHECK-LABEL: vfptoui_nxv2f32_nxv2i16:
1961 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1962 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8
1963 ; CHECK-NEXT: vmv1r.v v8, v9
1965 %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i16>
1966 ret <vscale x 2 x i16> %evec
1969 define <vscale x 2 x i32> @vfptosi_nxv2f32_nxv2i32(<vscale x 2 x float> %va) {
1970 ; CHECK-LABEL: vfptosi_nxv2f32_nxv2i32:
1972 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1973 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8
1975 %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i32>
1976 ret <vscale x 2 x i32> %evec
1979 define <vscale x 2 x i32> @vfptoui_nxv2f32_nxv2i32(<vscale x 2 x float> %va) {
1980 ; CHECK-LABEL: vfptoui_nxv2f32_nxv2i32:
1982 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1983 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8
1985 %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i32>
1986 ret <vscale x 2 x i32> %evec
1989 define <vscale x 2 x i64> @vfptosi_nxv2f32_nxv2i64(<vscale x 2 x float> %va) {
1990 ; CHECK-LABEL: vfptosi_nxv2f32_nxv2i64:
1992 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1993 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v10, v8
1994 ; CHECK-NEXT: vmv2r.v v8, v10
1996 %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i64>
1997 ret <vscale x 2 x i64> %evec
2000 define <vscale x 2 x i64> @vfptoui_nxv2f32_nxv2i64(<vscale x 2 x float> %va) {
2001 ; CHECK-LABEL: vfptoui_nxv2f32_nxv2i64:
2003 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
2004 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v10, v8
2005 ; CHECK-NEXT: vmv2r.v v8, v10
2007 %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i64>
2008 ret <vscale x 2 x i64> %evec
2011 define <vscale x 4 x i1> @vfptosi_nxv4f32_nxv4i1(<vscale x 4 x float> %va) {
2012 ; CHECK-LABEL: vfptosi_nxv4f32_nxv4i1:
2014 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
2015 ; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8
2016 ; CHECK-NEXT: vand.vi v8, v10, 1
2017 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2019 %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i1>
2020 ret <vscale x 4 x i1> %evec
2023 define <vscale x 4 x i1> @vfptoui_nxv4f32_nxv4i1(<vscale x 4 x float> %va) {
2024 ; CHECK-LABEL: vfptoui_nxv4f32_nxv4i1:
2026 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
2027 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8
2028 ; CHECK-NEXT: vand.vi v8, v10, 1
2029 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2031 %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i1>
2032 ret <vscale x 4 x i1> %evec
2035 define <vscale x 4 x i8> @vfptosi_nxv4f32_nxv4i8(<vscale x 4 x float> %va) {
2036 ; CHECK-LABEL: vfptosi_nxv4f32_nxv4i8:
2038 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
2039 ; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8
2040 ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
2041 ; CHECK-NEXT: vnsrl.wi v8, v10, 0
2043 %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i8>
2044 ret <vscale x 4 x i8> %evec
2047 define <vscale x 4 x i8> @vfptoui_nxv4f32_nxv4i8(<vscale x 4 x float> %va) {
2048 ; CHECK-LABEL: vfptoui_nxv4f32_nxv4i8:
2050 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
2051 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8
2052 ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
2053 ; CHECK-NEXT: vnsrl.wi v8, v10, 0
2055 %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i8>
2056 ret <vscale x 4 x i8> %evec
2059 define <vscale x 4 x i16> @vfptosi_nxv4f32_nxv4i16(<vscale x 4 x float> %va) {
2060 ; CHECK-LABEL: vfptosi_nxv4f32_nxv4i16:
2062 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
2063 ; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8
2064 ; CHECK-NEXT: vmv.v.v v8, v10
2066 %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i16>
2067 ret <vscale x 4 x i16> %evec
2070 define <vscale x 4 x i16> @vfptoui_nxv4f32_nxv4i16(<vscale x 4 x float> %va) {
2071 ; CHECK-LABEL: vfptoui_nxv4f32_nxv4i16:
2073 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
2074 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8
2075 ; CHECK-NEXT: vmv.v.v v8, v10
2077 %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i16>
2078 ret <vscale x 4 x i16> %evec
2081 define <vscale x 4 x i32> @vfptosi_nxv4f32_nxv4i32(<vscale x 4 x float> %va) {
2082 ; CHECK-LABEL: vfptosi_nxv4f32_nxv4i32:
2084 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2085 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8
2087 %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i32>
2088 ret <vscale x 4 x i32> %evec
2091 define <vscale x 4 x i32> @vfptoui_nxv4f32_nxv4i32(<vscale x 4 x float> %va) {
2092 ; CHECK-LABEL: vfptoui_nxv4f32_nxv4i32:
2094 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2095 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8
2097 %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i32>
2098 ret <vscale x 4 x i32> %evec
2101 define <vscale x 4 x i64> @vfptosi_nxv4f32_nxv4i64(<vscale x 4 x float> %va) {
2102 ; CHECK-LABEL: vfptosi_nxv4f32_nxv4i64:
2104 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2105 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v12, v8
2106 ; CHECK-NEXT: vmv4r.v v8, v12
2108 %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i64>
2109 ret <vscale x 4 x i64> %evec
2112 define <vscale x 4 x i64> @vfptoui_nxv4f32_nxv4i64(<vscale x 4 x float> %va) {
2113 ; CHECK-LABEL: vfptoui_nxv4f32_nxv4i64:
2115 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2116 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v12, v8
2117 ; CHECK-NEXT: vmv4r.v v8, v12
2119 %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i64>
2120 ret <vscale x 4 x i64> %evec
2123 define <vscale x 8 x i1> @vfptosi_nxv8f32_nxv8i1(<vscale x 8 x float> %va) {
2124 ; CHECK-LABEL: vfptosi_nxv8f32_nxv8i1:
2126 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
2127 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8
2128 ; CHECK-NEXT: vand.vi v8, v12, 1
2129 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2131 %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i1>
2132 ret <vscale x 8 x i1> %evec
2135 define <vscale x 8 x i1> @vfptoui_nxv8f32_nxv8i1(<vscale x 8 x float> %va) {
2136 ; CHECK-LABEL: vfptoui_nxv8f32_nxv8i1:
2138 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
2139 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8
2140 ; CHECK-NEXT: vand.vi v8, v12, 1
2141 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2143 %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i1>
2144 ret <vscale x 8 x i1> %evec
2147 define <vscale x 8 x i8> @vfptosi_nxv8f32_nxv8i8(<vscale x 8 x float> %va) {
2148 ; CHECK-LABEL: vfptosi_nxv8f32_nxv8i8:
2150 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
2151 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8
2152 ; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma
2153 ; CHECK-NEXT: vnsrl.wi v8, v12, 0
2155 %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i8>
2156 ret <vscale x 8 x i8> %evec
2159 define <vscale x 8 x i8> @vfptoui_nxv8f32_nxv8i8(<vscale x 8 x float> %va) {
2160 ; CHECK-LABEL: vfptoui_nxv8f32_nxv8i8:
2162 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
2163 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8
2164 ; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma
2165 ; CHECK-NEXT: vnsrl.wi v8, v12, 0
2167 %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i8>
2168 ret <vscale x 8 x i8> %evec
2171 define <vscale x 8 x i16> @vfptosi_nxv8f32_nxv8i16(<vscale x 8 x float> %va) {
2172 ; CHECK-LABEL: vfptosi_nxv8f32_nxv8i16:
2174 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
2175 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8
2176 ; CHECK-NEXT: vmv.v.v v8, v12
2178 %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i16>
2179 ret <vscale x 8 x i16> %evec
2182 define <vscale x 8 x i16> @vfptoui_nxv8f32_nxv8i16(<vscale x 8 x float> %va) {
2183 ; CHECK-LABEL: vfptoui_nxv8f32_nxv8i16:
2185 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
2186 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8
2187 ; CHECK-NEXT: vmv.v.v v8, v12
2189 %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i16>
2190 ret <vscale x 8 x i16> %evec
2193 define <vscale x 8 x i32> @vfptosi_nxv8f32_nxv8i32(<vscale x 8 x float> %va) {
2194 ; CHECK-LABEL: vfptosi_nxv8f32_nxv8i32:
2196 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2197 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8
2199 %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i32>
2200 ret <vscale x 8 x i32> %evec
2203 define <vscale x 8 x i32> @vfptoui_nxv8f32_nxv8i32(<vscale x 8 x float> %va) {
2204 ; CHECK-LABEL: vfptoui_nxv8f32_nxv8i32:
2206 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2207 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8
2209 %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i32>
2210 ret <vscale x 8 x i32> %evec
2213 define <vscale x 8 x i64> @vfptosi_nxv8f32_nxv8i64(<vscale x 8 x float> %va) {
2214 ; CHECK-LABEL: vfptosi_nxv8f32_nxv8i64:
2216 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2217 ; CHECK-NEXT: vfwcvt.rtz.x.f.v v16, v8
2218 ; CHECK-NEXT: vmv8r.v v8, v16
2220 %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i64>
2221 ret <vscale x 8 x i64> %evec
2224 define <vscale x 8 x i64> @vfptoui_nxv8f32_nxv8i64(<vscale x 8 x float> %va) {
2225 ; CHECK-LABEL: vfptoui_nxv8f32_nxv8i64:
2227 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2228 ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v16, v8
2229 ; CHECK-NEXT: vmv8r.v v8, v16
2231 %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i64>
2232 ret <vscale x 8 x i64> %evec
2235 define <vscale x 16 x i1> @vfptosi_nxv16f32_nxv16i1(<vscale x 16 x float> %va) {
2236 ; CHECK-LABEL: vfptosi_nxv16f32_nxv16i1:
2238 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
2239 ; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8
2240 ; CHECK-NEXT: vand.vi v8, v16, 1
2241 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2243 %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i1>
2244 ret <vscale x 16 x i1> %evec
2247 define <vscale x 16 x i1> @vfptoui_nxv16f32_nxv16i1(<vscale x 16 x float> %va) {
2248 ; CHECK-LABEL: vfptoui_nxv16f32_nxv16i1:
2250 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
2251 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8
2252 ; CHECK-NEXT: vand.vi v8, v16, 1
2253 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2255 %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i1>
2256 ret <vscale x 16 x i1> %evec
2259 define <vscale x 16 x i8> @vfptosi_nxv16f32_nxv16i8(<vscale x 16 x float> %va) {
2260 ; CHECK-LABEL: vfptosi_nxv16f32_nxv16i8:
2262 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
2263 ; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8
2264 ; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma
2265 ; CHECK-NEXT: vnsrl.wi v8, v16, 0
2267 %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i8>
2268 ret <vscale x 16 x i8> %evec
2271 define <vscale x 16 x i8> @vfptoui_nxv16f32_nxv16i8(<vscale x 16 x float> %va) {
2272 ; CHECK-LABEL: vfptoui_nxv16f32_nxv16i8:
2274 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
2275 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8
2276 ; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma
2277 ; CHECK-NEXT: vnsrl.wi v8, v16, 0
2279 %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i8>
2280 ret <vscale x 16 x i8> %evec
2283 define <vscale x 16 x i16> @vfptosi_nxv16f32_nxv16i16(<vscale x 16 x float> %va) {
2284 ; CHECK-LABEL: vfptosi_nxv16f32_nxv16i16:
2286 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
2287 ; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8
2288 ; CHECK-NEXT: vmv.v.v v8, v16
2290 %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i16>
2291 ret <vscale x 16 x i16> %evec
2294 define <vscale x 16 x i16> @vfptoui_nxv16f32_nxv16i16(<vscale x 16 x float> %va) {
2295 ; CHECK-LABEL: vfptoui_nxv16f32_nxv16i16:
2297 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
2298 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8
2299 ; CHECK-NEXT: vmv.v.v v8, v16
2301 %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i16>
2302 ret <vscale x 16 x i16> %evec
2305 define <vscale x 16 x i32> @vfptosi_nxv16f32_nxv16i32(<vscale x 16 x float> %va) {
2306 ; CHECK-LABEL: vfptosi_nxv16f32_nxv16i32:
2308 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
2309 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8
2311 %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i32>
2312 ret <vscale x 16 x i32> %evec
2315 define <vscale x 16 x i32> @vfptoui_nxv16f32_nxv16i32(<vscale x 16 x float> %va) {
2316 ; CHECK-LABEL: vfptoui_nxv16f32_nxv16i32:
2318 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
2319 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8
2321 %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i32>
2322 ret <vscale x 16 x i32> %evec
2325 define <vscale x 1 x i1> @vfptosi_nxv1f64_nxv1i1(<vscale x 1 x double> %va) {
2326 ; CHECK-LABEL: vfptosi_nxv1f64_nxv1i1:
2328 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
2329 ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8
2330 ; CHECK-NEXT: vand.vi v8, v9, 1
2331 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2333 %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i1>
2334 ret <vscale x 1 x i1> %evec
2337 define <vscale x 1 x i1> @vfptoui_nxv1f64_nxv1i1(<vscale x 1 x double> %va) {
2338 ; CHECK-LABEL: vfptoui_nxv1f64_nxv1i1:
2340 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
2341 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8
2342 ; CHECK-NEXT: vand.vi v8, v9, 1
2343 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2345 %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i1>
2346 ret <vscale x 1 x i1> %evec
2349 define <vscale x 1 x i8> @vfptosi_nxv1f64_nxv1i8(<vscale x 1 x double> %va) {
2350 ; CHECK-LABEL: vfptosi_nxv1f64_nxv1i8:
2352 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
2353 ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8
2354 ; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
2355 ; CHECK-NEXT: vnsrl.wi v8, v9, 0
2356 ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
2357 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
2359 %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i8>
2360 ret <vscale x 1 x i8> %evec
2363 define <vscale x 1 x i8> @vfptoui_nxv1f64_nxv1i8(<vscale x 1 x double> %va) {
2364 ; CHECK-LABEL: vfptoui_nxv1f64_nxv1i8:
2366 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
2367 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8
2368 ; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
2369 ; CHECK-NEXT: vnsrl.wi v8, v9, 0
2370 ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
2371 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
2373 %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i8>
2374 ret <vscale x 1 x i8> %evec
2377 define <vscale x 1 x i16> @vfptosi_nxv1f64_nxv1i16(<vscale x 1 x double> %va) {
2378 ; CHECK-LABEL: vfptosi_nxv1f64_nxv1i16:
2380 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
2381 ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8
2382 ; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
2383 ; CHECK-NEXT: vnsrl.wi v8, v9, 0
2385 %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i16>
2386 ret <vscale x 1 x i16> %evec
2389 define <vscale x 1 x i16> @vfptoui_nxv1f64_nxv1i16(<vscale x 1 x double> %va) {
2390 ; CHECK-LABEL: vfptoui_nxv1f64_nxv1i16:
2392 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
2393 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8
2394 ; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
2395 ; CHECK-NEXT: vnsrl.wi v8, v9, 0
2397 %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i16>
2398 ret <vscale x 1 x i16> %evec
2401 define <vscale x 1 x i32> @vfptosi_nxv1f64_nxv1i32(<vscale x 1 x double> %va) {
2402 ; CHECK-LABEL: vfptosi_nxv1f64_nxv1i32:
2404 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
2405 ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8
2406 ; CHECK-NEXT: vmv1r.v v8, v9
2408 %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i32>
2409 ret <vscale x 1 x i32> %evec
2412 define <vscale x 1 x i32> @vfptoui_nxv1f64_nxv1i32(<vscale x 1 x double> %va) {
2413 ; CHECK-LABEL: vfptoui_nxv1f64_nxv1i32:
2415 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
2416 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8
2417 ; CHECK-NEXT: vmv1r.v v8, v9
2419 %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i32>
2420 ret <vscale x 1 x i32> %evec
2423 define <vscale x 1 x i64> @vfptosi_nxv1f64_nxv1i64(<vscale x 1 x double> %va) {
2424 ; CHECK-LABEL: vfptosi_nxv1f64_nxv1i64:
2426 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
2427 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8
2429 %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i64>
2430 ret <vscale x 1 x i64> %evec
2433 define <vscale x 1 x i64> @vfptoui_nxv1f64_nxv1i64(<vscale x 1 x double> %va) {
2434 ; CHECK-LABEL: vfptoui_nxv1f64_nxv1i64:
2436 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
2437 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8
2439 %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i64>
2440 ret <vscale x 1 x i64> %evec
2443 define <vscale x 2 x i1> @vfptosi_nxv2f64_nxv2i1(<vscale x 2 x double> %va) {
2444 ; CHECK-LABEL: vfptosi_nxv2f64_nxv2i1:
2446 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
2447 ; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8
2448 ; CHECK-NEXT: vand.vi v8, v10, 1
2449 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2451 %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i1>
2452 ret <vscale x 2 x i1> %evec
2455 define <vscale x 2 x i1> @vfptoui_nxv2f64_nxv2i1(<vscale x 2 x double> %va) {
2456 ; CHECK-LABEL: vfptoui_nxv2f64_nxv2i1:
2458 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
2459 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8
2460 ; CHECK-NEXT: vand.vi v8, v10, 1
2461 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2463 %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i1>
2464 ret <vscale x 2 x i1> %evec
2467 define <vscale x 2 x i8> @vfptosi_nxv2f64_nxv2i8(<vscale x 2 x double> %va) {
2468 ; CHECK-LABEL: vfptosi_nxv2f64_nxv2i8:
2470 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
2471 ; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8
2472 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
2473 ; CHECK-NEXT: vnsrl.wi v8, v10, 0
2474 ; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
2475 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
2477 %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i8>
2478 ret <vscale x 2 x i8> %evec
2481 define <vscale x 2 x i8> @vfptoui_nxv2f64_nxv2i8(<vscale x 2 x double> %va) {
2482 ; CHECK-LABEL: vfptoui_nxv2f64_nxv2i8:
2484 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
2485 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8
2486 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
2487 ; CHECK-NEXT: vnsrl.wi v8, v10, 0
2488 ; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
2489 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
2491 %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i8>
2492 ret <vscale x 2 x i8> %evec
2495 define <vscale x 2 x i16> @vfptosi_nxv2f64_nxv2i16(<vscale x 2 x double> %va) {
2496 ; CHECK-LABEL: vfptosi_nxv2f64_nxv2i16:
2498 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
2499 ; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8
2500 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
2501 ; CHECK-NEXT: vnsrl.wi v8, v10, 0
2503 %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i16>
2504 ret <vscale x 2 x i16> %evec
2507 define <vscale x 2 x i16> @vfptoui_nxv2f64_nxv2i16(<vscale x 2 x double> %va) {
2508 ; CHECK-LABEL: vfptoui_nxv2f64_nxv2i16:
2510 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
2511 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8
2512 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
2513 ; CHECK-NEXT: vnsrl.wi v8, v10, 0
2515 %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i16>
2516 ret <vscale x 2 x i16> %evec
2519 define <vscale x 2 x i32> @vfptosi_nxv2f64_nxv2i32(<vscale x 2 x double> %va) {
2520 ; CHECK-LABEL: vfptosi_nxv2f64_nxv2i32:
2522 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
2523 ; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8
2524 ; CHECK-NEXT: vmv.v.v v8, v10
2526 %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i32>
2527 ret <vscale x 2 x i32> %evec
2530 define <vscale x 2 x i32> @vfptoui_nxv2f64_nxv2i32(<vscale x 2 x double> %va) {
2531 ; CHECK-LABEL: vfptoui_nxv2f64_nxv2i32:
2533 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
2534 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8
2535 ; CHECK-NEXT: vmv.v.v v8, v10
2537 %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i32>
2538 ret <vscale x 2 x i32> %evec
2541 define <vscale x 2 x i64> @vfptosi_nxv2f64_nxv2i64(<vscale x 2 x double> %va) {
2542 ; CHECK-LABEL: vfptosi_nxv2f64_nxv2i64:
2544 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
2545 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8
2547 %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i64>
2548 ret <vscale x 2 x i64> %evec
2551 define <vscale x 2 x i64> @vfptoui_nxv2f64_nxv2i64(<vscale x 2 x double> %va) {
2552 ; CHECK-LABEL: vfptoui_nxv2f64_nxv2i64:
2554 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
2555 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8
2557 %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i64>
2558 ret <vscale x 2 x i64> %evec
2561 define <vscale x 4 x i1> @vfptosi_nxv4f64_nxv4i1(<vscale x 4 x double> %va) {
2562 ; CHECK-LABEL: vfptosi_nxv4f64_nxv4i1:
2564 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2565 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8
2566 ; CHECK-NEXT: vand.vi v8, v12, 1
2567 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2569 %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i1>
2570 ret <vscale x 4 x i1> %evec
2573 define <vscale x 4 x i1> @vfptoui_nxv4f64_nxv4i1(<vscale x 4 x double> %va) {
2574 ; CHECK-LABEL: vfptoui_nxv4f64_nxv4i1:
2576 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2577 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8
2578 ; CHECK-NEXT: vand.vi v8, v12, 1
2579 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2581 %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i1>
2582 ret <vscale x 4 x i1> %evec
2585 define <vscale x 4 x i8> @vfptosi_nxv4f64_nxv4i8(<vscale x 4 x double> %va) {
2586 ; CHECK-LABEL: vfptosi_nxv4f64_nxv4i8:
2588 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2589 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8
2590 ; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma
2591 ; CHECK-NEXT: vnsrl.wi v8, v12, 0
2592 ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
2593 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
2595 %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i8>
2596 ret <vscale x 4 x i8> %evec
2599 define <vscale x 4 x i8> @vfptoui_nxv4f64_nxv4i8(<vscale x 4 x double> %va) {
2600 ; CHECK-LABEL: vfptoui_nxv4f64_nxv4i8:
2602 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2603 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8
2604 ; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma
2605 ; CHECK-NEXT: vnsrl.wi v8, v12, 0
2606 ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
2607 ; CHECK-NEXT: vnsrl.wi v8, v8, 0
2609 %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i8>
2610 ret <vscale x 4 x i8> %evec
2613 define <vscale x 4 x i16> @vfptosi_nxv4f64_nxv4i16(<vscale x 4 x double> %va) {
2614 ; CHECK-LABEL: vfptosi_nxv4f64_nxv4i16:
2616 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2617 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8
2618 ; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma
2619 ; CHECK-NEXT: vnsrl.wi v8, v12, 0
2621 %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i16>
2622 ret <vscale x 4 x i16> %evec
2625 define <vscale x 4 x i16> @vfptoui_nxv4f64_nxv4i16(<vscale x 4 x double> %va) {
2626 ; CHECK-LABEL: vfptoui_nxv4f64_nxv4i16:
2628 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2629 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8
2630 ; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma
2631 ; CHECK-NEXT: vnsrl.wi v8, v12, 0
2633 %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i16>
2634 ret <vscale x 4 x i16> %evec
2637 define <vscale x 4 x i32> @vfptosi_nxv4f64_nxv4i32(<vscale x 4 x double> %va) {
2638 ; CHECK-LABEL: vfptosi_nxv4f64_nxv4i32:
2640 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2641 ; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8
2642 ; CHECK-NEXT: vmv.v.v v8, v12
2644 %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i32>
2645 ret <vscale x 4 x i32> %evec
2648 define <vscale x 4 x i32> @vfptoui_nxv4f64_nxv4i32(<vscale x 4 x double> %va) {
2649 ; CHECK-LABEL: vfptoui_nxv4f64_nxv4i32:
2651 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2652 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8
2653 ; CHECK-NEXT: vmv.v.v v8, v12
2655 %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i32>
2656 ret <vscale x 4 x i32> %evec
2659 define <vscale x 4 x i64> @vfptosi_nxv4f64_nxv4i64(<vscale x 4 x double> %va) {
2660 ; CHECK-LABEL: vfptosi_nxv4f64_nxv4i64:
2662 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
2663 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8
2665 %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i64>
2666 ret <vscale x 4 x i64> %evec
2669 define <vscale x 4 x i64> @vfptoui_nxv4f64_nxv4i64(<vscale x 4 x double> %va) {
2670 ; CHECK-LABEL: vfptoui_nxv4f64_nxv4i64:
2672 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
2673 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8
2675 %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i64>
2676 ret <vscale x 4 x i64> %evec
2679 define <vscale x 8 x i1> @vfptosi_nxv8f64_nxv8i1(<vscale x 8 x double> %va) {
2680 ; CHECK-LABEL: vfptosi_nxv8f64_nxv8i1:
2682 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2683 ; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8
2684 ; CHECK-NEXT: vand.vi v8, v16, 1
2685 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2687 %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i1>
2688 ret <vscale x 8 x i1> %evec
2691 define <vscale x 8 x i1> @vfptoui_nxv8f64_nxv8i1(<vscale x 8 x double> %va) {
2692 ; CHECK-LABEL: vfptoui_nxv8f64_nxv8i1:
2694 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2695 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8
2696 ; CHECK-NEXT: vand.vi v8, v16, 1
2697 ; CHECK-NEXT: vmsne.vi v0, v8, 0
2699 %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i1>
2700 ret <vscale x 8 x i1> %evec
2703 define <vscale x 8 x i8> @vfptosi_nxv8f64_nxv8i8(<vscale x 8 x double> %va) {
2704 ; CHECK-LABEL: vfptosi_nxv8f64_nxv8i8:
2706 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2707 ; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8
2708 ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
2709 ; CHECK-NEXT: vnsrl.wi v10, v16, 0
2710 ; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma
2711 ; CHECK-NEXT: vnsrl.wi v8, v10, 0
2713 %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i8>
2714 ret <vscale x 8 x i8> %evec
2717 define <vscale x 8 x i8> @vfptoui_nxv8f64_nxv8i8(<vscale x 8 x double> %va) {
2718 ; CHECK-LABEL: vfptoui_nxv8f64_nxv8i8:
2720 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2721 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8
2722 ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
2723 ; CHECK-NEXT: vnsrl.wi v10, v16, 0
2724 ; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma
2725 ; CHECK-NEXT: vnsrl.wi v8, v10, 0
2727 %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i8>
2728 ret <vscale x 8 x i8> %evec
2731 define <vscale x 8 x i16> @vfptosi_nxv8f64_nxv8i16(<vscale x 8 x double> %va) {
2732 ; CHECK-LABEL: vfptosi_nxv8f64_nxv8i16:
2734 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2735 ; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8
2736 ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
2737 ; CHECK-NEXT: vnsrl.wi v8, v16, 0
2739 %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i16>
2740 ret <vscale x 8 x i16> %evec
2743 define <vscale x 8 x i16> @vfptoui_nxv8f64_nxv8i16(<vscale x 8 x double> %va) {
2744 ; CHECK-LABEL: vfptoui_nxv8f64_nxv8i16:
2746 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2747 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8
2748 ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
2749 ; CHECK-NEXT: vnsrl.wi v8, v16, 0
2751 %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i16>
2752 ret <vscale x 8 x i16> %evec
2755 define <vscale x 8 x i32> @vfptosi_nxv8f64_nxv8i32(<vscale x 8 x double> %va) {
2756 ; CHECK-LABEL: vfptosi_nxv8f64_nxv8i32:
2758 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2759 ; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8
2760 ; CHECK-NEXT: vmv.v.v v8, v16
2762 %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i32>
2763 ret <vscale x 8 x i32> %evec
2766 define <vscale x 8 x i32> @vfptoui_nxv8f64_nxv8i32(<vscale x 8 x double> %va) {
2767 ; CHECK-LABEL: vfptoui_nxv8f64_nxv8i32:
2769 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2770 ; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8
2771 ; CHECK-NEXT: vmv.v.v v8, v16
2773 %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i32>
2774 ret <vscale x 8 x i32> %evec
2777 define <vscale x 8 x i64> @vfptosi_nxv8f64_nxv8i64(<vscale x 8 x double> %va) {
2778 ; CHECK-LABEL: vfptosi_nxv8f64_nxv8i64:
2780 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2781 ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8
2783 %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i64>
2784 ret <vscale x 8 x i64> %evec
2787 define <vscale x 8 x i64> @vfptoui_nxv8f64_nxv8i64(<vscale x 8 x double> %va) {
2788 ; CHECK-LABEL: vfptoui_nxv8f64_nxv8i64:
2790 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2791 ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8
2793 %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i64>
2794 ret <vscale x 8 x i64> %evec