Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / rint-vp.ll
blob88bd92c6ec16126cb50fa57054cee721a436ecea
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
6 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=ilp32d \
7 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
8 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=lp64d \
9 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
11 declare <vscale x 1 x half> @llvm.vp.rint.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
13 define <vscale x 1 x half> @vp_rint_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14 ; ZVFH-LABEL: vp_rint_nxv1f16:
15 ; ZVFH:       # %bb.0:
16 ; ZVFH-NEXT:    lui a1, %hi(.LCPI0_0)
17 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI0_0)(a1)
18 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
19 ; ZVFH-NEXT:    vfabs.v v9, v8, v0.t
20 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
21 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5, v0.t
22 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
23 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
24 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
25 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
26 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
27 ; ZVFH-NEXT:    ret
29 ; ZVFHMIN-LABEL: vp_rint_nxv1f16:
30 ; ZVFHMIN:       # %bb.0:
31 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
32 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
33 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
34 ; ZVFHMIN-NEXT:    vfabs.v v8, v9, v0.t
35 ; ZVFHMIN-NEXT:    lui a0, 307200
36 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
37 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
38 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5, v0.t
39 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
40 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v9, v0.t
41 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
42 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
43 ; ZVFHMIN-NEXT:    vfsgnj.vv v9, v8, v9, v0.t
44 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
45 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
46 ; ZVFHMIN-NEXT:    ret
47   %v = call <vscale x 1 x half> @llvm.vp.rint.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl)
48   ret <vscale x 1 x half> %v
51 define <vscale x 1 x half> @vp_rint_nxv1f16_unmasked(<vscale x 1 x half> %va, i32 zeroext %evl) {
52 ; ZVFH-LABEL: vp_rint_nxv1f16_unmasked:
53 ; ZVFH:       # %bb.0:
54 ; ZVFH-NEXT:    lui a1, %hi(.LCPI1_0)
55 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI1_0)(a1)
56 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
57 ; ZVFH-NEXT:    vfabs.v v9, v8
58 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5
59 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
60 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
61 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
62 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
63 ; ZVFH-NEXT:    ret
65 ; ZVFHMIN-LABEL: vp_rint_nxv1f16_unmasked:
66 ; ZVFHMIN:       # %bb.0:
67 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
68 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
69 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
70 ; ZVFHMIN-NEXT:    vfabs.v v8, v9
71 ; ZVFHMIN-NEXT:    lui a0, 307200
72 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
73 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5
74 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v9, v0.t
75 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
76 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
77 ; ZVFHMIN-NEXT:    vfsgnj.vv v9, v8, v9, v0.t
78 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
79 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
80 ; ZVFHMIN-NEXT:    ret
81   %v = call <vscale x 1 x half> @llvm.vp.rint.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
82   ret <vscale x 1 x half> %v
85 declare <vscale x 2 x half> @llvm.vp.rint.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
87 define <vscale x 2 x half> @vp_rint_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
88 ; ZVFH-LABEL: vp_rint_nxv2f16:
89 ; ZVFH:       # %bb.0:
90 ; ZVFH-NEXT:    lui a1, %hi(.LCPI2_0)
91 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI2_0)(a1)
92 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
93 ; ZVFH-NEXT:    vfabs.v v9, v8, v0.t
94 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
95 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5, v0.t
96 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
97 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
98 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
99 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
100 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
101 ; ZVFH-NEXT:    ret
103 ; ZVFHMIN-LABEL: vp_rint_nxv2f16:
104 ; ZVFHMIN:       # %bb.0:
105 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
106 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
107 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
108 ; ZVFHMIN-NEXT:    vfabs.v v8, v9, v0.t
109 ; ZVFHMIN-NEXT:    lui a0, 307200
110 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
111 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
112 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5, v0.t
113 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
114 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v9, v0.t
115 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
116 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
117 ; ZVFHMIN-NEXT:    vfsgnj.vv v9, v8, v9, v0.t
118 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
119 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
120 ; ZVFHMIN-NEXT:    ret
121   %v = call <vscale x 2 x half> @llvm.vp.rint.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
122   ret <vscale x 2 x half> %v
125 define <vscale x 2 x half> @vp_rint_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) {
126 ; ZVFH-LABEL: vp_rint_nxv2f16_unmasked:
127 ; ZVFH:       # %bb.0:
128 ; ZVFH-NEXT:    lui a1, %hi(.LCPI3_0)
129 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI3_0)(a1)
130 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
131 ; ZVFH-NEXT:    vfabs.v v9, v8
132 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5
133 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
134 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
135 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
136 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
137 ; ZVFH-NEXT:    ret
139 ; ZVFHMIN-LABEL: vp_rint_nxv2f16_unmasked:
140 ; ZVFHMIN:       # %bb.0:
141 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
142 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
143 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
144 ; ZVFHMIN-NEXT:    vfabs.v v8, v9
145 ; ZVFHMIN-NEXT:    lui a0, 307200
146 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
147 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5
148 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v9, v0.t
149 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
150 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
151 ; ZVFHMIN-NEXT:    vfsgnj.vv v9, v8, v9, v0.t
152 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
153 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
154 ; ZVFHMIN-NEXT:    ret
155   %v = call <vscale x 2 x half> @llvm.vp.rint.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
156   ret <vscale x 2 x half> %v
159 declare <vscale x 4 x half> @llvm.vp.rint.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
161 define <vscale x 4 x half> @vp_rint_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
162 ; ZVFH-LABEL: vp_rint_nxv4f16:
163 ; ZVFH:       # %bb.0:
164 ; ZVFH-NEXT:    lui a1, %hi(.LCPI4_0)
165 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI4_0)(a1)
166 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
167 ; ZVFH-NEXT:    vfabs.v v9, v8, v0.t
168 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
169 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5, v0.t
170 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
171 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
172 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
173 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
174 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
175 ; ZVFH-NEXT:    ret
177 ; ZVFHMIN-LABEL: vp_rint_nxv4f16:
178 ; ZVFHMIN:       # %bb.0:
179 ; ZVFHMIN-NEXT:    vmv1r.v v9, v0
180 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
181 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
182 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
183 ; ZVFHMIN-NEXT:    vfabs.v v12, v10, v0.t
184 ; ZVFHMIN-NEXT:    lui a0, 307200
185 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
186 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
187 ; ZVFHMIN-NEXT:    vmflt.vf v9, v12, fa5, v0.t
188 ; ZVFHMIN-NEXT:    vmv1r.v v0, v9
189 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
190 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v12, v10, v0.t
191 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v12, v12, v0.t
192 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
193 ; ZVFHMIN-NEXT:    vfsgnj.vv v10, v12, v10, v0.t
194 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
195 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
196 ; ZVFHMIN-NEXT:    ret
197   %v = call <vscale x 4 x half> @llvm.vp.rint.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl)
198   ret <vscale x 4 x half> %v
201 define <vscale x 4 x half> @vp_rint_nxv4f16_unmasked(<vscale x 4 x half> %va, i32 zeroext %evl) {
202 ; ZVFH-LABEL: vp_rint_nxv4f16_unmasked:
203 ; ZVFH:       # %bb.0:
204 ; ZVFH-NEXT:    lui a1, %hi(.LCPI5_0)
205 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI5_0)(a1)
206 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
207 ; ZVFH-NEXT:    vfabs.v v9, v8
208 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5
209 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
210 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
211 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
212 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
213 ; ZVFH-NEXT:    ret
215 ; ZVFHMIN-LABEL: vp_rint_nxv4f16_unmasked:
216 ; ZVFHMIN:       # %bb.0:
217 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
218 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
219 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
220 ; ZVFHMIN-NEXT:    vfabs.v v8, v10
221 ; ZVFHMIN-NEXT:    lui a0, 307200
222 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
223 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5
224 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v10, v0.t
225 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
226 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
227 ; ZVFHMIN-NEXT:    vfsgnj.vv v10, v8, v10, v0.t
228 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
229 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
230 ; ZVFHMIN-NEXT:    ret
231   %v = call <vscale x 4 x half> @llvm.vp.rint.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
232   ret <vscale x 4 x half> %v
235 declare <vscale x 8 x half> @llvm.vp.rint.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
237 define <vscale x 8 x half> @vp_rint_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
238 ; ZVFH-LABEL: vp_rint_nxv8f16:
239 ; ZVFH:       # %bb.0:
240 ; ZVFH-NEXT:    lui a1, %hi(.LCPI6_0)
241 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI6_0)(a1)
242 ; ZVFH-NEXT:    vmv1r.v v10, v0
243 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
244 ; ZVFH-NEXT:    vfabs.v v12, v8, v0.t
245 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
246 ; ZVFH-NEXT:    vmflt.vf v10, v12, fa5, v0.t
247 ; ZVFH-NEXT:    vmv1r.v v0, v10
248 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
249 ; ZVFH-NEXT:    vfcvt.x.f.v v12, v8, v0.t
250 ; ZVFH-NEXT:    vfcvt.f.x.v v12, v12, v0.t
251 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
252 ; ZVFH-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
253 ; ZVFH-NEXT:    ret
255 ; ZVFHMIN-LABEL: vp_rint_nxv8f16:
256 ; ZVFHMIN:       # %bb.0:
257 ; ZVFHMIN-NEXT:    vmv1r.v v10, v0
258 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
259 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
260 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
261 ; ZVFHMIN-NEXT:    vfabs.v v16, v12, v0.t
262 ; ZVFHMIN-NEXT:    lui a0, 307200
263 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
264 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
265 ; ZVFHMIN-NEXT:    vmflt.vf v10, v16, fa5, v0.t
266 ; ZVFHMIN-NEXT:    vmv1r.v v0, v10
267 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
268 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v16, v12, v0.t
269 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v16, v16, v0.t
270 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
271 ; ZVFHMIN-NEXT:    vfsgnj.vv v12, v16, v12, v0.t
272 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
273 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
274 ; ZVFHMIN-NEXT:    ret
275   %v = call <vscale x 8 x half> @llvm.vp.rint.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl)
276   ret <vscale x 8 x half> %v
279 define <vscale x 8 x half> @vp_rint_nxv8f16_unmasked(<vscale x 8 x half> %va, i32 zeroext %evl) {
280 ; ZVFH-LABEL: vp_rint_nxv8f16_unmasked:
281 ; ZVFH:       # %bb.0:
282 ; ZVFH-NEXT:    lui a1, %hi(.LCPI7_0)
283 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI7_0)(a1)
284 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
285 ; ZVFH-NEXT:    vfabs.v v10, v8
286 ; ZVFH-NEXT:    vmflt.vf v0, v10, fa5
287 ; ZVFH-NEXT:    vfcvt.x.f.v v10, v8, v0.t
288 ; ZVFH-NEXT:    vfcvt.f.x.v v10, v10, v0.t
289 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
290 ; ZVFH-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
291 ; ZVFH-NEXT:    ret
293 ; ZVFHMIN-LABEL: vp_rint_nxv8f16_unmasked:
294 ; ZVFHMIN:       # %bb.0:
295 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
296 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
297 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
298 ; ZVFHMIN-NEXT:    vfabs.v v8, v12
299 ; ZVFHMIN-NEXT:    lui a0, 307200
300 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
301 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5
302 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v12, v0.t
303 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
304 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
305 ; ZVFHMIN-NEXT:    vfsgnj.vv v12, v8, v12, v0.t
306 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
307 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
308 ; ZVFHMIN-NEXT:    ret
309   %v = call <vscale x 8 x half> @llvm.vp.rint.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
310   ret <vscale x 8 x half> %v
313 declare <vscale x 16 x half> @llvm.vp.rint.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
315 define <vscale x 16 x half> @vp_rint_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
316 ; ZVFH-LABEL: vp_rint_nxv16f16:
317 ; ZVFH:       # %bb.0:
318 ; ZVFH-NEXT:    lui a1, %hi(.LCPI8_0)
319 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI8_0)(a1)
320 ; ZVFH-NEXT:    vmv1r.v v12, v0
321 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
322 ; ZVFH-NEXT:    vfabs.v v16, v8, v0.t
323 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m4, ta, mu
324 ; ZVFH-NEXT:    vmflt.vf v12, v16, fa5, v0.t
325 ; ZVFH-NEXT:    vmv1r.v v0, v12
326 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
327 ; ZVFH-NEXT:    vfcvt.x.f.v v16, v8, v0.t
328 ; ZVFH-NEXT:    vfcvt.f.x.v v16, v16, v0.t
329 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m4, ta, mu
330 ; ZVFH-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
331 ; ZVFH-NEXT:    ret
333 ; ZVFHMIN-LABEL: vp_rint_nxv16f16:
334 ; ZVFHMIN:       # %bb.0:
335 ; ZVFHMIN-NEXT:    vmv1r.v v12, v0
336 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
337 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
338 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
339 ; ZVFHMIN-NEXT:    vfabs.v v24, v16, v0.t
340 ; ZVFHMIN-NEXT:    lui a0, 307200
341 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
342 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
343 ; ZVFHMIN-NEXT:    vmflt.vf v12, v24, fa5, v0.t
344 ; ZVFHMIN-NEXT:    vmv1r.v v0, v12
345 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
346 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v24, v16, v0.t
347 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v24, v24, v0.t
348 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
349 ; ZVFHMIN-NEXT:    vfsgnj.vv v16, v24, v16, v0.t
350 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
351 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
352 ; ZVFHMIN-NEXT:    ret
353   %v = call <vscale x 16 x half> @llvm.vp.rint.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl)
354   ret <vscale x 16 x half> %v
357 define <vscale x 16 x half> @vp_rint_nxv16f16_unmasked(<vscale x 16 x half> %va, i32 zeroext %evl) {
358 ; ZVFH-LABEL: vp_rint_nxv16f16_unmasked:
359 ; ZVFH:       # %bb.0:
360 ; ZVFH-NEXT:    lui a1, %hi(.LCPI9_0)
361 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI9_0)(a1)
362 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
363 ; ZVFH-NEXT:    vfabs.v v12, v8
364 ; ZVFH-NEXT:    vmflt.vf v0, v12, fa5
365 ; ZVFH-NEXT:    vfcvt.x.f.v v12, v8, v0.t
366 ; ZVFH-NEXT:    vfcvt.f.x.v v12, v12, v0.t
367 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m4, ta, mu
368 ; ZVFH-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
369 ; ZVFH-NEXT:    ret
371 ; ZVFHMIN-LABEL: vp_rint_nxv16f16_unmasked:
372 ; ZVFHMIN:       # %bb.0:
373 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
374 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
375 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
376 ; ZVFHMIN-NEXT:    vfabs.v v8, v16
377 ; ZVFHMIN-NEXT:    lui a0, 307200
378 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
379 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5
380 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v16, v0.t
381 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
382 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
383 ; ZVFHMIN-NEXT:    vfsgnj.vv v16, v8, v16, v0.t
384 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
385 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
386 ; ZVFHMIN-NEXT:    ret
387   %v = call <vscale x 16 x half> @llvm.vp.rint.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
388   ret <vscale x 16 x half> %v
391 declare <vscale x 32 x half> @llvm.vp.rint.nxv32f16(<vscale x 32 x half>, <vscale x 32 x i1>, i32)
393 define <vscale x 32 x half> @vp_rint_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
394 ; ZVFH-LABEL: vp_rint_nxv32f16:
395 ; ZVFH:       # %bb.0:
396 ; ZVFH-NEXT:    lui a1, %hi(.LCPI10_0)
397 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI10_0)(a1)
398 ; ZVFH-NEXT:    vmv1r.v v16, v0
399 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
400 ; ZVFH-NEXT:    vfabs.v v24, v8, v0.t
401 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m8, ta, mu
402 ; ZVFH-NEXT:    vmflt.vf v16, v24, fa5, v0.t
403 ; ZVFH-NEXT:    vmv1r.v v0, v16
404 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m8, ta, ma
405 ; ZVFH-NEXT:    vfcvt.x.f.v v24, v8, v0.t
406 ; ZVFH-NEXT:    vfcvt.f.x.v v24, v24, v0.t
407 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m8, ta, mu
408 ; ZVFH-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
409 ; ZVFH-NEXT:    ret
411 ; ZVFHMIN-LABEL: vp_rint_nxv32f16:
412 ; ZVFHMIN:       # %bb.0:
413 ; ZVFHMIN-NEXT:    addi sp, sp, -16
414 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
415 ; ZVFHMIN-NEXT:    csrr a1, vlenb
416 ; ZVFHMIN-NEXT:    slli a1, a1, 3
417 ; ZVFHMIN-NEXT:    sub sp, sp, a1
418 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
419 ; ZVFHMIN-NEXT:    vmv1r.v v16, v0
420 ; ZVFHMIN-NEXT:    csrr a2, vlenb
421 ; ZVFHMIN-NEXT:    slli a1, a2, 1
422 ; ZVFHMIN-NEXT:    sub a3, a0, a1
423 ; ZVFHMIN-NEXT:    sltu a4, a0, a3
424 ; ZVFHMIN-NEXT:    addi a4, a4, -1
425 ; ZVFHMIN-NEXT:    and a3, a4, a3
426 ; ZVFHMIN-NEXT:    srli a2, a2, 2
427 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
428 ; ZVFHMIN-NEXT:    vslidedown.vx v17, v0, a2
429 ; ZVFHMIN-NEXT:    addi a2, sp, 16
430 ; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
431 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
432 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
433 ; ZVFHMIN-NEXT:    vmv1r.v v0, v17
434 ; ZVFHMIN-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
435 ; ZVFHMIN-NEXT:    vfabs.v v8, v24, v0.t
436 ; ZVFHMIN-NEXT:    lui a2, 307200
437 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a2
438 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
439 ; ZVFHMIN-NEXT:    vmflt.vf v17, v8, fa5, v0.t
440 ; ZVFHMIN-NEXT:    vmv1r.v v0, v17
441 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
442 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v24, v0.t
443 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
444 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
445 ; ZVFHMIN-NEXT:    vfsgnj.vv v24, v8, v24, v0.t
446 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
447 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24
448 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB10_2
449 ; ZVFHMIN-NEXT:  # %bb.1:
450 ; ZVFHMIN-NEXT:    mv a0, a1
451 ; ZVFHMIN-NEXT:  .LBB10_2:
452 ; ZVFHMIN-NEXT:    addi a1, sp, 16
453 ; ZVFHMIN-NEXT:    vl8r.v v0, (a1) # Unknown-size Folded Reload
454 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
455 ; ZVFHMIN-NEXT:    vmv1r.v v0, v16
456 ; ZVFHMIN-NEXT:    vmv1r.v v8, v16
457 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
458 ; ZVFHMIN-NEXT:    vfabs.v v16, v24, v0.t
459 ; ZVFHMIN-NEXT:    addi a0, sp, 16
460 ; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
461 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
462 ; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
463 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
464 ; ZVFHMIN-NEXT:    vmflt.vf v8, v16, fa5, v0.t
465 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
466 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
467 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v16, v24, v0.t
468 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v16, v16, v0.t
469 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
470 ; ZVFHMIN-NEXT:    vfsgnj.vv v24, v16, v24, v0.t
471 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
472 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24
473 ; ZVFHMIN-NEXT:    csrr a0, vlenb
474 ; ZVFHMIN-NEXT:    slli a0, a0, 3
475 ; ZVFHMIN-NEXT:    add sp, sp, a0
476 ; ZVFHMIN-NEXT:    addi sp, sp, 16
477 ; ZVFHMIN-NEXT:    ret
478   %v = call <vscale x 32 x half> @llvm.vp.rint.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl)
479   ret <vscale x 32 x half> %v
482 define <vscale x 32 x half> @vp_rint_nxv32f16_unmasked(<vscale x 32 x half> %va, i32 zeroext %evl) {
483 ; ZVFH-LABEL: vp_rint_nxv32f16_unmasked:
484 ; ZVFH:       # %bb.0:
485 ; ZVFH-NEXT:    lui a1, %hi(.LCPI11_0)
486 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI11_0)(a1)
487 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
488 ; ZVFH-NEXT:    vfabs.v v16, v8
489 ; ZVFH-NEXT:    vmflt.vf v0, v16, fa5
490 ; ZVFH-NEXT:    vfcvt.x.f.v v16, v8, v0.t
491 ; ZVFH-NEXT:    vfcvt.f.x.v v16, v16, v0.t
492 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m8, ta, mu
493 ; ZVFH-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
494 ; ZVFH-NEXT:    ret
496 ; ZVFHMIN-LABEL: vp_rint_nxv32f16_unmasked:
497 ; ZVFHMIN:       # %bb.0:
498 ; ZVFHMIN-NEXT:    addi sp, sp, -16
499 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
500 ; ZVFHMIN-NEXT:    csrr a1, vlenb
501 ; ZVFHMIN-NEXT:    slli a1, a1, 3
502 ; ZVFHMIN-NEXT:    sub sp, sp, a1
503 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
504 ; ZVFHMIN-NEXT:    csrr a2, vlenb
505 ; ZVFHMIN-NEXT:    slli a1, a2, 1
506 ; ZVFHMIN-NEXT:    sub a3, a0, a1
507 ; ZVFHMIN-NEXT:    sltu a4, a0, a3
508 ; ZVFHMIN-NEXT:    addi a4, a4, -1
509 ; ZVFHMIN-NEXT:    and a3, a4, a3
510 ; ZVFHMIN-NEXT:    srli a2, a2, 2
511 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, m4, ta, ma
512 ; ZVFHMIN-NEXT:    vmset.m v16
513 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
514 ; ZVFHMIN-NEXT:    vslidedown.vx v16, v16, a2
515 ; ZVFHMIN-NEXT:    addi a2, sp, 16
516 ; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
517 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
518 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
519 ; ZVFHMIN-NEXT:    vmv1r.v v0, v16
520 ; ZVFHMIN-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
521 ; ZVFHMIN-NEXT:    vfabs.v v8, v24, v0.t
522 ; ZVFHMIN-NEXT:    lui a2, 307200
523 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a2
524 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
525 ; ZVFHMIN-NEXT:    vmflt.vf v16, v8, fa5, v0.t
526 ; ZVFHMIN-NEXT:    vmv1r.v v0, v16
527 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
528 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v24, v0.t
529 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
530 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
531 ; ZVFHMIN-NEXT:    vfsgnj.vv v24, v8, v24, v0.t
532 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
533 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24
534 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB11_2
535 ; ZVFHMIN-NEXT:  # %bb.1:
536 ; ZVFHMIN-NEXT:    mv a0, a1
537 ; ZVFHMIN-NEXT:  .LBB11_2:
538 ; ZVFHMIN-NEXT:    addi a1, sp, 16
539 ; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
540 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
541 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
542 ; ZVFHMIN-NEXT:    vfabs.v v24, v16
543 ; ZVFHMIN-NEXT:    vmflt.vf v0, v24, fa5
544 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v24, v16, v0.t
545 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v24, v24, v0.t
546 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
547 ; ZVFHMIN-NEXT:    vfsgnj.vv v16, v24, v16, v0.t
548 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
549 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
550 ; ZVFHMIN-NEXT:    csrr a0, vlenb
551 ; ZVFHMIN-NEXT:    slli a0, a0, 3
552 ; ZVFHMIN-NEXT:    add sp, sp, a0
553 ; ZVFHMIN-NEXT:    addi sp, sp, 16
554 ; ZVFHMIN-NEXT:    ret
555   %v = call <vscale x 32 x half> @llvm.vp.rint.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
556   ret <vscale x 32 x half> %v
559 declare <vscale x 1 x float> @llvm.vp.rint.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
561 define <vscale x 1 x float> @vp_rint_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
562 ; CHECK-LABEL: vp_rint_nxv1f32:
563 ; CHECK:       # %bb.0:
564 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
565 ; CHECK-NEXT:    vfabs.v v9, v8, v0.t
566 ; CHECK-NEXT:    lui a0, 307200
567 ; CHECK-NEXT:    fmv.w.x fa5, a0
568 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
569 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5, v0.t
570 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
571 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
572 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
573 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
574 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
575 ; CHECK-NEXT:    ret
576   %v = call <vscale x 1 x float> @llvm.vp.rint.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl)
577   ret <vscale x 1 x float> %v
580 define <vscale x 1 x float> @vp_rint_nxv1f32_unmasked(<vscale x 1 x float> %va, i32 zeroext %evl) {
581 ; CHECK-LABEL: vp_rint_nxv1f32_unmasked:
582 ; CHECK:       # %bb.0:
583 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
584 ; CHECK-NEXT:    vfabs.v v9, v8
585 ; CHECK-NEXT:    lui a0, 307200
586 ; CHECK-NEXT:    fmv.w.x fa5, a0
587 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
588 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
589 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
590 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
591 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
592 ; CHECK-NEXT:    ret
593   %v = call <vscale x 1 x float> @llvm.vp.rint.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
594   ret <vscale x 1 x float> %v
597 declare <vscale x 2 x float> @llvm.vp.rint.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
599 define <vscale x 2 x float> @vp_rint_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
600 ; CHECK-LABEL: vp_rint_nxv2f32:
601 ; CHECK:       # %bb.0:
602 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
603 ; CHECK-NEXT:    vfabs.v v9, v8, v0.t
604 ; CHECK-NEXT:    lui a0, 307200
605 ; CHECK-NEXT:    fmv.w.x fa5, a0
606 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
607 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5, v0.t
608 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
609 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
610 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
611 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
612 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
613 ; CHECK-NEXT:    ret
614   %v = call <vscale x 2 x float> @llvm.vp.rint.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
615   ret <vscale x 2 x float> %v
618 define <vscale x 2 x float> @vp_rint_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) {
619 ; CHECK-LABEL: vp_rint_nxv2f32_unmasked:
620 ; CHECK:       # %bb.0:
621 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
622 ; CHECK-NEXT:    vfabs.v v9, v8
623 ; CHECK-NEXT:    lui a0, 307200
624 ; CHECK-NEXT:    fmv.w.x fa5, a0
625 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
626 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
627 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
628 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
629 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
630 ; CHECK-NEXT:    ret
631   %v = call <vscale x 2 x float> @llvm.vp.rint.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
632   ret <vscale x 2 x float> %v
635 declare <vscale x 4 x float> @llvm.vp.rint.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
637 define <vscale x 4 x float> @vp_rint_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
638 ; CHECK-LABEL: vp_rint_nxv4f32:
639 ; CHECK:       # %bb.0:
640 ; CHECK-NEXT:    vmv1r.v v10, v0
641 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
642 ; CHECK-NEXT:    vfabs.v v12, v8, v0.t
643 ; CHECK-NEXT:    lui a0, 307200
644 ; CHECK-NEXT:    fmv.w.x fa5, a0
645 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
646 ; CHECK-NEXT:    vmflt.vf v10, v12, fa5, v0.t
647 ; CHECK-NEXT:    vmv1r.v v0, v10
648 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
649 ; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
650 ; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
651 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
652 ; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
653 ; CHECK-NEXT:    ret
654   %v = call <vscale x 4 x float> @llvm.vp.rint.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl)
655   ret <vscale x 4 x float> %v
658 define <vscale x 4 x float> @vp_rint_nxv4f32_unmasked(<vscale x 4 x float> %va, i32 zeroext %evl) {
659 ; CHECK-LABEL: vp_rint_nxv4f32_unmasked:
660 ; CHECK:       # %bb.0:
661 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
662 ; CHECK-NEXT:    vfabs.v v10, v8
663 ; CHECK-NEXT:    lui a0, 307200
664 ; CHECK-NEXT:    fmv.w.x fa5, a0
665 ; CHECK-NEXT:    vmflt.vf v0, v10, fa5
666 ; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t
667 ; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t
668 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
669 ; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
670 ; CHECK-NEXT:    ret
671   %v = call <vscale x 4 x float> @llvm.vp.rint.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
672   ret <vscale x 4 x float> %v
675 declare <vscale x 8 x float> @llvm.vp.rint.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
677 define <vscale x 8 x float> @vp_rint_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
678 ; CHECK-LABEL: vp_rint_nxv8f32:
679 ; CHECK:       # %bb.0:
680 ; CHECK-NEXT:    vmv1r.v v12, v0
681 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
682 ; CHECK-NEXT:    vfabs.v v16, v8, v0.t
683 ; CHECK-NEXT:    lui a0, 307200
684 ; CHECK-NEXT:    fmv.w.x fa5, a0
685 ; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
686 ; CHECK-NEXT:    vmflt.vf v12, v16, fa5, v0.t
687 ; CHECK-NEXT:    vmv1r.v v0, v12
688 ; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
689 ; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
690 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
691 ; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
692 ; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
693 ; CHECK-NEXT:    ret
694   %v = call <vscale x 8 x float> @llvm.vp.rint.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl)
695   ret <vscale x 8 x float> %v
698 define <vscale x 8 x float> @vp_rint_nxv8f32_unmasked(<vscale x 8 x float> %va, i32 zeroext %evl) {
699 ; CHECK-LABEL: vp_rint_nxv8f32_unmasked:
700 ; CHECK:       # %bb.0:
701 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
702 ; CHECK-NEXT:    vfabs.v v12, v8
703 ; CHECK-NEXT:    lui a0, 307200
704 ; CHECK-NEXT:    fmv.w.x fa5, a0
705 ; CHECK-NEXT:    vmflt.vf v0, v12, fa5
706 ; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
707 ; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
708 ; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
709 ; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
710 ; CHECK-NEXT:    ret
711   %v = call <vscale x 8 x float> @llvm.vp.rint.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
712   ret <vscale x 8 x float> %v
715 declare <vscale x 16 x float> @llvm.vp.rint.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
717 define <vscale x 16 x float> @vp_rint_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
718 ; CHECK-LABEL: vp_rint_nxv16f32:
719 ; CHECK:       # %bb.0:
720 ; CHECK-NEXT:    vmv1r.v v16, v0
721 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
722 ; CHECK-NEXT:    vfabs.v v24, v8, v0.t
723 ; CHECK-NEXT:    lui a0, 307200
724 ; CHECK-NEXT:    fmv.w.x fa5, a0
725 ; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
726 ; CHECK-NEXT:    vmflt.vf v16, v24, fa5, v0.t
727 ; CHECK-NEXT:    vmv1r.v v0, v16
728 ; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
729 ; CHECK-NEXT:    vfcvt.x.f.v v24, v8, v0.t
730 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
731 ; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
732 ; CHECK-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
733 ; CHECK-NEXT:    ret
734   %v = call <vscale x 16 x float> @llvm.vp.rint.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl)
735   ret <vscale x 16 x float> %v
738 define <vscale x 16 x float> @vp_rint_nxv16f32_unmasked(<vscale x 16 x float> %va, i32 zeroext %evl) {
739 ; CHECK-LABEL: vp_rint_nxv16f32_unmasked:
740 ; CHECK:       # %bb.0:
741 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
742 ; CHECK-NEXT:    vfabs.v v16, v8
743 ; CHECK-NEXT:    lui a0, 307200
744 ; CHECK-NEXT:    fmv.w.x fa5, a0
745 ; CHECK-NEXT:    vmflt.vf v0, v16, fa5
746 ; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
747 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
748 ; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
749 ; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
750 ; CHECK-NEXT:    ret
751   %v = call <vscale x 16 x float> @llvm.vp.rint.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
752   ret <vscale x 16 x float> %v
755 declare <vscale x 1 x double> @llvm.vp.rint.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
757 define <vscale x 1 x double> @vp_rint_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
758 ; CHECK-LABEL: vp_rint_nxv1f64:
759 ; CHECK:       # %bb.0:
760 ; CHECK-NEXT:    lui a1, %hi(.LCPI22_0)
761 ; CHECK-NEXT:    fld fa5, %lo(.LCPI22_0)(a1)
762 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
763 ; CHECK-NEXT:    vfabs.v v9, v8, v0.t
764 ; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
765 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5, v0.t
766 ; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
767 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
768 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
769 ; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
770 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
771 ; CHECK-NEXT:    ret
772   %v = call <vscale x 1 x double> @llvm.vp.rint.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl)
773   ret <vscale x 1 x double> %v
776 define <vscale x 1 x double> @vp_rint_nxv1f64_unmasked(<vscale x 1 x double> %va, i32 zeroext %evl) {
777 ; CHECK-LABEL: vp_rint_nxv1f64_unmasked:
778 ; CHECK:       # %bb.0:
779 ; CHECK-NEXT:    lui a1, %hi(.LCPI23_0)
780 ; CHECK-NEXT:    fld fa5, %lo(.LCPI23_0)(a1)
781 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
782 ; CHECK-NEXT:    vfabs.v v9, v8
783 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
784 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
785 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
786 ; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
787 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
788 ; CHECK-NEXT:    ret
789   %v = call <vscale x 1 x double> @llvm.vp.rint.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
790   ret <vscale x 1 x double> %v
793 declare <vscale x 2 x double> @llvm.vp.rint.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
795 define <vscale x 2 x double> @vp_rint_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
796 ; CHECK-LABEL: vp_rint_nxv2f64:
797 ; CHECK:       # %bb.0:
798 ; CHECK-NEXT:    lui a1, %hi(.LCPI24_0)
799 ; CHECK-NEXT:    fld fa5, %lo(.LCPI24_0)(a1)
800 ; CHECK-NEXT:    vmv1r.v v10, v0
801 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
802 ; CHECK-NEXT:    vfabs.v v12, v8, v0.t
803 ; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, mu
804 ; CHECK-NEXT:    vmflt.vf v10, v12, fa5, v0.t
805 ; CHECK-NEXT:    vmv1r.v v0, v10
806 ; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
807 ; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
808 ; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
809 ; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, mu
810 ; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
811 ; CHECK-NEXT:    ret
812   %v = call <vscale x 2 x double> @llvm.vp.rint.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
813   ret <vscale x 2 x double> %v
816 define <vscale x 2 x double> @vp_rint_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) {
817 ; CHECK-LABEL: vp_rint_nxv2f64_unmasked:
818 ; CHECK:       # %bb.0:
819 ; CHECK-NEXT:    lui a1, %hi(.LCPI25_0)
820 ; CHECK-NEXT:    fld fa5, %lo(.LCPI25_0)(a1)
821 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
822 ; CHECK-NEXT:    vfabs.v v10, v8
823 ; CHECK-NEXT:    vmflt.vf v0, v10, fa5
824 ; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t
825 ; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t
826 ; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, mu
827 ; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
828 ; CHECK-NEXT:    ret
829   %v = call <vscale x 2 x double> @llvm.vp.rint.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
830   ret <vscale x 2 x double> %v
833 declare <vscale x 4 x double> @llvm.vp.rint.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
835 define <vscale x 4 x double> @vp_rint_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
836 ; CHECK-LABEL: vp_rint_nxv4f64:
837 ; CHECK:       # %bb.0:
838 ; CHECK-NEXT:    lui a1, %hi(.LCPI26_0)
839 ; CHECK-NEXT:    fld fa5, %lo(.LCPI26_0)(a1)
840 ; CHECK-NEXT:    vmv1r.v v12, v0
841 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
842 ; CHECK-NEXT:    vfabs.v v16, v8, v0.t
843 ; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
844 ; CHECK-NEXT:    vmflt.vf v12, v16, fa5, v0.t
845 ; CHECK-NEXT:    vmv1r.v v0, v12
846 ; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, ma
847 ; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
848 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
849 ; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
850 ; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
851 ; CHECK-NEXT:    ret
852   %v = call <vscale x 4 x double> @llvm.vp.rint.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl)
853   ret <vscale x 4 x double> %v
856 define <vscale x 4 x double> @vp_rint_nxv4f64_unmasked(<vscale x 4 x double> %va, i32 zeroext %evl) {
857 ; CHECK-LABEL: vp_rint_nxv4f64_unmasked:
858 ; CHECK:       # %bb.0:
859 ; CHECK-NEXT:    lui a1, %hi(.LCPI27_0)
860 ; CHECK-NEXT:    fld fa5, %lo(.LCPI27_0)(a1)
861 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
862 ; CHECK-NEXT:    vfabs.v v12, v8
863 ; CHECK-NEXT:    vmflt.vf v0, v12, fa5
864 ; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
865 ; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
866 ; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
867 ; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
868 ; CHECK-NEXT:    ret
869   %v = call <vscale x 4 x double> @llvm.vp.rint.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
870   ret <vscale x 4 x double> %v
873 declare <vscale x 7 x double> @llvm.vp.rint.nxv7f64(<vscale x 7 x double>, <vscale x 7 x i1>, i32)
875 define <vscale x 7 x double> @vp_rint_nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x i1> %m, i32 zeroext %evl) {
876 ; CHECK-LABEL: vp_rint_nxv7f64:
877 ; CHECK:       # %bb.0:
878 ; CHECK-NEXT:    lui a1, %hi(.LCPI28_0)
879 ; CHECK-NEXT:    fld fa5, %lo(.LCPI28_0)(a1)
880 ; CHECK-NEXT:    vmv1r.v v16, v0
881 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
882 ; CHECK-NEXT:    vfabs.v v24, v8, v0.t
883 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
884 ; CHECK-NEXT:    vmflt.vf v16, v24, fa5, v0.t
885 ; CHECK-NEXT:    vmv1r.v v0, v16
886 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma
887 ; CHECK-NEXT:    vfcvt.x.f.v v24, v8, v0.t
888 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
889 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
890 ; CHECK-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
891 ; CHECK-NEXT:    ret
892   %v = call <vscale x 7 x double> @llvm.vp.rint.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x i1> %m, i32 %evl)
893   ret <vscale x 7 x double> %v
896 define <vscale x 7 x double> @vp_rint_nxv7f64_unmasked(<vscale x 7 x double> %va, i32 zeroext %evl) {
897 ; CHECK-LABEL: vp_rint_nxv7f64_unmasked:
898 ; CHECK:       # %bb.0:
899 ; CHECK-NEXT:    lui a1, %hi(.LCPI29_0)
900 ; CHECK-NEXT:    fld fa5, %lo(.LCPI29_0)(a1)
901 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
902 ; CHECK-NEXT:    vfabs.v v16, v8
903 ; CHECK-NEXT:    vmflt.vf v0, v16, fa5
904 ; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
905 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
906 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
907 ; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
908 ; CHECK-NEXT:    ret
909   %v = call <vscale x 7 x double> @llvm.vp.rint.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x i1> splat (i1 true), i32 %evl)
910   ret <vscale x 7 x double> %v
913 declare <vscale x 8 x double> @llvm.vp.rint.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
915 define <vscale x 8 x double> @vp_rint_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
916 ; CHECK-LABEL: vp_rint_nxv8f64:
917 ; CHECK:       # %bb.0:
918 ; CHECK-NEXT:    lui a1, %hi(.LCPI30_0)
919 ; CHECK-NEXT:    fld fa5, %lo(.LCPI30_0)(a1)
920 ; CHECK-NEXT:    vmv1r.v v16, v0
921 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
922 ; CHECK-NEXT:    vfabs.v v24, v8, v0.t
923 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
924 ; CHECK-NEXT:    vmflt.vf v16, v24, fa5, v0.t
925 ; CHECK-NEXT:    vmv1r.v v0, v16
926 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma
927 ; CHECK-NEXT:    vfcvt.x.f.v v24, v8, v0.t
928 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
929 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
930 ; CHECK-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
931 ; CHECK-NEXT:    ret
932   %v = call <vscale x 8 x double> @llvm.vp.rint.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl)
933   ret <vscale x 8 x double> %v
936 define <vscale x 8 x double> @vp_rint_nxv8f64_unmasked(<vscale x 8 x double> %va, i32 zeroext %evl) {
937 ; CHECK-LABEL: vp_rint_nxv8f64_unmasked:
938 ; CHECK:       # %bb.0:
939 ; CHECK-NEXT:    lui a1, %hi(.LCPI31_0)
940 ; CHECK-NEXT:    fld fa5, %lo(.LCPI31_0)(a1)
941 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
942 ; CHECK-NEXT:    vfabs.v v16, v8
943 ; CHECK-NEXT:    vmflt.vf v0, v16, fa5
944 ; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
945 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
946 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
947 ; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
948 ; CHECK-NEXT:    ret
949   %v = call <vscale x 8 x double> @llvm.vp.rint.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
950   ret <vscale x 8 x double> %v
953 ; Test splitting.
954 declare <vscale x 16 x double> @llvm.vp.rint.nxv16f64(<vscale x 16 x double>, <vscale x 16 x i1>, i32)
956 define <vscale x 16 x double> @vp_rint_nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
957 ; CHECK-LABEL: vp_rint_nxv16f64:
958 ; CHECK:       # %bb.0:
959 ; CHECK-NEXT:    addi sp, sp, -16
960 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
961 ; CHECK-NEXT:    csrr a1, vlenb
962 ; CHECK-NEXT:    slli a1, a1, 3
963 ; CHECK-NEXT:    sub sp, sp, a1
964 ; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
965 ; CHECK-NEXT:    vmv1r.v v7, v0
966 ; CHECK-NEXT:    csrr a1, vlenb
967 ; CHECK-NEXT:    srli a2, a1, 3
968 ; CHECK-NEXT:    vsetvli a3, zero, e8, mf4, ta, ma
969 ; CHECK-NEXT:    vslidedown.vx v6, v0, a2
970 ; CHECK-NEXT:    sub a2, a0, a1
971 ; CHECK-NEXT:    lui a3, %hi(.LCPI32_0)
972 ; CHECK-NEXT:    fld fa5, %lo(.LCPI32_0)(a3)
973 ; CHECK-NEXT:    sltu a3, a0, a2
974 ; CHECK-NEXT:    addi a3, a3, -1
975 ; CHECK-NEXT:    and a2, a3, a2
976 ; CHECK-NEXT:    vmv1r.v v0, v6
977 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
978 ; CHECK-NEXT:    vfabs.v v24, v16, v0.t
979 ; CHECK-NEXT:    addi a2, sp, 16
980 ; CHECK-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
981 ; CHECK-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
982 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
983 ; CHECK-NEXT:    vmflt.vf v6, v24, fa5, v0.t
984 ; CHECK-NEXT:    vmv1r.v v0, v6
985 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma
986 ; CHECK-NEXT:    vfcvt.x.f.v v24, v16, v0.t
987 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
988 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
989 ; CHECK-NEXT:    vfsgnj.vv v16, v24, v16, v0.t
990 ; CHECK-NEXT:    bltu a0, a1, .LBB32_2
991 ; CHECK-NEXT:  # %bb.1:
992 ; CHECK-NEXT:    mv a0, a1
993 ; CHECK-NEXT:  .LBB32_2:
994 ; CHECK-NEXT:    vmv1r.v v0, v7
995 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
996 ; CHECK-NEXT:    vfabs.v v24, v8, v0.t
997 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
998 ; CHECK-NEXT:    vmflt.vf v7, v24, fa5, v0.t
999 ; CHECK-NEXT:    vmv1r.v v0, v7
1000 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma
1001 ; CHECK-NEXT:    vfcvt.x.f.v v24, v8, v0.t
1002 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
1003 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1004 ; CHECK-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
1005 ; CHECK-NEXT:    csrr a0, vlenb
1006 ; CHECK-NEXT:    slli a0, a0, 3
1007 ; CHECK-NEXT:    add sp, sp, a0
1008 ; CHECK-NEXT:    addi sp, sp, 16
1009 ; CHECK-NEXT:    ret
1010   %v = call <vscale x 16 x double> @llvm.vp.rint.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x i1> %m, i32 %evl)
1011   ret <vscale x 16 x double> %v
1014 define <vscale x 16 x double> @vp_rint_nxv16f64_unmasked(<vscale x 16 x double> %va, i32 zeroext %evl) {
1015 ; CHECK-LABEL: vp_rint_nxv16f64_unmasked:
1016 ; CHECK:       # %bb.0:
1017 ; CHECK-NEXT:    csrr a1, vlenb
1018 ; CHECK-NEXT:    sub a2, a0, a1
1019 ; CHECK-NEXT:    lui a3, %hi(.LCPI33_0)
1020 ; CHECK-NEXT:    fld fa5, %lo(.LCPI33_0)(a3)
1021 ; CHECK-NEXT:    sltu a3, a0, a2
1022 ; CHECK-NEXT:    addi a3, a3, -1
1023 ; CHECK-NEXT:    and a2, a3, a2
1024 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1025 ; CHECK-NEXT:    vfabs.v v24, v16
1026 ; CHECK-NEXT:    vmflt.vf v0, v24, fa5
1027 ; CHECK-NEXT:    vfcvt.x.f.v v24, v16, v0.t
1028 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
1029 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1030 ; CHECK-NEXT:    vfsgnj.vv v16, v24, v16, v0.t
1031 ; CHECK-NEXT:    bltu a0, a1, .LBB33_2
1032 ; CHECK-NEXT:  # %bb.1:
1033 ; CHECK-NEXT:    mv a0, a1
1034 ; CHECK-NEXT:  .LBB33_2:
1035 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1036 ; CHECK-NEXT:    vfabs.v v24, v8
1037 ; CHECK-NEXT:    vmflt.vf v0, v24, fa5
1038 ; CHECK-NEXT:    vfcvt.x.f.v v24, v8, v0.t
1039 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
1040 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1041 ; CHECK-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
1042 ; CHECK-NEXT:    ret
1043   %v = call <vscale x 16 x double> @llvm.vp.rint.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1044   ret <vscale x 16 x double> %v