[Transforms] Silence a warning in SROA.cpp (NFC)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / half-round-conv.ll
blob4d47c265a97471917c571d8965662abb8d685a35
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+zvfh,+v -verify-machineinstrs < %s | \
3 ; RUN:   FileCheck %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+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:    vsetvli a0, zero, e8, mf8, ta, ma
657 ; CHECK-NEXT:    vfncvt.x.f.w v9, v8
658 ; CHECK-NEXT:    vmv1r.v v8, v9
659 ; CHECK-NEXT:    ret
660   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
661   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i8>
662   ret <vscale x 1 x i8> %b
665 define <vscale x 1 x i8> @rint_nxv1f16_to_ui8(<vscale x 1 x half> %x) {
666 ; CHECK-LABEL: rint_nxv1f16_to_ui8:
667 ; CHECK:       # %bb.0:
668 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
669 ; CHECK-NEXT:    vfncvt.xu.f.w v9, v8
670 ; CHECK-NEXT:    vmv1r.v v8, v9
671 ; CHECK-NEXT:    ret
672   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
673   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i8>
674   ret <vscale x 1 x i8> %b
677 define <vscale x 1 x i16> @rint_nxv1f16_to_si16(<vscale x 1 x half> %x) {
678 ; CHECK-LABEL: rint_nxv1f16_to_si16:
679 ; CHECK:       # %bb.0:
680 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
681 ; CHECK-NEXT:    vfcvt.x.f.v v8, v8
682 ; CHECK-NEXT:    ret
683   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
684   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i16>
685   ret <vscale x 1 x i16> %b
688 define <vscale x 1 x i16> @rint_nxv1f16_to_ui16(<vscale x 1 x half> %x) {
689 ; CHECK-LABEL: rint_nxv1f16_to_ui16:
690 ; CHECK:       # %bb.0:
691 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
692 ; CHECK-NEXT:    vfcvt.xu.f.v v8, v8
693 ; CHECK-NEXT:    ret
694   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
695   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i16>
696   ret <vscale x 1 x i16> %b
699 define <vscale x 1 x i32> @rint_nxv1f16_to_si32(<vscale x 1 x half> %x) {
700 ; CHECK-LABEL: rint_nxv1f16_to_si32:
701 ; CHECK:       # %bb.0:
702 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
703 ; CHECK-NEXT:    vfwcvt.x.f.v v9, v8
704 ; CHECK-NEXT:    vmv1r.v v8, v9
705 ; CHECK-NEXT:    ret
706   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
707   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i32>
708   ret <vscale x 1 x i32> %b
711 define <vscale x 1 x i32> @rint_nxv1f16_to_ui32(<vscale x 1 x half> %x) {
712 ; CHECK-LABEL: rint_nxv1f16_to_ui32:
713 ; CHECK:       # %bb.0:
714 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
715 ; CHECK-NEXT:    vfwcvt.xu.f.v v9, v8
716 ; CHECK-NEXT:    vmv1r.v v8, v9
717 ; CHECK-NEXT:    ret
718   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
719   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i32>
720   ret <vscale x 1 x i32> %b
723 define <vscale x 1 x i64> @rint_nxv1f16_to_si64(<vscale x 1 x half> %x) {
724 ; CHECK-LABEL: rint_nxv1f16_to_si64:
725 ; CHECK:       # %bb.0:
726 ; CHECK-NEXT:    lui a0, %hi(.LCPI38_0)
727 ; CHECK-NEXT:    flh fa5, %lo(.LCPI38_0)(a0)
728 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
729 ; CHECK-NEXT:    vfabs.v v9, v8
730 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
731 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
732 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
733 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
734 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
735 ; CHECK-NEXT:    vfwcvt.f.f.v v9, v8
736 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
737 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v9
738 ; CHECK-NEXT:    ret
739 ; RV32-LABEL: rint_nxv1f16_to_si64:
740 ; RV32:       # %bb.0:
741 ; RV32-NEXT:    lui a0, %hi(.LCPI22_0)
742 ; RV32-NEXT:    flh fa5, %lo(.LCPI22_0)(a0)
743 ; RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
744 ; RV32-NEXT:    vfabs.v v9, v8
745 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
746 ; RV32-NEXT:    fsrmi a0, 3
747 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
748 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
749 ; RV32-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
750 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
751 ; RV32-NEXT:    vfwcvt.f.f.v v9, v8
752 ; RV32-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
753 ; RV32-NEXT:    vfwcvt.rtz.x.f.v v8, v9
754 ; RV32-NEXT:    fsrm a0
755 ; RV32-NEXT:    ret
756 ; RV64-LABEL: rint_nxv1f16_to_si64:
757 ; RV64:       # %bb.0:
758 ; RV64-NEXT:    lui a0, %hi(.LCPI22_0)
759 ; RV64-NEXT:    flh fa5, %lo(.LCPI22_0)(a0)
760 ; RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
761 ; RV64-NEXT:    vfabs.v v9, v8
762 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
763 ; RV64-NEXT:    fsrmi a0, 3
764 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
765 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
766 ; RV64-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
767 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
768 ; RV64-NEXT:    vfwcvt.f.f.v v9, v8
769 ; RV64-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
770 ; RV64-NEXT:    vfwcvt.rtz.x.f.v v8, v9
771 ; RV64-NEXT:    fsrm a0
772 ; RV64-NEXT:    ret
773   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
774   %b = fptosi <vscale x 1 x half> %a to <vscale x 1 x i64>
775   ret <vscale x 1 x i64> %b
778 define <vscale x 1 x i64> @rint_nxv1f16_to_ui64(<vscale x 1 x half> %x) {
779 ; CHECK-LABEL: rint_nxv1f16_to_ui64:
780 ; CHECK:       # %bb.0:
781 ; CHECK-NEXT:    lui a0, %hi(.LCPI39_0)
782 ; CHECK-NEXT:    flh fa5, %lo(.LCPI39_0)(a0)
783 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
784 ; CHECK-NEXT:    vfabs.v v9, v8
785 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
786 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
787 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
788 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
789 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
790 ; CHECK-NEXT:    vfwcvt.f.f.v v9, v8
791 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
792 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
793 ; CHECK-NEXT:    ret
794 ; RV32-LABEL: rint_nxv1f16_to_ui64:
795 ; RV32:       # %bb.0:
796 ; RV32-NEXT:    lui a0, %hi(.LCPI23_0)
797 ; RV32-NEXT:    flh fa5, %lo(.LCPI23_0)(a0)
798 ; RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
799 ; RV32-NEXT:    vfabs.v v9, v8
800 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
801 ; RV32-NEXT:    fsrmi a0, 3
802 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
803 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
804 ; RV32-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
805 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
806 ; RV32-NEXT:    vfwcvt.f.f.v v9, v8
807 ; RV32-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
808 ; RV32-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
809 ; RV32-NEXT:    fsrm a0
810 ; RV32-NEXT:    ret
811 ; RV64-LABEL: rint_nxv1f16_to_ui64:
812 ; RV64:       # %bb.0:
813 ; RV64-NEXT:    lui a0, %hi(.LCPI23_0)
814 ; RV64-NEXT:    flh fa5, %lo(.LCPI23_0)(a0)
815 ; RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
816 ; RV64-NEXT:    vfabs.v v9, v8
817 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
818 ; RV64-NEXT:    fsrmi a0, 3
819 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
820 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
821 ; RV64-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
822 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
823 ; RV64-NEXT:    vfwcvt.f.f.v v9, v8
824 ; RV64-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
825 ; RV64-NEXT:    vfwcvt.rtz.xu.f.v v8, v9
826 ; RV64-NEXT:    fsrm a0
827 ; RV64-NEXT:    ret
828   %a = call <vscale x 1 x half> @llvm.rint.nxv1f16(<vscale x 1 x half> %x)
829   %b = fptoui <vscale x 1 x half> %a to <vscale x 1 x i64>
830   ret <vscale x 1 x i64> %b
833 ; ================================================================================
834 ; rint <vscale x 4 x half>
835 ; ================================================================================
837 declare <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half>)
839 define <vscale x 4 x i8> @rint_nxv4f16_to_si8(<vscale x 4 x half> %x) {
840 ; CHECK-LABEL: rint_nxv4f16_to_si8:
841 ; CHECK:       # %bb.0:
842 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
843 ; CHECK-NEXT:    vfncvt.x.f.w v9, v8
844 ; CHECK-NEXT:    vmv1r.v v8, v9
845 ; CHECK-NEXT:    ret
846   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
847   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i8>
848   ret <vscale x 4 x i8> %b
851 define <vscale x 4 x i8> @rint_nxv4f16_to_ui8(<vscale x 4 x half> %x) {
852 ; CHECK-LABEL: rint_nxv4f16_to_ui8:
853 ; CHECK:       # %bb.0:
854 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
855 ; CHECK-NEXT:    vfncvt.xu.f.w v9, v8
856 ; CHECK-NEXT:    vmv1r.v v8, v9
857 ; CHECK-NEXT:    ret
858   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
859   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i8>
860   ret <vscale x 4 x i8> %b
863 define <vscale x 4 x i16> @rint_nxv4f16_to_si16(<vscale x 4 x half> %x) {
864 ; CHECK-LABEL: rint_nxv4f16_to_si16:
865 ; CHECK:       # %bb.0:
866 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
867 ; CHECK-NEXT:    vfcvt.x.f.v v8, v8
868 ; CHECK-NEXT:    ret
869   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
870   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i16>
871   ret <vscale x 4 x i16> %b
874 define <vscale x 4 x i16> @rint_nxv4f16_to_ui16(<vscale x 4 x half> %x) {
875 ; CHECK-LABEL: rint_nxv4f16_to_ui16:
876 ; CHECK:       # %bb.0:
877 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
878 ; CHECK-NEXT:    vfcvt.xu.f.v v8, v8
879 ; CHECK-NEXT:    ret
880   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
881   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i16>
882   ret <vscale x 4 x i16> %b
885 define <vscale x 4 x i32> @rint_nxv4f16_to_si32(<vscale x 4 x half> %x) {
886 ; CHECK-LABEL: rint_nxv4f16_to_si32:
887 ; CHECK:       # %bb.0:
888 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
889 ; CHECK-NEXT:    vfwcvt.x.f.v v10, v8
890 ; CHECK-NEXT:    vmv2r.v v8, v10
891 ; CHECK-NEXT:    ret
892   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
893   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i32>
894   ret <vscale x 4 x i32> %b
897 define <vscale x 4 x i32> @rint_nxv4f16_to_ui32(<vscale x 4 x half> %x) {
898 ; CHECK-LABEL: rint_nxv4f16_to_ui32:
899 ; CHECK:       # %bb.0:
900 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
901 ; CHECK-NEXT:    vfwcvt.xu.f.v v10, v8
902 ; CHECK-NEXT:    vmv2r.v v8, v10
903 ; CHECK-NEXT:    ret
904   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
905   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i32>
906   ret <vscale x 4 x i32> %b
909 define <vscale x 4 x i64> @rint_nxv4f16_to_si64(<vscale x 4 x half> %x) {
910 ; CHECK-LABEL: rint_nxv4f16_to_si64:
911 ; CHECK:       # %bb.0:
912 ; CHECK-NEXT:    lui a0, %hi(.LCPI46_0)
913 ; CHECK-NEXT:    flh fa5, %lo(.LCPI46_0)(a0)
914 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
915 ; CHECK-NEXT:    vfabs.v v9, v8
916 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
917 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
918 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
919 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
920 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
921 ; CHECK-NEXT:    vfwcvt.f.f.v v12, v8
922 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
923 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v12
924 ; CHECK-NEXT:    ret
925 ; RV32-LABEL: rint_nxv4f16_to_si64:
926 ; RV32:       # %bb.0:
927 ; RV32-NEXT:    lui a0, %hi(.LCPI30_0)
928 ; RV32-NEXT:    flh fa5, %lo(.LCPI30_0)(a0)
929 ; RV32-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
930 ; RV32-NEXT:    vfabs.v v9, v8
931 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
932 ; RV32-NEXT:    fsrmi a0, 3
933 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
934 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
935 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
936 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
937 ; RV32-NEXT:    vfwcvt.f.f.v v12, v8
938 ; RV32-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
939 ; RV32-NEXT:    vfwcvt.rtz.x.f.v v8, v12
940 ; RV32-NEXT:    fsrm a0
941 ; RV32-NEXT:    ret
942 ; RV64-LABEL: rint_nxv4f16_to_si64:
943 ; RV64:       # %bb.0:
944 ; RV64-NEXT:    lui a0, %hi(.LCPI30_0)
945 ; RV64-NEXT:    flh fa5, %lo(.LCPI30_0)(a0)
946 ; RV64-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
947 ; RV64-NEXT:    vfabs.v v9, v8
948 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
949 ; RV64-NEXT:    fsrmi a0, 3
950 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
951 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
952 ; RV64-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
953 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
954 ; RV64-NEXT:    vfwcvt.f.f.v v12, v8
955 ; RV64-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
956 ; RV64-NEXT:    vfwcvt.rtz.x.f.v v8, v12
957 ; RV64-NEXT:    fsrm a0
958 ; RV64-NEXT:    ret
959   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
960   %b = fptosi <vscale x 4 x half> %a to <vscale x 4 x i64>
961   ret <vscale x 4 x i64> %b
964 define <vscale x 4 x i64> @rint_nxv4f16_to_ui64(<vscale x 4 x half> %x) {
965 ; CHECK-LABEL: rint_nxv4f16_to_ui64:
966 ; CHECK:       # %bb.0:
967 ; CHECK-NEXT:    lui a0, %hi(.LCPI47_0)
968 ; CHECK-NEXT:    flh fa5, %lo(.LCPI47_0)(a0)
969 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
970 ; CHECK-NEXT:    vfabs.v v9, v8
971 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
972 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
973 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
974 ; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
975 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
976 ; CHECK-NEXT:    vfwcvt.f.f.v v12, v8
977 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
978 ; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
979 ; CHECK-NEXT:    ret
980 ; RV32-LABEL: rint_nxv4f16_to_ui64:
981 ; RV32:       # %bb.0:
982 ; RV32-NEXT:    lui a0, %hi(.LCPI31_0)
983 ; RV32-NEXT:    flh fa5, %lo(.LCPI31_0)(a0)
984 ; RV32-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
985 ; RV32-NEXT:    vfabs.v v9, v8
986 ; RV32-NEXT:    vmflt.vf v0, v9, fa5
987 ; RV32-NEXT:    fsrmi a0, 3
988 ; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t
989 ; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t
990 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
991 ; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
992 ; RV32-NEXT:    vfwcvt.f.f.v v12, v8
993 ; RV32-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
994 ; RV32-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
995 ; RV32-NEXT:    fsrm a0
996 ; RV32-NEXT:    ret
997 ; RV64-LABEL: rint_nxv4f16_to_ui64:
998 ; RV64:       # %bb.0:
999 ; RV64-NEXT:    lui a0, %hi(.LCPI31_0)
1000 ; RV64-NEXT:    flh fa5, %lo(.LCPI31_0)(a0)
1001 ; RV64-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1002 ; RV64-NEXT:    vfabs.v v9, v8
1003 ; RV64-NEXT:    vmflt.vf v0, v9, fa5
1004 ; RV64-NEXT:    fsrmi a0, 3
1005 ; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t
1006 ; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t
1007 ; RV64-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1008 ; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
1009 ; RV64-NEXT:    vfwcvt.f.f.v v12, v8
1010 ; RV64-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1011 ; RV64-NEXT:    vfwcvt.rtz.xu.f.v v8, v12
1012 ; RV64-NEXT:    fsrm a0
1013 ; RV64-NEXT:    ret
1014   %a = call <vscale x 4 x half> @llvm.rint.nxv4f16(<vscale x 4 x half> %x)
1015   %b = fptoui <vscale x 4 x half> %a to <vscale x 4 x i64>
1016   ret <vscale x 4 x i64> %b