Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / half-round-conv.ll
blobe1c09032459cda93f634a13c52b36fd3bde6afc9
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+zfh,+zvfh,+v -verify-machineinstrs < %s | \
3 ; RUN:   FileCheck %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+zfh,+zvfh,+v -verify-machineinstrs < %s | \
5 ; RUN:   FileCheck %s
7 ; ================================================================================
8 ; trunc <vscale x 1 x half>
9 ; ================================================================================
11 declare <vscale x 1 x half> @llvm.trunc.nxv1f16(<vscale x 1 x half>)
13 define <vscale x 1 x i8> @trunc_nxv1f16_to_si8(<vscale x 1 x half> %x) {
14 ; CHECK-LABEL: trunc_nxv1f16_to_si8:
15 ; CHECK:       # %bb.0:
16 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
17 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
18 ; CHECK-NEXT:    vmv1r.v v8, v9
19 ; CHECK-NEXT:    ret
20   %a = call <vscale x 1 x half> @llvm.trunc.nxv1f16(<vscale x 1 x half> %x)
21   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i8>
22   ret <vscale x 1 x i8> %b
25 define <vscale x 1 x i8> @trunc_nxv1f16_to_ui8(<vscale x 1 x half> %x) {
26 ; CHECK-LABEL: trunc_nxv1f16_to_ui8:
27 ; CHECK:       # %bb.0:
28 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
29 ; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
30 ; CHECK-NEXT:    vmv1r.v v8, v9
31 ; CHECK-NEXT:    ret
32   %a = call <vscale x 1 x half> @llvm.trunc.nxv1f16(<vscale x 1 x half> %x)
33   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i8>
34   ret <vscale x 1 x i8> %b
37 define <vscale x 1 x i16> @trunc_nxv1f16_to_si16(<vscale x 1 x half> %x) {
38 ; CHECK-LABEL: trunc_nxv1f16_to_si16:
39 ; CHECK:       # %bb.0:
40 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
41 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
42 ; CHECK-NEXT:    ret
43   %a = call <vscale x 1 x half> @llvm.trunc.nxv1f16(<vscale x 1 x half> %x)
44   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i16>
45   ret <vscale x 1 x i16> %b
48 define <vscale x 1 x i16> @trunc_nxv1f16_to_ui16(<vscale x 1 x half> %x) {
49 ; CHECK-LABEL: trunc_nxv1f16_to_ui16:
50 ; CHECK:       # %bb.0:
51 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
52 ; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
53 ; CHECK-NEXT:    ret
54   %a = call <vscale x 1 x half> @llvm.trunc.nxv1f16(<vscale x 1 x half> %x)
55   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i16>
56   ret <vscale x 1 x i16> %b
59 define <vscale x 1 x i32> @trunc_nxv1f16_to_si32(<vscale x 1 x half> %x) {
60 ; CHECK-LABEL: trunc_nxv1f16_to_si32:
61 ; CHECK:       # %bb.0:
62 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
63 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v9, v8
64 ; CHECK-NEXT:    vmv1r.v v8, v9
65 ; CHECK-NEXT:    ret
66   %a = call <vscale x 1 x half> @llvm.trunc.nxv1f16(<vscale x 1 x half> %x)
67   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i32>
68   ret <vscale x 1 x i32> %b
71 define <vscale x 1 x i32> @trunc_nxv1f16_to_ui32(<vscale x 1 x half> %x) {
72 ; CHECK-LABEL: trunc_nxv1f16_to_ui32:
73 ; CHECK:       # %bb.0:
74 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
75 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v9, v8
76 ; CHECK-NEXT:    vmv1r.v v8, v9
77 ; CHECK-NEXT:    ret
78   %a = call <vscale x 1 x half> @llvm.trunc.nxv1f16(<vscale x 1 x half> %x)
79   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i32>
80   ret <vscale x 1 x i32> %b
83 define <vscale x 1 x i64> @trunc_nxv1f16_to_si64(<vscale x 1 x half> %x) {
84 ; CHECK-LABEL: trunc_nxv1f16_to_si64:
85 ; CHECK:       # %bb.0:
86 ; CHECK-NEXT:    lui a0, %hi(.LCPI6_0)
87 ; CHECK-NEXT:    flh fa5, %lo(.LCPI6_0)(a0)
88 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
89 ; CHECK-NEXT:    vfabs.v v9, v8
90 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
91 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t
92 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
93 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
94 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
95 ; CHECK-NEXT:    vfwcvt.f.f.v v9, v8
96 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
97 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v9
98 ; CHECK-NEXT:    ret
99   %a = call <vscale x 1 x half> @llvm.trunc.nxv1f16(<vscale x 1 x half> %x)
100   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i64>
101   ret <vscale x 1 x i64> %b
104 define <vscale x 1 x i64> @trunc_nxv1f16_to_ui64(<vscale x 1 x half> %x) {
105 ; CHECK-LABEL: trunc_nxv1f16_to_ui64:
106 ; CHECK:       # %bb.0:
107 ; CHECK-NEXT:    lui a0, %hi(.LCPI7_0)
108 ; CHECK-NEXT:    flh fa5, %lo(.LCPI7_0)(a0)
109 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
110 ; CHECK-NEXT:    vfabs.v v9, v8
111 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
112 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t
113 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
114 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
115 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
116 ; CHECK-NEXT:    vfwcvt.f.f.v v9, v8
117 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
118 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
119 ; CHECK-NEXT:    ret
120   %a = call <vscale x 1 x half> @llvm.trunc.nxv1f16(<vscale x 1 x half> %x)
121   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i64>
122   ret <vscale x 1 x i64> %b
125 ; ================================================================================
126 ; trunc <vscale x 4 x half>
127 ; ================================================================================
129 declare <vscale x 4 x half> @llvm.trunc.nxv4f16(<vscale x 4 x half>)
131 define <vscale x 4 x i8> @trunc_nxv4f16_to_si8(<vscale x 4 x half> %x) {
132 ; CHECK-LABEL: trunc_nxv4f16_to_si8:
133 ; CHECK:       # %bb.0:
134 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
135 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
136 ; CHECK-NEXT:    vmv1r.v v8, v9
137 ; CHECK-NEXT:    ret
138   %a = call <vscale x 4 x half> @llvm.trunc.nxv4f16(<vscale x 4 x half> %x)
139   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i8>
140   ret <vscale x 4 x i8> %b
143 define <vscale x 4 x i8> @trunc_nxv4f16_to_ui8(<vscale x 4 x half> %x) {
144 ; CHECK-LABEL: trunc_nxv4f16_to_ui8:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
147 ; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
148 ; CHECK-NEXT:    vmv1r.v v8, v9
149 ; CHECK-NEXT:    ret
150   %a = call <vscale x 4 x half> @llvm.trunc.nxv4f16(<vscale x 4 x half> %x)
151   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i8>
152   ret <vscale x 4 x i8> %b
155 define <vscale x 4 x i16> @trunc_nxv4f16_to_si16(<vscale x 4 x half> %x) {
156 ; CHECK-LABEL: trunc_nxv4f16_to_si16:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
159 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
160 ; CHECK-NEXT:    ret
161   %a = call <vscale x 4 x half> @llvm.trunc.nxv4f16(<vscale x 4 x half> %x)
162   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i16>
163   ret <vscale x 4 x i16> %b
166 define <vscale x 4 x i16> @trunc_nxv4f16_to_ui16(<vscale x 4 x half> %x) {
167 ; CHECK-LABEL: trunc_nxv4f16_to_ui16:
168 ; CHECK:       # %bb.0:
169 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
170 ; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
171 ; CHECK-NEXT:    ret
172   %a = call <vscale x 4 x half> @llvm.trunc.nxv4f16(<vscale x 4 x half> %x)
173   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i16>
174   ret <vscale x 4 x i16> %b
177 define <vscale x 4 x i32> @trunc_nxv4f16_to_si32(<vscale x 4 x half> %x) {
178 ; CHECK-LABEL: trunc_nxv4f16_to_si32:
179 ; CHECK:       # %bb.0:
180 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
181 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v10, v8
182 ; CHECK-NEXT:    vmv2r.v v8, v10
183 ; CHECK-NEXT:    ret
184   %a = call <vscale x 4 x half> @llvm.trunc.nxv4f16(<vscale x 4 x half> %x)
185   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i32>
186   ret <vscale x 4 x i32> %b
189 define <vscale x 4 x i32> @trunc_nxv4f16_to_ui32(<vscale x 4 x half> %x) {
190 ; CHECK-LABEL: trunc_nxv4f16_to_ui32:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
193 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v10, v8
194 ; CHECK-NEXT:    vmv2r.v v8, v10
195 ; CHECK-NEXT:    ret
196   %a = call <vscale x 4 x half> @llvm.trunc.nxv4f16(<vscale x 4 x half> %x)
197   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i32>
198   ret <vscale x 4 x i32> %b
201 define <vscale x 4 x i64> @trunc_nxv4f16_to_si64(<vscale x 4 x half> %x) {
202 ; CHECK-LABEL: trunc_nxv4f16_to_si64:
203 ; CHECK:       # %bb.0:
204 ; CHECK-NEXT:    lui a0, %hi(.LCPI14_0)
205 ; CHECK-NEXT:    flh fa5, %lo(.LCPI14_0)(a0)
206 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
207 ; CHECK-NEXT:    vfabs.v v9, v8
208 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
209 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t
210 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
211 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
212 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
213 ; CHECK-NEXT:    vfwcvt.f.f.v v12, v8
214 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
215 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v12
216 ; CHECK-NEXT:    ret
217   %a = call <vscale x 4 x half> @llvm.trunc.nxv4f16(<vscale x 4 x half> %x)
218   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i64>
219   ret <vscale x 4 x i64> %b
222 define <vscale x 4 x i64> @trunc_nxv4f16_to_ui64(<vscale x 4 x half> %x) {
223 ; CHECK-LABEL: trunc_nxv4f16_to_ui64:
224 ; CHECK:       # %bb.0:
225 ; CHECK-NEXT:    lui a0, %hi(.LCPI15_0)
226 ; CHECK-NEXT:    flh fa5, %lo(.LCPI15_0)(a0)
227 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
228 ; CHECK-NEXT:    vfabs.v v9, v8
229 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
230 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t
231 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
232 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
233 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
234 ; CHECK-NEXT:    vfwcvt.f.f.v v12, v8
235 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
236 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
237 ; CHECK-NEXT:    ret
238   %a = call <vscale x 4 x half> @llvm.trunc.nxv4f16(<vscale x 4 x half> %x)
239   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i64>
240   ret <vscale x 4 x i64> %b
243 ; ================================================================================
244 ; ceil <vscale x 1 x half>
245 ; ================================================================================
247 declare <vscale x 1 x half> @llvm.ceil.nxv1f16(<vscale x 1 x half>)
249 define <vscale x 1 x i8> @ceil_nxv1f16_to_si8(<vscale x 1 x half> %x) {
250 ; CHECK-LABEL: ceil_nxv1f16_to_si8:
251 ; CHECK:       # %bb.0:
252 ; CHECK-NEXT:    fsrmi a0, 3
253 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
254 ; CHECK-NEXT:    vfncvt.x.f.w v9, v8
255 ; CHECK-NEXT:    fsrm a0
256 ; CHECK-NEXT:    vmv1r.v v8, v9
257 ; CHECK-NEXT:    ret
258   %a = call <vscale x 1 x half> @llvm.ceil.nxv1f16(<vscale x 1 x half> %x)
259   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i8>
260   ret <vscale x 1 x i8> %b
263 define <vscale x 1 x i8> @ceil_nxv1f16_to_ui8(<vscale x 1 x half> %x) {
264 ; CHECK-LABEL: ceil_nxv1f16_to_ui8:
265 ; CHECK:       # %bb.0:
266 ; CHECK-NEXT:    fsrmi a0, 3
267 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
268 ; CHECK-NEXT:    vfncvt.xu.f.w v9, v8
269 ; CHECK-NEXT:    fsrm a0
270 ; CHECK-NEXT:    vmv1r.v v8, v9
271 ; CHECK-NEXT:    ret
272   %a = call <vscale x 1 x half> @llvm.ceil.nxv1f16(<vscale x 1 x half> %x)
273   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i8>
274   ret <vscale x 1 x i8> %b
277 define <vscale x 1 x i16> @ceil_nxv1f16_to_si16(<vscale x 1 x half> %x) {
278 ; CHECK-LABEL: ceil_nxv1f16_to_si16:
279 ; CHECK:       # %bb.0:
280 ; CHECK-NEXT:    fsrmi a0, 3
281 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
282 ; CHECK-NEXT:    vfcvt.x.f.v v8, v8
283 ; CHECK-NEXT:    fsrm a0
284 ; CHECK-NEXT:    ret
285   %a = call <vscale x 1 x half> @llvm.ceil.nxv1f16(<vscale x 1 x half> %x)
286   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i16>
287   ret <vscale x 1 x i16> %b
290 define <vscale x 1 x i16> @ceil_nxv1f16_to_ui16(<vscale x 1 x half> %x) {
291 ; CHECK-LABEL: ceil_nxv1f16_to_ui16:
292 ; CHECK:       # %bb.0:
293 ; CHECK-NEXT:    fsrmi a0, 3
294 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
295 ; CHECK-NEXT:    vfcvt.xu.f.v v8, v8
296 ; CHECK-NEXT:    fsrm a0
297 ; CHECK-NEXT:    ret
298   %a = call <vscale x 1 x half> @llvm.ceil.nxv1f16(<vscale x 1 x half> %x)
299   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i16>
300   ret <vscale x 1 x i16> %b
303 define <vscale x 1 x i32> @ceil_nxv1f16_to_si32(<vscale x 1 x half> %x) {
304 ; CHECK-LABEL: ceil_nxv1f16_to_si32:
305 ; CHECK:       # %bb.0:
306 ; CHECK-NEXT:    fsrmi a0, 3
307 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
308 ; CHECK-NEXT:    vfwcvt.x.f.v v9, v8
309 ; CHECK-NEXT:    fsrm a0
310 ; CHECK-NEXT:    vmv1r.v v8, v9
311 ; CHECK-NEXT:    ret
312   %a = call <vscale x 1 x half> @llvm.ceil.nxv1f16(<vscale x 1 x half> %x)
313   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i32>
314   ret <vscale x 1 x i32> %b
317 define <vscale x 1 x i32> @ceil_nxv1f16_to_ui32(<vscale x 1 x half> %x) {
318 ; CHECK-LABEL: ceil_nxv1f16_to_ui32:
319 ; CHECK:       # %bb.0:
320 ; CHECK-NEXT:    fsrmi a0, 3
321 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
322 ; CHECK-NEXT:    vfwcvt.xu.f.v v9, v8
323 ; CHECK-NEXT:    fsrm a0
324 ; CHECK-NEXT:    vmv1r.v v8, v9
325 ; CHECK-NEXT:    ret
326   %a = call <vscale x 1 x half> @llvm.ceil.nxv1f16(<vscale x 1 x half> %x)
327   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i32>
328   ret <vscale x 1 x i32> %b
331 define <vscale x 1 x i64> @ceil_nxv1f16_to_si64(<vscale x 1 x half> %x) {
332 ; CHECK-LABEL: ceil_nxv1f16_to_si64:
333 ; CHECK:       # %bb.0:
334 ; CHECK-NEXT:    lui a0, %hi(.LCPI22_0)
335 ; CHECK-NEXT:    flh fa5, %lo(.LCPI22_0)(a0)
336 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
337 ; CHECK-NEXT:    vfabs.v v9, v8
338 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
339 ; CHECK-NEXT:    fsrmi a0, 3
340 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
341 ; CHECK-NEXT:    fsrm a0
342 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
343 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
344 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
345 ; CHECK-NEXT:    vfwcvt.f.f.v v9, v8
346 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
347 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v9
348 ; CHECK-NEXT:    ret
349 ; RV32-LABEL: ceil_nxv1f16_to_si64:
350 ; RV32:       # %bb.0:
351 ; RV32-NEXT:    lui a0, %hi(.LCPI22_0)
352 ; RV32-NEXT:    flh fa5, %lo(.LCPI22_0)(a0)
353 ; RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
354 ; RV32-NEXT:    vfabs.v v9, v8
355 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
356 ; RV32-NEXT:    fsrmi a0, 3
357 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
358 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
359 ; RV32-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
360 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
361 ; RV32-NEXT:    vfwcvt.f.f.v v9, v8
362 ; RV32-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
363 ; RV32-NEXT:    vfwcvt.rtz.x.f.v v8, v9
364 ; RV32-NEXT:    fsrm a0
365 ; RV32-NEXT:    ret
366 ; RV64-LABEL: ceil_nxv1f16_to_si64:
367 ; RV64:       # %bb.0:
368 ; RV64-NEXT:    lui a0, %hi(.LCPI22_0)
369 ; RV64-NEXT:    flh fa5, %lo(.LCPI22_0)(a0)
370 ; RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
371 ; RV64-NEXT:    vfabs.v v9, v8
372 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
373 ; RV64-NEXT:    fsrmi a0, 3
374 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
375 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
376 ; RV64-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
377 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
378 ; RV64-NEXT:    vfwcvt.f.f.v v9, v8
379 ; RV64-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
380 ; RV64-NEXT:    vfwcvt.rtz.x.f.v v8, v9
381 ; RV64-NEXT:    fsrm a0
382 ; RV64-NEXT:    ret
383   %a = call <vscale x 1 x half> @llvm.ceil.nxv1f16(<vscale x 1 x half> %x)
384   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i64>
385   ret <vscale x 1 x i64> %b
388 define <vscale x 1 x i64> @ceil_nxv1f16_to_ui64(<vscale x 1 x half> %x) {
389 ; CHECK-LABEL: ceil_nxv1f16_to_ui64:
390 ; CHECK:       # %bb.0:
391 ; CHECK-NEXT:    lui a0, %hi(.LCPI23_0)
392 ; CHECK-NEXT:    flh fa5, %lo(.LCPI23_0)(a0)
393 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
394 ; CHECK-NEXT:    vfabs.v v9, v8
395 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
396 ; CHECK-NEXT:    fsrmi a0, 3
397 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
398 ; CHECK-NEXT:    fsrm a0
399 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
400 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
401 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
402 ; CHECK-NEXT:    vfwcvt.f.f.v v9, v8
403 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
404 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
405 ; CHECK-NEXT:    ret
406 ; RV32-LABEL: ceil_nxv1f16_to_ui64:
407 ; RV32:       # %bb.0:
408 ; RV32-NEXT:    lui a0, %hi(.LCPI23_0)
409 ; RV32-NEXT:    flh fa5, %lo(.LCPI23_0)(a0)
410 ; RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
411 ; RV32-NEXT:    vfabs.v v9, v8
412 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
413 ; RV32-NEXT:    fsrmi a0, 3
414 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
415 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
416 ; RV32-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
417 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
418 ; RV32-NEXT:    vfwcvt.f.f.v v9, v8
419 ; RV32-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
420 ; RV32-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
421 ; RV32-NEXT:    fsrm a0
422 ; RV32-NEXT:    ret
423 ; RV64-LABEL: ceil_nxv1f16_to_ui64:
424 ; RV64:       # %bb.0:
425 ; RV64-NEXT:    lui a0, %hi(.LCPI23_0)
426 ; RV64-NEXT:    flh fa5, %lo(.LCPI23_0)(a0)
427 ; RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
428 ; RV64-NEXT:    vfabs.v v9, v8
429 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
430 ; RV64-NEXT:    fsrmi a0, 3
431 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
432 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
433 ; RV64-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
434 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
435 ; RV64-NEXT:    vfwcvt.f.f.v v9, v8
436 ; RV64-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
437 ; RV64-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
438 ; RV64-NEXT:    fsrm a0
439 ; RV64-NEXT:    ret
440   %a = call <vscale x 1 x half> @llvm.ceil.nxv1f16(<vscale x 1 x half> %x)
441   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i64>
442   ret <vscale x 1 x i64> %b
445 ; ================================================================================
446 ; ceil <vscale x 4 x half>
447 ; ================================================================================
449 declare <vscale x 4 x half> @llvm.ceil.nxv4f16(<vscale x 4 x half>)
451 define <vscale x 4 x i8> @ceil_nxv4f16_to_si8(<vscale x 4 x half> %x) {
452 ; CHECK-LABEL: ceil_nxv4f16_to_si8:
453 ; CHECK:       # %bb.0:
454 ; CHECK-NEXT:    fsrmi a0, 3
455 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
456 ; CHECK-NEXT:    vfncvt.x.f.w v9, v8
457 ; CHECK-NEXT:    fsrm a0
458 ; CHECK-NEXT:    vmv1r.v v8, v9
459 ; CHECK-NEXT:    ret
460   %a = call <vscale x 4 x half> @llvm.ceil.nxv4f16(<vscale x 4 x half> %x)
461   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i8>
462   ret <vscale x 4 x i8> %b
465 define <vscale x 4 x i8> @ceil_nxv4f16_to_ui8(<vscale x 4 x half> %x) {
466 ; CHECK-LABEL: ceil_nxv4f16_to_ui8:
467 ; CHECK:       # %bb.0:
468 ; CHECK-NEXT:    fsrmi a0, 3
469 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
470 ; CHECK-NEXT:    vfncvt.xu.f.w v9, v8
471 ; CHECK-NEXT:    fsrm a0
472 ; CHECK-NEXT:    vmv1r.v v8, v9
473 ; CHECK-NEXT:    ret
474   %a = call <vscale x 4 x half> @llvm.ceil.nxv4f16(<vscale x 4 x half> %x)
475   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i8>
476   ret <vscale x 4 x i8> %b
479 define <vscale x 4 x i16> @ceil_nxv4f16_to_si16(<vscale x 4 x half> %x) {
480 ; CHECK-LABEL: ceil_nxv4f16_to_si16:
481 ; CHECK:       # %bb.0:
482 ; CHECK-NEXT:    fsrmi a0, 3
483 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
484 ; CHECK-NEXT:    vfcvt.x.f.v v8, v8
485 ; CHECK-NEXT:    fsrm a0
486 ; CHECK-NEXT:    ret
487   %a = call <vscale x 4 x half> @llvm.ceil.nxv4f16(<vscale x 4 x half> %x)
488   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i16>
489   ret <vscale x 4 x i16> %b
492 define <vscale x 4 x i16> @ceil_nxv4f16_to_ui16(<vscale x 4 x half> %x) {
493 ; CHECK-LABEL: ceil_nxv4f16_to_ui16:
494 ; CHECK:       # %bb.0:
495 ; CHECK-NEXT:    fsrmi a0, 3
496 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
497 ; CHECK-NEXT:    vfcvt.xu.f.v v8, v8
498 ; CHECK-NEXT:    fsrm a0
499 ; CHECK-NEXT:    ret
500   %a = call <vscale x 4 x half> @llvm.ceil.nxv4f16(<vscale x 4 x half> %x)
501   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i16>
502   ret <vscale x 4 x i16> %b
505 define <vscale x 4 x i32> @ceil_nxv4f16_to_si32(<vscale x 4 x half> %x) {
506 ; CHECK-LABEL: ceil_nxv4f16_to_si32:
507 ; CHECK:       # %bb.0:
508 ; CHECK-NEXT:    fsrmi a0, 3
509 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
510 ; CHECK-NEXT:    vfwcvt.x.f.v v10, v8
511 ; CHECK-NEXT:    fsrm a0
512 ; CHECK-NEXT:    vmv2r.v v8, v10
513 ; CHECK-NEXT:    ret
514   %a = call <vscale x 4 x half> @llvm.ceil.nxv4f16(<vscale x 4 x half> %x)
515   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i32>
516   ret <vscale x 4 x i32> %b
519 define <vscale x 4 x i32> @ceil_nxv4f16_to_ui32(<vscale x 4 x half> %x) {
520 ; CHECK-LABEL: ceil_nxv4f16_to_ui32:
521 ; CHECK:       # %bb.0:
522 ; CHECK-NEXT:    fsrmi a0, 3
523 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
524 ; CHECK-NEXT:    vfwcvt.xu.f.v v10, v8
525 ; CHECK-NEXT:    fsrm a0
526 ; CHECK-NEXT:    vmv2r.v v8, v10
527 ; CHECK-NEXT:    ret
528   %a = call <vscale x 4 x half> @llvm.ceil.nxv4f16(<vscale x 4 x half> %x)
529   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i32>
530   ret <vscale x 4 x i32> %b
533 define <vscale x 4 x i64> @ceil_nxv4f16_to_si64(<vscale x 4 x half> %x) {
534 ; CHECK-LABEL: ceil_nxv4f16_to_si64:
535 ; CHECK:       # %bb.0:
536 ; CHECK-NEXT:    lui a0, %hi(.LCPI30_0)
537 ; CHECK-NEXT:    flh fa5, %lo(.LCPI30_0)(a0)
538 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
539 ; CHECK-NEXT:    vfabs.v v9, v8
540 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
541 ; CHECK-NEXT:    fsrmi a0, 3
542 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
543 ; CHECK-NEXT:    fsrm a0
544 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
545 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
546 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
547 ; CHECK-NEXT:    vfwcvt.f.f.v v12, v8
548 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
549 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v12
550 ; CHECK-NEXT:    ret
551 ; RV32-LABEL: ceil_nxv4f16_to_si64:
552 ; RV32:       # %bb.0:
553 ; RV32-NEXT:    lui a0, %hi(.LCPI30_0)
554 ; RV32-NEXT:    flh fa5, %lo(.LCPI30_0)(a0)
555 ; RV32-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
556 ; RV32-NEXT:    vfabs.v v9, v8
557 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
558 ; RV32-NEXT:    fsrmi a0, 3
559 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
560 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
561 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
562 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
563 ; RV32-NEXT:    vfwcvt.f.f.v v12, v8
564 ; RV32-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
565 ; RV32-NEXT:    vfwcvt.rtz.x.f.v v8, v12
566 ; RV32-NEXT:    fsrm a0
567 ; RV32-NEXT:    ret
568 ; RV64-LABEL: ceil_nxv4f16_to_si64:
569 ; RV64:       # %bb.0:
570 ; RV64-NEXT:    lui a0, %hi(.LCPI30_0)
571 ; RV64-NEXT:    flh fa5, %lo(.LCPI30_0)(a0)
572 ; RV64-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
573 ; RV64-NEXT:    vfabs.v v9, v8
574 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
575 ; RV64-NEXT:    fsrmi a0, 3
576 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
577 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
578 ; RV64-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
579 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
580 ; RV64-NEXT:    vfwcvt.f.f.v v12, v8
581 ; RV64-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
582 ; RV64-NEXT:    vfwcvt.rtz.x.f.v v8, v12
583 ; RV64-NEXT:    fsrm a0
584 ; RV64-NEXT:    ret
585   %a = call <vscale x 4 x half> @llvm.ceil.nxv4f16(<vscale x 4 x half> %x)
586   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i64>
587   ret <vscale x 4 x i64> %b
590 define <vscale x 4 x i64> @ceil_nxv4f16_to_ui64(<vscale x 4 x half> %x) {
591 ; CHECK-LABEL: ceil_nxv4f16_to_ui64:
592 ; CHECK:       # %bb.0:
593 ; CHECK-NEXT:    lui a0, %hi(.LCPI31_0)
594 ; CHECK-NEXT:    flh fa5, %lo(.LCPI31_0)(a0)
595 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
596 ; CHECK-NEXT:    vfabs.v v9, v8
597 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
598 ; CHECK-NEXT:    fsrmi a0, 3
599 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
600 ; CHECK-NEXT:    fsrm a0
601 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
602 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
603 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
604 ; CHECK-NEXT:    vfwcvt.f.f.v v12, v8
605 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
606 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
607 ; CHECK-NEXT:    ret
608 ; RV32-LABEL: ceil_nxv4f16_to_ui64:
609 ; RV32:       # %bb.0:
610 ; RV32-NEXT:    lui a0, %hi(.LCPI31_0)
611 ; RV32-NEXT:    flh fa5, %lo(.LCPI31_0)(a0)
612 ; RV32-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
613 ; RV32-NEXT:    vfabs.v v9, v8
614 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
615 ; RV32-NEXT:    fsrmi a0, 3
616 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
617 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
618 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
619 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
620 ; RV32-NEXT:    vfwcvt.f.f.v v12, v8
621 ; RV32-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
622 ; RV32-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
623 ; RV32-NEXT:    fsrm a0
624 ; RV32-NEXT:    ret
625 ; RV64-LABEL: ceil_nxv4f16_to_ui64:
626 ; RV64:       # %bb.0:
627 ; RV64-NEXT:    lui a0, %hi(.LCPI31_0)
628 ; RV64-NEXT:    flh fa5, %lo(.LCPI31_0)(a0)
629 ; RV64-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
630 ; RV64-NEXT:    vfabs.v v9, v8
631 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
632 ; RV64-NEXT:    fsrmi a0, 3
633 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
634 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
635 ; RV64-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
636 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
637 ; RV64-NEXT:    vfwcvt.f.f.v v12, v8
638 ; RV64-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
639 ; RV64-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
640 ; RV64-NEXT:    fsrm a0
641 ; RV64-NEXT:    ret
642   %a = call <vscale x 4 x half> @llvm.ceil.nxv4f16(<vscale x 4 x half> %x)
643   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i64>
644   ret <vscale x 4 x i64> %b
647 ; ================================================================================
648 ; rint <vscale x 1 x half>
649 ; ================================================================================
651 declare <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half>)
653 define <vscale x 1 x i8> @rint_nxv1f16_to_si8(<vscale x 1 x half> %x) {
654 ; CHECK-LABEL: rint_nxv1f16_to_si8:
655 ; CHECK:       # %bb.0:
656 ; CHECK-NEXT:    lui a0, %hi(.LCPI32_0)
657 ; CHECK-NEXT:    flh fa5, %lo(.LCPI32_0)(a0)
658 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
659 ; CHECK-NEXT:    vfabs.v v9, v8
660 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
661 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
662 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
663 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
664 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
665 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
666 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
667 ; CHECK-NEXT:    vmv1r.v v8, v9
668 ; CHECK-NEXT:    ret
669   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
670   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i8>
671   ret <vscale x 1 x i8> %b
674 define <vscale x 1 x i8> @rint_nxv1f16_to_ui8(<vscale x 1 x half> %x) {
675 ; CHECK-LABEL: rint_nxv1f16_to_ui8:
676 ; CHECK:       # %bb.0:
677 ; CHECK-NEXT:    lui a0, %hi(.LCPI33_0)
678 ; CHECK-NEXT:    flh fa5, %lo(.LCPI33_0)(a0)
679 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
680 ; CHECK-NEXT:    vfabs.v v9, v8
681 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
682 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
683 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
684 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
685 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
686 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
687 ; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
688 ; CHECK-NEXT:    vmv1r.v v8, v9
689 ; CHECK-NEXT:    ret
690   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
691   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i8>
692   ret <vscale x 1 x i8> %b
695 define <vscale x 1 x i16> @rint_nxv1f16_to_si16(<vscale x 1 x half> %x) {
696 ; CHECK-LABEL: rint_nxv1f16_to_si16:
697 ; CHECK:       # %bb.0:
698 ; CHECK-NEXT:    lui a0, %hi(.LCPI34_0)
699 ; CHECK-NEXT:    flh fa5, %lo(.LCPI34_0)(a0)
700 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
701 ; CHECK-NEXT:    vfabs.v v9, v8
702 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
703 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
704 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
705 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
706 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
707 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
708 ; CHECK-NEXT:    ret
709   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
710   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i16>
711   ret <vscale x 1 x i16> %b
714 define <vscale x 1 x i16> @rint_nxv1f16_to_ui16(<vscale x 1 x half> %x) {
715 ; CHECK-LABEL: rint_nxv1f16_to_ui16:
716 ; CHECK:       # %bb.0:
717 ; CHECK-NEXT:    lui a0, %hi(.LCPI35_0)
718 ; CHECK-NEXT:    flh fa5, %lo(.LCPI35_0)(a0)
719 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
720 ; CHECK-NEXT:    vfabs.v v9, v8
721 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
722 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
723 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
724 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
725 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
726 ; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
727 ; CHECK-NEXT:    ret
728   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
729   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i16>
730   ret <vscale x 1 x i16> %b
733 define <vscale x 1 x i32> @rint_nxv1f16_to_si32(<vscale x 1 x half> %x) {
734 ; CHECK-LABEL: rint_nxv1f16_to_si32:
735 ; CHECK:       # %bb.0:
736 ; CHECK-NEXT:    lui a0, %hi(.LCPI36_0)
737 ; CHECK-NEXT:    flh fa5, %lo(.LCPI36_0)(a0)
738 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
739 ; CHECK-NEXT:    vfabs.v v9, v8
740 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
741 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
742 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
743 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
744 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
745 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v9, v8
746 ; CHECK-NEXT:    vmv1r.v v8, v9
747 ; CHECK-NEXT:    ret
748   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
749   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i32>
750   ret <vscale x 1 x i32> %b
753 define <vscale x 1 x i32> @rint_nxv1f16_to_ui32(<vscale x 1 x half> %x) {
754 ; CHECK-LABEL: rint_nxv1f16_to_ui32:
755 ; CHECK:       # %bb.0:
756 ; CHECK-NEXT:    lui a0, %hi(.LCPI37_0)
757 ; CHECK-NEXT:    flh fa5, %lo(.LCPI37_0)(a0)
758 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
759 ; CHECK-NEXT:    vfabs.v v9, v8
760 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
761 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
762 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
763 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
764 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
765 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v9, v8
766 ; CHECK-NEXT:    vmv1r.v v8, v9
767 ; CHECK-NEXT:    ret
768   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
769   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i32>
770   ret <vscale x 1 x i32> %b
773 define <vscale x 1 x i64> @rint_nxv1f16_to_si64(<vscale x 1 x half> %x) {
774 ; CHECK-LABEL: rint_nxv1f16_to_si64:
775 ; CHECK:       # %bb.0:
776 ; CHECK-NEXT:    lui a0, %hi(.LCPI38_0)
777 ; CHECK-NEXT:    flh fa5, %lo(.LCPI38_0)(a0)
778 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
779 ; CHECK-NEXT:    vfabs.v v9, v8
780 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
781 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
782 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
783 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
784 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
785 ; CHECK-NEXT:    vfwcvt.f.f.v v9, v8
786 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
787 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v9
788 ; CHECK-NEXT:    ret
789 ; RV32-LABEL: rint_nxv1f16_to_si64:
790 ; RV32:       # %bb.0:
791 ; RV32-NEXT:    lui a0, %hi(.LCPI22_0)
792 ; RV32-NEXT:    flh fa5, %lo(.LCPI22_0)(a0)
793 ; RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
794 ; RV32-NEXT:    vfabs.v v9, v8
795 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
796 ; RV32-NEXT:    fsrmi a0, 3
797 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
798 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
799 ; RV32-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
800 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
801 ; RV32-NEXT:    vfwcvt.f.f.v v9, v8
802 ; RV32-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
803 ; RV32-NEXT:    vfwcvt.rtz.x.f.v v8, v9
804 ; RV32-NEXT:    fsrm a0
805 ; RV32-NEXT:    ret
806 ; RV64-LABEL: rint_nxv1f16_to_si64:
807 ; RV64:       # %bb.0:
808 ; RV64-NEXT:    lui a0, %hi(.LCPI22_0)
809 ; RV64-NEXT:    flh fa5, %lo(.LCPI22_0)(a0)
810 ; RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
811 ; RV64-NEXT:    vfabs.v v9, v8
812 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
813 ; RV64-NEXT:    fsrmi a0, 3
814 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
815 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
816 ; RV64-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
817 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
818 ; RV64-NEXT:    vfwcvt.f.f.v v9, v8
819 ; RV64-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
820 ; RV64-NEXT:    vfwcvt.rtz.x.f.v v8, v9
821 ; RV64-NEXT:    fsrm a0
822 ; RV64-NEXT:    ret
823   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
824   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i64>
825   ret <vscale x 1 x i64> %b
828 define <vscale x 1 x i64> @rint_nxv1f16_to_ui64(<vscale x 1 x half> %x) {
829 ; CHECK-LABEL: rint_nxv1f16_to_ui64:
830 ; CHECK:       # %bb.0:
831 ; CHECK-NEXT:    lui a0, %hi(.LCPI39_0)
832 ; CHECK-NEXT:    flh fa5, %lo(.LCPI39_0)(a0)
833 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
834 ; CHECK-NEXT:    vfabs.v v9, v8
835 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
836 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
837 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
838 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
839 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
840 ; CHECK-NEXT:    vfwcvt.f.f.v v9, v8
841 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
842 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
843 ; CHECK-NEXT:    ret
844 ; RV32-LABEL: rint_nxv1f16_to_ui64:
845 ; RV32:       # %bb.0:
846 ; RV32-NEXT:    lui a0, %hi(.LCPI23_0)
847 ; RV32-NEXT:    flh fa5, %lo(.LCPI23_0)(a0)
848 ; RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
849 ; RV32-NEXT:    vfabs.v v9, v8
850 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
851 ; RV32-NEXT:    fsrmi a0, 3
852 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
853 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
854 ; RV32-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
855 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
856 ; RV32-NEXT:    vfwcvt.f.f.v v9, v8
857 ; RV32-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
858 ; RV32-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
859 ; RV32-NEXT:    fsrm a0
860 ; RV32-NEXT:    ret
861 ; RV64-LABEL: rint_nxv1f16_to_ui64:
862 ; RV64:       # %bb.0:
863 ; RV64-NEXT:    lui a0, %hi(.LCPI23_0)
864 ; RV64-NEXT:    flh fa5, %lo(.LCPI23_0)(a0)
865 ; RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
866 ; RV64-NEXT:    vfabs.v v9, v8
867 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
868 ; RV64-NEXT:    fsrmi a0, 3
869 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
870 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
871 ; RV64-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
872 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
873 ; RV64-NEXT:    vfwcvt.f.f.v v9, v8
874 ; RV64-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
875 ; RV64-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
876 ; RV64-NEXT:    fsrm a0
877 ; RV64-NEXT:    ret
878   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
879   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i64>
880   ret <vscale x 1 x i64> %b
883 ; ================================================================================
884 ; rint <vscale x 4 x half>
885 ; ================================================================================
887 declare <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half>)
889 define <vscale x 4 x i8> @rint_nxv4f16_to_si8(<vscale x 4 x half> %x) {
890 ; CHECK-LABEL: rint_nxv4f16_to_si8:
891 ; CHECK:       # %bb.0:
892 ; CHECK-NEXT:    lui a0, %hi(.LCPI40_0)
893 ; CHECK-NEXT:    flh fa5, %lo(.LCPI40_0)(a0)
894 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
895 ; CHECK-NEXT:    vfabs.v v9, v8
896 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
897 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
898 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
899 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
900 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
901 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
902 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
903 ; CHECK-NEXT:    vmv1r.v v8, v9
904 ; CHECK-NEXT:    ret
905   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
906   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i8>
907   ret <vscale x 4 x i8> %b
910 define <vscale x 4 x i8> @rint_nxv4f16_to_ui8(<vscale x 4 x half> %x) {
911 ; CHECK-LABEL: rint_nxv4f16_to_ui8:
912 ; CHECK:       # %bb.0:
913 ; CHECK-NEXT:    lui a0, %hi(.LCPI41_0)
914 ; CHECK-NEXT:    flh fa5, %lo(.LCPI41_0)(a0)
915 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
916 ; CHECK-NEXT:    vfabs.v v9, v8
917 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
918 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
919 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
920 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
921 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
922 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
923 ; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8
924 ; CHECK-NEXT:    vmv1r.v v8, v9
925 ; CHECK-NEXT:    ret
926   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
927   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i8>
928   ret <vscale x 4 x i8> %b
931 define <vscale x 4 x i16> @rint_nxv4f16_to_si16(<vscale x 4 x half> %x) {
932 ; CHECK-LABEL: rint_nxv4f16_to_si16:
933 ; CHECK:       # %bb.0:
934 ; CHECK-NEXT:    lui a0, %hi(.LCPI42_0)
935 ; CHECK-NEXT:    flh fa5, %lo(.LCPI42_0)(a0)
936 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
937 ; CHECK-NEXT:    vfabs.v v9, v8
938 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
939 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
940 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
941 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
942 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
943 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
944 ; CHECK-NEXT:    ret
945   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
946   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i16>
947   ret <vscale x 4 x i16> %b
950 define <vscale x 4 x i16> @rint_nxv4f16_to_ui16(<vscale x 4 x half> %x) {
951 ; CHECK-LABEL: rint_nxv4f16_to_ui16:
952 ; CHECK:       # %bb.0:
953 ; CHECK-NEXT:    lui a0, %hi(.LCPI43_0)
954 ; CHECK-NEXT:    flh fa5, %lo(.LCPI43_0)(a0)
955 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
956 ; CHECK-NEXT:    vfabs.v v9, v8
957 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
958 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
959 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
960 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
961 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
962 ; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8
963 ; CHECK-NEXT:    ret
964   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
965   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i16>
966   ret <vscale x 4 x i16> %b
969 define <vscale x 4 x i32> @rint_nxv4f16_to_si32(<vscale x 4 x half> %x) {
970 ; CHECK-LABEL: rint_nxv4f16_to_si32:
971 ; CHECK:       # %bb.0:
972 ; CHECK-NEXT:    lui a0, %hi(.LCPI44_0)
973 ; CHECK-NEXT:    flh fa5, %lo(.LCPI44_0)(a0)
974 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
975 ; CHECK-NEXT:    vfabs.v v9, v8
976 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
977 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
978 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
979 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
980 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
981 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v10, v8
982 ; CHECK-NEXT:    vmv2r.v v8, v10
983 ; CHECK-NEXT:    ret
984   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
985   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i32>
986   ret <vscale x 4 x i32> %b
989 define <vscale x 4 x i32> @rint_nxv4f16_to_ui32(<vscale x 4 x half> %x) {
990 ; CHECK-LABEL: rint_nxv4f16_to_ui32:
991 ; CHECK:       # %bb.0:
992 ; CHECK-NEXT:    lui a0, %hi(.LCPI45_0)
993 ; CHECK-NEXT:    flh fa5, %lo(.LCPI45_0)(a0)
994 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
995 ; CHECK-NEXT:    vfabs.v v9, v8
996 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
997 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
998 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
999 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1000 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
1001 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v10, v8
1002 ; CHECK-NEXT:    vmv2r.v v8, v10
1003 ; CHECK-NEXT:    ret
1004   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
1005   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i32>
1006   ret <vscale x 4 x i32> %b
1009 define <vscale x 4 x i64> @rint_nxv4f16_to_si64(<vscale x 4 x half> %x) {
1010 ; CHECK-LABEL: rint_nxv4f16_to_si64:
1011 ; CHECK:       # %bb.0:
1012 ; CHECK-NEXT:    lui a0, %hi(.LCPI46_0)
1013 ; CHECK-NEXT:    flh fa5, %lo(.LCPI46_0)(a0)
1014 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1015 ; CHECK-NEXT:    vfabs.v v9, v8
1016 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
1017 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
1018 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
1019 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1020 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
1021 ; CHECK-NEXT:    vfwcvt.f.f.v v12, v8
1022 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1023 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v12
1024 ; CHECK-NEXT:    ret
1025 ; RV32-LABEL: rint_nxv4f16_to_si64:
1026 ; RV32:       # %bb.0:
1027 ; RV32-NEXT:    lui a0, %hi(.LCPI30_0)
1028 ; RV32-NEXT:    flh fa5, %lo(.LCPI30_0)(a0)
1029 ; RV32-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1030 ; RV32-NEXT:    vfabs.v v9, v8
1031 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
1032 ; RV32-NEXT:    fsrmi a0, 3
1033 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
1034 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
1035 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1036 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
1037 ; RV32-NEXT:    vfwcvt.f.f.v v12, v8
1038 ; RV32-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1039 ; RV32-NEXT:    vfwcvt.rtz.x.f.v v8, v12
1040 ; RV32-NEXT:    fsrm a0
1041 ; RV32-NEXT:    ret
1042 ; RV64-LABEL: rint_nxv4f16_to_si64:
1043 ; RV64:       # %bb.0:
1044 ; RV64-NEXT:    lui a0, %hi(.LCPI30_0)
1045 ; RV64-NEXT:    flh fa5, %lo(.LCPI30_0)(a0)
1046 ; RV64-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1047 ; RV64-NEXT:    vfabs.v v9, v8
1048 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
1049 ; RV64-NEXT:    fsrmi a0, 3
1050 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
1051 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
1052 ; RV64-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1053 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
1054 ; RV64-NEXT:    vfwcvt.f.f.v v12, v8
1055 ; RV64-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1056 ; RV64-NEXT:    vfwcvt.rtz.x.f.v v8, v12
1057 ; RV64-NEXT:    fsrm a0
1058 ; RV64-NEXT:    ret
1059   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
1060   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i64>
1061   ret <vscale x 4 x i64> %b
1064 define <vscale x 4 x i64> @rint_nxv4f16_to_ui64(<vscale x 4 x half> %x) {
1065 ; CHECK-LABEL: rint_nxv4f16_to_ui64:
1066 ; CHECK:       # %bb.0:
1067 ; CHECK-NEXT:    lui a0, %hi(.LCPI47_0)
1068 ; CHECK-NEXT:    flh fa5, %lo(.LCPI47_0)(a0)
1069 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1070 ; CHECK-NEXT:    vfabs.v v9, v8
1071 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
1072 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
1073 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
1074 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1075 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
1076 ; CHECK-NEXT:    vfwcvt.f.f.v v12, v8
1077 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1078 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
1079 ; CHECK-NEXT:    ret
1080 ; RV32-LABEL: rint_nxv4f16_to_ui64:
1081 ; RV32:       # %bb.0:
1082 ; RV32-NEXT:    lui a0, %hi(.LCPI31_0)
1083 ; RV32-NEXT:    flh fa5, %lo(.LCPI31_0)(a0)
1084 ; RV32-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1085 ; RV32-NEXT:    vfabs.v v9, v8
1086 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
1087 ; RV32-NEXT:    fsrmi a0, 3
1088 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
1089 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
1090 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1091 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
1092 ; RV32-NEXT:    vfwcvt.f.f.v v12, v8
1093 ; RV32-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1094 ; RV32-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
1095 ; RV32-NEXT:    fsrm a0
1096 ; RV32-NEXT:    ret
1097 ; RV64-LABEL: rint_nxv4f16_to_ui64:
1098 ; RV64:       # %bb.0:
1099 ; RV64-NEXT:    lui a0, %hi(.LCPI31_0)
1100 ; RV64-NEXT:    flh fa5, %lo(.LCPI31_0)(a0)
1101 ; RV64-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1102 ; RV64-NEXT:    vfabs.v v9, v8
1103 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
1104 ; RV64-NEXT:    fsrmi a0, 3
1105 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
1106 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
1107 ; RV64-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1108 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
1109 ; RV64-NEXT:    vfwcvt.f.f.v v12, v8
1110 ; RV64-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1111 ; RV64-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
1112 ; RV64-NEXT:    fsrm a0
1113 ; RV64-NEXT:    ret
1114   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
1115   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i64>
1116   ret <vscale x 4 x i64> %b