[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / nearbyint-vp.ll
bloba3ea462b6a737645938f449f15af45eaca2ef586
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.nearbyint.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
13 define <vscale x 1 x half> @vp_nearbyint_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14 ; ZVFH-LABEL: vp_nearbyint_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:    frflags a0
23 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
24 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
25 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
26 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
27 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
28 ; ZVFH-NEXT:    fsflags a0
29 ; ZVFH-NEXT:    ret
31 ; ZVFHMIN-LABEL: vp_nearbyint_nxv1f16:
32 ; ZVFHMIN:       # %bb.0:
33 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
34 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
35 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
36 ; ZVFHMIN-NEXT:    vfabs.v v8, v9, v0.t
37 ; ZVFHMIN-NEXT:    lui a0, 307200
38 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
39 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
40 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5, v0.t
41 ; ZVFHMIN-NEXT:    frflags a0
42 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
43 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v9, v0.t
44 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
45 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
46 ; ZVFHMIN-NEXT:    vfsgnj.vv v9, v8, v9, v0.t
47 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
48 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
49 ; ZVFHMIN-NEXT:    fsflags a0
50 ; ZVFHMIN-NEXT:    ret
51   %v = call <vscale x 1 x half> @llvm.vp.nearbyint.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl)
52   ret <vscale x 1 x half> %v
55 define <vscale x 1 x half> @vp_nearbyint_nxv1f16_unmasked(<vscale x 1 x half> %va, i32 zeroext %evl) {
56 ; ZVFH-LABEL: vp_nearbyint_nxv1f16_unmasked:
57 ; ZVFH:       # %bb.0:
58 ; ZVFH-NEXT:    lui a1, %hi(.LCPI1_0)
59 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI1_0)(a1)
60 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
61 ; ZVFH-NEXT:    vfabs.v v9, v8
62 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5
63 ; ZVFH-NEXT:    frflags a0
64 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
65 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
66 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
67 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
68 ; ZVFH-NEXT:    fsflags a0
69 ; ZVFH-NEXT:    ret
71 ; ZVFHMIN-LABEL: vp_nearbyint_nxv1f16_unmasked:
72 ; ZVFHMIN:       # %bb.0:
73 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
74 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
75 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
76 ; ZVFHMIN-NEXT:    vfabs.v v8, v9
77 ; ZVFHMIN-NEXT:    lui a0, 307200
78 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
79 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5
80 ; ZVFHMIN-NEXT:    frflags a0
81 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v9, v0.t
82 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
83 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
84 ; ZVFHMIN-NEXT:    vfsgnj.vv v9, v8, v9, v0.t
85 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
86 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
87 ; ZVFHMIN-NEXT:    fsflags a0
88 ; ZVFHMIN-NEXT:    ret
89   %v = call <vscale x 1 x half> @llvm.vp.nearbyint.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
90   ret <vscale x 1 x half> %v
93 declare <vscale x 2 x half> @llvm.vp.nearbyint.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
95 define <vscale x 2 x half> @vp_nearbyint_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
96 ; ZVFH-LABEL: vp_nearbyint_nxv2f16:
97 ; ZVFH:       # %bb.0:
98 ; ZVFH-NEXT:    lui a1, %hi(.LCPI2_0)
99 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI2_0)(a1)
100 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
101 ; ZVFH-NEXT:    vfabs.v v9, v8, v0.t
102 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
103 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5, v0.t
104 ; ZVFH-NEXT:    frflags a0
105 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
106 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
107 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
108 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
109 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
110 ; ZVFH-NEXT:    fsflags a0
111 ; ZVFH-NEXT:    ret
113 ; ZVFHMIN-LABEL: vp_nearbyint_nxv2f16:
114 ; ZVFHMIN:       # %bb.0:
115 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
116 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
117 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
118 ; ZVFHMIN-NEXT:    vfabs.v v8, v9, v0.t
119 ; ZVFHMIN-NEXT:    lui a0, 307200
120 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
121 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
122 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5, v0.t
123 ; ZVFHMIN-NEXT:    frflags a0
124 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
125 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v9, v0.t
126 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
127 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
128 ; ZVFHMIN-NEXT:    vfsgnj.vv v9, v8, v9, v0.t
129 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
130 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
131 ; ZVFHMIN-NEXT:    fsflags a0
132 ; ZVFHMIN-NEXT:    ret
133   %v = call <vscale x 2 x half> @llvm.vp.nearbyint.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
134   ret <vscale x 2 x half> %v
137 define <vscale x 2 x half> @vp_nearbyint_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) {
138 ; ZVFH-LABEL: vp_nearbyint_nxv2f16_unmasked:
139 ; ZVFH:       # %bb.0:
140 ; ZVFH-NEXT:    lui a1, %hi(.LCPI3_0)
141 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI3_0)(a1)
142 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
143 ; ZVFH-NEXT:    vfabs.v v9, v8
144 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5
145 ; ZVFH-NEXT:    frflags a0
146 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
147 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
148 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
149 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
150 ; ZVFH-NEXT:    fsflags a0
151 ; ZVFH-NEXT:    ret
153 ; ZVFHMIN-LABEL: vp_nearbyint_nxv2f16_unmasked:
154 ; ZVFHMIN:       # %bb.0:
155 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
156 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
157 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
158 ; ZVFHMIN-NEXT:    vfabs.v v8, v9
159 ; ZVFHMIN-NEXT:    lui a0, 307200
160 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
161 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5
162 ; ZVFHMIN-NEXT:    frflags a0
163 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v9, v0.t
164 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
165 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
166 ; ZVFHMIN-NEXT:    vfsgnj.vv v9, v8, v9, v0.t
167 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
168 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
169 ; ZVFHMIN-NEXT:    fsflags a0
170 ; ZVFHMIN-NEXT:    ret
171   %v = call <vscale x 2 x half> @llvm.vp.nearbyint.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
172   ret <vscale x 2 x half> %v
175 declare <vscale x 4 x half> @llvm.vp.nearbyint.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
177 define <vscale x 4 x half> @vp_nearbyint_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
178 ; ZVFH-LABEL: vp_nearbyint_nxv4f16:
179 ; ZVFH:       # %bb.0:
180 ; ZVFH-NEXT:    lui a1, %hi(.LCPI4_0)
181 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI4_0)(a1)
182 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
183 ; ZVFH-NEXT:    vfabs.v v9, v8, v0.t
184 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
185 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5, v0.t
186 ; ZVFH-NEXT:    frflags a0
187 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
188 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
189 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
190 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
191 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
192 ; ZVFH-NEXT:    fsflags a0
193 ; ZVFH-NEXT:    ret
195 ; ZVFHMIN-LABEL: vp_nearbyint_nxv4f16:
196 ; ZVFHMIN:       # %bb.0:
197 ; ZVFHMIN-NEXT:    vmv1r.v v9, v0
198 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
199 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
200 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
201 ; ZVFHMIN-NEXT:    vfabs.v v12, v10, v0.t
202 ; ZVFHMIN-NEXT:    lui a0, 307200
203 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
204 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
205 ; ZVFHMIN-NEXT:    vmflt.vf v9, v12, fa5, v0.t
206 ; ZVFHMIN-NEXT:    frflags a0
207 ; ZVFHMIN-NEXT:    vmv1r.v v0, v9
208 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
209 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v12, v10, v0.t
210 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v12, v12, v0.t
211 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
212 ; ZVFHMIN-NEXT:    vfsgnj.vv v10, v12, v10, v0.t
213 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
214 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
215 ; ZVFHMIN-NEXT:    fsflags a0
216 ; ZVFHMIN-NEXT:    ret
217   %v = call <vscale x 4 x half> @llvm.vp.nearbyint.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl)
218   ret <vscale x 4 x half> %v
221 define <vscale x 4 x half> @vp_nearbyint_nxv4f16_unmasked(<vscale x 4 x half> %va, i32 zeroext %evl) {
222 ; ZVFH-LABEL: vp_nearbyint_nxv4f16_unmasked:
223 ; ZVFH:       # %bb.0:
224 ; ZVFH-NEXT:    lui a1, %hi(.LCPI5_0)
225 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI5_0)(a1)
226 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
227 ; ZVFH-NEXT:    vfabs.v v9, v8
228 ; ZVFH-NEXT:    vmflt.vf v0, v9, fa5
229 ; ZVFH-NEXT:    frflags a0
230 ; ZVFH-NEXT:    vfcvt.x.f.v v9, v8, v0.t
231 ; ZVFH-NEXT:    vfcvt.f.x.v v9, v9, v0.t
232 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
233 ; ZVFH-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
234 ; ZVFH-NEXT:    fsflags a0
235 ; ZVFH-NEXT:    ret
237 ; ZVFHMIN-LABEL: vp_nearbyint_nxv4f16_unmasked:
238 ; ZVFHMIN:       # %bb.0:
239 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
240 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
241 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
242 ; ZVFHMIN-NEXT:    vfabs.v v8, v10
243 ; ZVFHMIN-NEXT:    lui a0, 307200
244 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
245 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5
246 ; ZVFHMIN-NEXT:    frflags a0
247 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v10, v0.t
248 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
249 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
250 ; ZVFHMIN-NEXT:    vfsgnj.vv v10, v8, v10, v0.t
251 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
252 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
253 ; ZVFHMIN-NEXT:    fsflags a0
254 ; ZVFHMIN-NEXT:    ret
255   %v = call <vscale x 4 x half> @llvm.vp.nearbyint.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
256   ret <vscale x 4 x half> %v
259 declare <vscale x 8 x half> @llvm.vp.nearbyint.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
261 define <vscale x 8 x half> @vp_nearbyint_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
262 ; ZVFH-LABEL: vp_nearbyint_nxv8f16:
263 ; ZVFH:       # %bb.0:
264 ; ZVFH-NEXT:    lui a1, %hi(.LCPI6_0)
265 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI6_0)(a1)
266 ; ZVFH-NEXT:    vmv1r.v v10, v0
267 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
268 ; ZVFH-NEXT:    vfabs.v v12, v8, v0.t
269 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
270 ; ZVFH-NEXT:    vmflt.vf v10, v12, fa5, v0.t
271 ; ZVFH-NEXT:    frflags a0
272 ; ZVFH-NEXT:    vmv1r.v v0, v10
273 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
274 ; ZVFH-NEXT:    vfcvt.x.f.v v12, v8, v0.t
275 ; ZVFH-NEXT:    vfcvt.f.x.v v12, v12, v0.t
276 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
277 ; ZVFH-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
278 ; ZVFH-NEXT:    fsflags a0
279 ; ZVFH-NEXT:    ret
281 ; ZVFHMIN-LABEL: vp_nearbyint_nxv8f16:
282 ; ZVFHMIN:       # %bb.0:
283 ; ZVFHMIN-NEXT:    vmv1r.v v10, v0
284 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
285 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
286 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
287 ; ZVFHMIN-NEXT:    vfabs.v v16, v12, v0.t
288 ; ZVFHMIN-NEXT:    lui a0, 307200
289 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
290 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
291 ; ZVFHMIN-NEXT:    vmflt.vf v10, v16, fa5, v0.t
292 ; ZVFHMIN-NEXT:    frflags a0
293 ; ZVFHMIN-NEXT:    vmv1r.v v0, v10
294 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
295 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v16, v12, v0.t
296 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v16, v16, v0.t
297 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
298 ; ZVFHMIN-NEXT:    vfsgnj.vv v12, v16, v12, v0.t
299 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
300 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
301 ; ZVFHMIN-NEXT:    fsflags a0
302 ; ZVFHMIN-NEXT:    ret
303   %v = call <vscale x 8 x half> @llvm.vp.nearbyint.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl)
304   ret <vscale x 8 x half> %v
307 define <vscale x 8 x half> @vp_nearbyint_nxv8f16_unmasked(<vscale x 8 x half> %va, i32 zeroext %evl) {
308 ; ZVFH-LABEL: vp_nearbyint_nxv8f16_unmasked:
309 ; ZVFH:       # %bb.0:
310 ; ZVFH-NEXT:    lui a1, %hi(.LCPI7_0)
311 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI7_0)(a1)
312 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
313 ; ZVFH-NEXT:    vfabs.v v10, v8
314 ; ZVFH-NEXT:    vmflt.vf v0, v10, fa5
315 ; ZVFH-NEXT:    frflags a0
316 ; ZVFH-NEXT:    vfcvt.x.f.v v10, v8, v0.t
317 ; ZVFH-NEXT:    vfcvt.f.x.v v10, v10, v0.t
318 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
319 ; ZVFH-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
320 ; ZVFH-NEXT:    fsflags a0
321 ; ZVFH-NEXT:    ret
323 ; ZVFHMIN-LABEL: vp_nearbyint_nxv8f16_unmasked:
324 ; ZVFHMIN:       # %bb.0:
325 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
326 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
327 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
328 ; ZVFHMIN-NEXT:    vfabs.v v8, v12
329 ; ZVFHMIN-NEXT:    lui a0, 307200
330 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
331 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5
332 ; ZVFHMIN-NEXT:    frflags a0
333 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v12, v0.t
334 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
335 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
336 ; ZVFHMIN-NEXT:    vfsgnj.vv v12, v8, v12, v0.t
337 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
338 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
339 ; ZVFHMIN-NEXT:    fsflags a0
340 ; ZVFHMIN-NEXT:    ret
341   %v = call <vscale x 8 x half> @llvm.vp.nearbyint.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
342   ret <vscale x 8 x half> %v
345 declare <vscale x 16 x half> @llvm.vp.nearbyint.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
347 define <vscale x 16 x half> @vp_nearbyint_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
348 ; ZVFH-LABEL: vp_nearbyint_nxv16f16:
349 ; ZVFH:       # %bb.0:
350 ; ZVFH-NEXT:    lui a1, %hi(.LCPI8_0)
351 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI8_0)(a1)
352 ; ZVFH-NEXT:    vmv1r.v v12, v0
353 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
354 ; ZVFH-NEXT:    vfabs.v v16, v8, v0.t
355 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m4, ta, mu
356 ; ZVFH-NEXT:    vmflt.vf v12, v16, fa5, v0.t
357 ; ZVFH-NEXT:    frflags a0
358 ; ZVFH-NEXT:    vmv1r.v v0, v12
359 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
360 ; ZVFH-NEXT:    vfcvt.x.f.v v16, v8, v0.t
361 ; ZVFH-NEXT:    vfcvt.f.x.v v16, v16, v0.t
362 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m4, ta, mu
363 ; ZVFH-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
364 ; ZVFH-NEXT:    fsflags a0
365 ; ZVFH-NEXT:    ret
367 ; ZVFHMIN-LABEL: vp_nearbyint_nxv16f16:
368 ; ZVFHMIN:       # %bb.0:
369 ; ZVFHMIN-NEXT:    vmv1r.v v12, v0
370 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
371 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
372 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
373 ; ZVFHMIN-NEXT:    vfabs.v v24, v16, v0.t
374 ; ZVFHMIN-NEXT:    lui a0, 307200
375 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
376 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
377 ; ZVFHMIN-NEXT:    vmflt.vf v12, v24, fa5, v0.t
378 ; ZVFHMIN-NEXT:    frflags a0
379 ; ZVFHMIN-NEXT:    vmv1r.v v0, v12
380 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
381 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v24, v16, v0.t
382 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v24, v24, v0.t
383 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
384 ; ZVFHMIN-NEXT:    vfsgnj.vv v16, v24, v16, v0.t
385 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
386 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
387 ; ZVFHMIN-NEXT:    fsflags a0
388 ; ZVFHMIN-NEXT:    ret
389   %v = call <vscale x 16 x half> @llvm.vp.nearbyint.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl)
390   ret <vscale x 16 x half> %v
393 define <vscale x 16 x half> @vp_nearbyint_nxv16f16_unmasked(<vscale x 16 x half> %va, i32 zeroext %evl) {
394 ; ZVFH-LABEL: vp_nearbyint_nxv16f16_unmasked:
395 ; ZVFH:       # %bb.0:
396 ; ZVFH-NEXT:    lui a1, %hi(.LCPI9_0)
397 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI9_0)(a1)
398 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
399 ; ZVFH-NEXT:    vfabs.v v12, v8
400 ; ZVFH-NEXT:    vmflt.vf v0, v12, fa5
401 ; ZVFH-NEXT:    frflags a0
402 ; ZVFH-NEXT:    vfcvt.x.f.v v12, v8, v0.t
403 ; ZVFH-NEXT:    vfcvt.f.x.v v12, v12, v0.t
404 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m4, ta, mu
405 ; ZVFH-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
406 ; ZVFH-NEXT:    fsflags a0
407 ; ZVFH-NEXT:    ret
409 ; ZVFHMIN-LABEL: vp_nearbyint_nxv16f16_unmasked:
410 ; ZVFHMIN:       # %bb.0:
411 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
412 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
413 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
414 ; ZVFHMIN-NEXT:    vfabs.v v8, v16
415 ; ZVFHMIN-NEXT:    lui a0, 307200
416 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a0
417 ; ZVFHMIN-NEXT:    vmflt.vf v0, v8, fa5
418 ; ZVFHMIN-NEXT:    frflags a0
419 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v16, v0.t
420 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
421 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
422 ; ZVFHMIN-NEXT:    vfsgnj.vv v16, v8, v16, v0.t
423 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
424 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
425 ; ZVFHMIN-NEXT:    fsflags a0
426 ; ZVFHMIN-NEXT:    ret
427   %v = call <vscale x 16 x half> @llvm.vp.nearbyint.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
428   ret <vscale x 16 x half> %v
431 declare <vscale x 32 x half> @llvm.vp.nearbyint.nxv32f16(<vscale x 32 x half>, <vscale x 32 x i1>, i32)
433 define <vscale x 32 x half> @vp_nearbyint_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
434 ; ZVFH-LABEL: vp_nearbyint_nxv32f16:
435 ; ZVFH:       # %bb.0:
436 ; ZVFH-NEXT:    lui a1, %hi(.LCPI10_0)
437 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI10_0)(a1)
438 ; ZVFH-NEXT:    vmv1r.v v16, v0
439 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
440 ; ZVFH-NEXT:    vfabs.v v24, v8, v0.t
441 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m8, ta, mu
442 ; ZVFH-NEXT:    vmflt.vf v16, v24, fa5, v0.t
443 ; ZVFH-NEXT:    frflags a0
444 ; ZVFH-NEXT:    vmv1r.v v0, v16
445 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m8, ta, ma
446 ; ZVFH-NEXT:    vfcvt.x.f.v v24, v8, v0.t
447 ; ZVFH-NEXT:    vfcvt.f.x.v v24, v24, v0.t
448 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m8, ta, mu
449 ; ZVFH-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
450 ; ZVFH-NEXT:    fsflags a0
451 ; ZVFH-NEXT:    ret
453 ; ZVFHMIN-LABEL: vp_nearbyint_nxv32f16:
454 ; ZVFHMIN:       # %bb.0:
455 ; ZVFHMIN-NEXT:    addi sp, sp, -16
456 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
457 ; ZVFHMIN-NEXT:    csrr a1, vlenb
458 ; ZVFHMIN-NEXT:    slli a1, a1, 3
459 ; ZVFHMIN-NEXT:    sub sp, sp, a1
460 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
461 ; ZVFHMIN-NEXT:    vmv1r.v v7, v0
462 ; ZVFHMIN-NEXT:    csrr a2, vlenb
463 ; ZVFHMIN-NEXT:    slli a1, a2, 1
464 ; ZVFHMIN-NEXT:    sub a3, a0, a1
465 ; ZVFHMIN-NEXT:    sltu a4, a0, a3
466 ; ZVFHMIN-NEXT:    addi a4, a4, -1
467 ; ZVFHMIN-NEXT:    and a3, a4, a3
468 ; ZVFHMIN-NEXT:    srli a2, a2, 2
469 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
470 ; ZVFHMIN-NEXT:    vslidedown.vx v17, v0, a2
471 ; ZVFHMIN-NEXT:    addi a2, sp, 16
472 ; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
473 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
474 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
475 ; ZVFHMIN-NEXT:    vmv1r.v v0, v17
476 ; ZVFHMIN-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
477 ; ZVFHMIN-NEXT:    vfabs.v v8, v24, v0.t
478 ; ZVFHMIN-NEXT:    lui a2, 307200
479 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a2
480 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
481 ; ZVFHMIN-NEXT:    vmflt.vf v17, v8, fa5, v0.t
482 ; ZVFHMIN-NEXT:    frflags a2
483 ; ZVFHMIN-NEXT:    vmv1r.v v0, v17
484 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
485 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v24, v0.t
486 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
487 ; ZVFHMIN-NEXT:    fsflags a2
488 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
489 ; ZVFHMIN-NEXT:    vfsgnj.vv v24, v8, v24, v0.t
490 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
491 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24
492 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB10_2
493 ; ZVFHMIN-NEXT:  # %bb.1:
494 ; ZVFHMIN-NEXT:    mv a0, a1
495 ; ZVFHMIN-NEXT:  .LBB10_2:
496 ; ZVFHMIN-NEXT:    addi a1, sp, 16
497 ; ZVFHMIN-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
498 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
499 ; ZVFHMIN-NEXT:    vmv1r.v v0, v7
500 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
501 ; ZVFHMIN-NEXT:    vfabs.v v16, v24, v0.t
502 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
503 ; ZVFHMIN-NEXT:    vmflt.vf v7, v16, fa5, v0.t
504 ; ZVFHMIN-NEXT:    frflags a0
505 ; ZVFHMIN-NEXT:    vmv1r.v v0, v7
506 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
507 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v16, v24, v0.t
508 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v16, v16, v0.t
509 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
510 ; ZVFHMIN-NEXT:    vfsgnj.vv v24, v16, v24, v0.t
511 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
512 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24
513 ; ZVFHMIN-NEXT:    fsflags a0
514 ; ZVFHMIN-NEXT:    csrr a0, vlenb
515 ; ZVFHMIN-NEXT:    slli a0, a0, 3
516 ; ZVFHMIN-NEXT:    add sp, sp, a0
517 ; ZVFHMIN-NEXT:    addi sp, sp, 16
518 ; ZVFHMIN-NEXT:    ret
519   %v = call <vscale x 32 x half> @llvm.vp.nearbyint.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl)
520   ret <vscale x 32 x half> %v
523 define <vscale x 32 x half> @vp_nearbyint_nxv32f16_unmasked(<vscale x 32 x half> %va, i32 zeroext %evl) {
524 ; ZVFH-LABEL: vp_nearbyint_nxv32f16_unmasked:
525 ; ZVFH:       # %bb.0:
526 ; ZVFH-NEXT:    lui a1, %hi(.LCPI11_0)
527 ; ZVFH-NEXT:    flh fa5, %lo(.LCPI11_0)(a1)
528 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
529 ; ZVFH-NEXT:    vfabs.v v16, v8
530 ; ZVFH-NEXT:    vmflt.vf v0, v16, fa5
531 ; ZVFH-NEXT:    frflags a0
532 ; ZVFH-NEXT:    vfcvt.x.f.v v16, v8, v0.t
533 ; ZVFH-NEXT:    vfcvt.f.x.v v16, v16, v0.t
534 ; ZVFH-NEXT:    vsetvli zero, zero, e16, m8, ta, mu
535 ; ZVFH-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
536 ; ZVFH-NEXT:    fsflags a0
537 ; ZVFH-NEXT:    ret
539 ; ZVFHMIN-LABEL: vp_nearbyint_nxv32f16_unmasked:
540 ; ZVFHMIN:       # %bb.0:
541 ; ZVFHMIN-NEXT:    addi sp, sp, -16
542 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
543 ; ZVFHMIN-NEXT:    csrr a1, vlenb
544 ; ZVFHMIN-NEXT:    slli a1, a1, 3
545 ; ZVFHMIN-NEXT:    sub sp, sp, a1
546 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
547 ; ZVFHMIN-NEXT:    csrr a2, vlenb
548 ; ZVFHMIN-NEXT:    slli a1, a2, 1
549 ; ZVFHMIN-NEXT:    sub a3, a0, a1
550 ; ZVFHMIN-NEXT:    sltu a4, a0, a3
551 ; ZVFHMIN-NEXT:    addi a4, a4, -1
552 ; ZVFHMIN-NEXT:    and a3, a4, a3
553 ; ZVFHMIN-NEXT:    srli a2, a2, 2
554 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, m4, ta, ma
555 ; ZVFHMIN-NEXT:    vmset.m v16
556 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
557 ; ZVFHMIN-NEXT:    vslidedown.vx v16, v16, a2
558 ; ZVFHMIN-NEXT:    addi a2, sp, 16
559 ; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
560 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
561 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
562 ; ZVFHMIN-NEXT:    vmv1r.v v0, v16
563 ; ZVFHMIN-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
564 ; ZVFHMIN-NEXT:    vfabs.v v8, v24, v0.t
565 ; ZVFHMIN-NEXT:    lui a2, 307200
566 ; ZVFHMIN-NEXT:    fmv.w.x fa5, a2
567 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
568 ; ZVFHMIN-NEXT:    vmflt.vf v16, v8, fa5, v0.t
569 ; ZVFHMIN-NEXT:    frflags a2
570 ; ZVFHMIN-NEXT:    vmv1r.v v0, v16
571 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
572 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v8, v24, v0.t
573 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v8, v8, v0.t
574 ; ZVFHMIN-NEXT:    fsflags a2
575 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
576 ; ZVFHMIN-NEXT:    vfsgnj.vv v24, v8, v24, v0.t
577 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
578 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24
579 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB11_2
580 ; ZVFHMIN-NEXT:  # %bb.1:
581 ; ZVFHMIN-NEXT:    mv a0, a1
582 ; ZVFHMIN-NEXT:  .LBB11_2:
583 ; ZVFHMIN-NEXT:    addi a1, sp, 16
584 ; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
585 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
586 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
587 ; ZVFHMIN-NEXT:    vfabs.v v24, v16
588 ; ZVFHMIN-NEXT:    vmflt.vf v0, v24, fa5
589 ; ZVFHMIN-NEXT:    frflags a0
590 ; ZVFHMIN-NEXT:    vfcvt.x.f.v v24, v16, v0.t
591 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v24, v24, v0.t
592 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
593 ; ZVFHMIN-NEXT:    vfsgnj.vv v16, v24, v16, v0.t
594 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
595 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
596 ; ZVFHMIN-NEXT:    fsflags a0
597 ; ZVFHMIN-NEXT:    csrr a0, vlenb
598 ; ZVFHMIN-NEXT:    slli a0, a0, 3
599 ; ZVFHMIN-NEXT:    add sp, sp, a0
600 ; ZVFHMIN-NEXT:    addi sp, sp, 16
601 ; ZVFHMIN-NEXT:    ret
602   %v = call <vscale x 32 x half> @llvm.vp.nearbyint.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
603   ret <vscale x 32 x half> %v
606 declare <vscale x 1 x float> @llvm.vp.nearbyint.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
608 define <vscale x 1 x float> @vp_nearbyint_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
609 ; CHECK-LABEL: vp_nearbyint_nxv1f32:
610 ; CHECK:       # %bb.0:
611 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
612 ; CHECK-NEXT:    vfabs.v v9, v8, v0.t
613 ; CHECK-NEXT:    lui a0, 307200
614 ; CHECK-NEXT:    fmv.w.x fa5, a0
615 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
616 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5, v0.t
617 ; CHECK-NEXT:    frflags a0
618 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
619 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
620 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
621 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
622 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
623 ; CHECK-NEXT:    fsflags a0
624 ; CHECK-NEXT:    ret
625   %v = call <vscale x 1 x float> @llvm.vp.nearbyint.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl)
626   ret <vscale x 1 x float> %v
629 define <vscale x 1 x float> @vp_nearbyint_nxv1f32_unmasked(<vscale x 1 x float> %va, i32 zeroext %evl) {
630 ; CHECK-LABEL: vp_nearbyint_nxv1f32_unmasked:
631 ; CHECK:       # %bb.0:
632 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
633 ; CHECK-NEXT:    vfabs.v v9, v8
634 ; CHECK-NEXT:    lui a0, 307200
635 ; CHECK-NEXT:    fmv.w.x fa5, a0
636 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
637 ; CHECK-NEXT:    frflags a0
638 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
639 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
640 ; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
641 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
642 ; CHECK-NEXT:    fsflags a0
643 ; CHECK-NEXT:    ret
644   %v = call <vscale x 1 x float> @llvm.vp.nearbyint.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
645   ret <vscale x 1 x float> %v
648 declare <vscale x 2 x float> @llvm.vp.nearbyint.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
650 define <vscale x 2 x float> @vp_nearbyint_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
651 ; CHECK-LABEL: vp_nearbyint_nxv2f32:
652 ; CHECK:       # %bb.0:
653 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
654 ; CHECK-NEXT:    vfabs.v v9, v8, v0.t
655 ; CHECK-NEXT:    lui a0, 307200
656 ; CHECK-NEXT:    fmv.w.x fa5, a0
657 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
658 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5, v0.t
659 ; CHECK-NEXT:    frflags a0
660 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
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, e32, m1, ta, mu
664 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
665 ; CHECK-NEXT:    fsflags a0
666 ; CHECK-NEXT:    ret
667   %v = call <vscale x 2 x float> @llvm.vp.nearbyint.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
668   ret <vscale x 2 x float> %v
671 define <vscale x 2 x float> @vp_nearbyint_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) {
672 ; CHECK-LABEL: vp_nearbyint_nxv2f32_unmasked:
673 ; CHECK:       # %bb.0:
674 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
675 ; CHECK-NEXT:    vfabs.v v9, v8
676 ; CHECK-NEXT:    lui a0, 307200
677 ; CHECK-NEXT:    fmv.w.x fa5, a0
678 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
679 ; CHECK-NEXT:    frflags a0
680 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
681 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
682 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
683 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
684 ; CHECK-NEXT:    fsflags a0
685 ; CHECK-NEXT:    ret
686   %v = call <vscale x 2 x float> @llvm.vp.nearbyint.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
687   ret <vscale x 2 x float> %v
690 declare <vscale x 4 x float> @llvm.vp.nearbyint.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
692 define <vscale x 4 x float> @vp_nearbyint_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
693 ; CHECK-LABEL: vp_nearbyint_nxv4f32:
694 ; CHECK:       # %bb.0:
695 ; CHECK-NEXT:    vmv1r.v v10, v0
696 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
697 ; CHECK-NEXT:    vfabs.v v12, v8, v0.t
698 ; CHECK-NEXT:    lui a0, 307200
699 ; CHECK-NEXT:    fmv.w.x fa5, a0
700 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
701 ; CHECK-NEXT:    vmflt.vf v10, v12, fa5, v0.t
702 ; CHECK-NEXT:    frflags a0
703 ; CHECK-NEXT:    vmv1r.v v0, v10
704 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
705 ; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
706 ; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
707 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
708 ; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
709 ; CHECK-NEXT:    fsflags a0
710 ; CHECK-NEXT:    ret
711   %v = call <vscale x 4 x float> @llvm.vp.nearbyint.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl)
712   ret <vscale x 4 x float> %v
715 define <vscale x 4 x float> @vp_nearbyint_nxv4f32_unmasked(<vscale x 4 x float> %va, i32 zeroext %evl) {
716 ; CHECK-LABEL: vp_nearbyint_nxv4f32_unmasked:
717 ; CHECK:       # %bb.0:
718 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
719 ; CHECK-NEXT:    vfabs.v v10, v8
720 ; CHECK-NEXT:    lui a0, 307200
721 ; CHECK-NEXT:    fmv.w.x fa5, a0
722 ; CHECK-NEXT:    vmflt.vf v0, v10, fa5
723 ; CHECK-NEXT:    frflags a0
724 ; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t
725 ; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t
726 ; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
727 ; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
728 ; CHECK-NEXT:    fsflags a0
729 ; CHECK-NEXT:    ret
730   %v = call <vscale x 4 x float> @llvm.vp.nearbyint.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
731   ret <vscale x 4 x float> %v
734 declare <vscale x 8 x float> @llvm.vp.nearbyint.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
736 define <vscale x 8 x float> @vp_nearbyint_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
737 ; CHECK-LABEL: vp_nearbyint_nxv8f32:
738 ; CHECK:       # %bb.0:
739 ; CHECK-NEXT:    vmv1r.v v12, v0
740 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
741 ; CHECK-NEXT:    vfabs.v v16, v8, v0.t
742 ; CHECK-NEXT:    lui a0, 307200
743 ; CHECK-NEXT:    fmv.w.x fa5, a0
744 ; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
745 ; CHECK-NEXT:    vmflt.vf v12, v16, fa5, v0.t
746 ; CHECK-NEXT:    frflags a0
747 ; CHECK-NEXT:    vmv1r.v v0, v12
748 ; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
749 ; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
750 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
751 ; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
752 ; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
753 ; CHECK-NEXT:    fsflags a0
754 ; CHECK-NEXT:    ret
755   %v = call <vscale x 8 x float> @llvm.vp.nearbyint.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl)
756   ret <vscale x 8 x float> %v
759 define <vscale x 8 x float> @vp_nearbyint_nxv8f32_unmasked(<vscale x 8 x float> %va, i32 zeroext %evl) {
760 ; CHECK-LABEL: vp_nearbyint_nxv8f32_unmasked:
761 ; CHECK:       # %bb.0:
762 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
763 ; CHECK-NEXT:    vfabs.v v12, v8
764 ; CHECK-NEXT:    lui a0, 307200
765 ; CHECK-NEXT:    fmv.w.x fa5, a0
766 ; CHECK-NEXT:    vmflt.vf v0, v12, fa5
767 ; CHECK-NEXT:    frflags a0
768 ; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
769 ; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
770 ; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
771 ; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
772 ; CHECK-NEXT:    fsflags a0
773 ; CHECK-NEXT:    ret
774   %v = call <vscale x 8 x float> @llvm.vp.nearbyint.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
775   ret <vscale x 8 x float> %v
778 declare <vscale x 16 x float> @llvm.vp.nearbyint.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
780 define <vscale x 16 x float> @vp_nearbyint_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
781 ; CHECK-LABEL: vp_nearbyint_nxv16f32:
782 ; CHECK:       # %bb.0:
783 ; CHECK-NEXT:    vmv1r.v v16, v0
784 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
785 ; CHECK-NEXT:    vfabs.v v24, v8, v0.t
786 ; CHECK-NEXT:    lui a0, 307200
787 ; CHECK-NEXT:    fmv.w.x fa5, a0
788 ; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
789 ; CHECK-NEXT:    vmflt.vf v16, v24, fa5, v0.t
790 ; CHECK-NEXT:    frflags a0
791 ; CHECK-NEXT:    vmv1r.v v0, v16
792 ; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
793 ; CHECK-NEXT:    vfcvt.x.f.v v24, v8, v0.t
794 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
795 ; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
796 ; CHECK-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
797 ; CHECK-NEXT:    fsflags a0
798 ; CHECK-NEXT:    ret
799   %v = call <vscale x 16 x float> @llvm.vp.nearbyint.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl)
800   ret <vscale x 16 x float> %v
803 define <vscale x 16 x float> @vp_nearbyint_nxv16f32_unmasked(<vscale x 16 x float> %va, i32 zeroext %evl) {
804 ; CHECK-LABEL: vp_nearbyint_nxv16f32_unmasked:
805 ; CHECK:       # %bb.0:
806 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
807 ; CHECK-NEXT:    vfabs.v v16, v8
808 ; CHECK-NEXT:    lui a0, 307200
809 ; CHECK-NEXT:    fmv.w.x fa5, a0
810 ; CHECK-NEXT:    vmflt.vf v0, v16, fa5
811 ; CHECK-NEXT:    frflags a0
812 ; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
813 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
814 ; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
815 ; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
816 ; CHECK-NEXT:    fsflags a0
817 ; CHECK-NEXT:    ret
818   %v = call <vscale x 16 x float> @llvm.vp.nearbyint.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
819   ret <vscale x 16 x float> %v
822 declare <vscale x 1 x double> @llvm.vp.nearbyint.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
824 define <vscale x 1 x double> @vp_nearbyint_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
825 ; CHECK-LABEL: vp_nearbyint_nxv1f64:
826 ; CHECK:       # %bb.0:
827 ; CHECK-NEXT:    lui a1, %hi(.LCPI22_0)
828 ; CHECK-NEXT:    fld fa5, %lo(.LCPI22_0)(a1)
829 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
830 ; CHECK-NEXT:    vfabs.v v9, v8, v0.t
831 ; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
832 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5, v0.t
833 ; CHECK-NEXT:    frflags a0
834 ; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
835 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
836 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
837 ; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
838 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
839 ; CHECK-NEXT:    fsflags a0
840 ; CHECK-NEXT:    ret
841   %v = call <vscale x 1 x double> @llvm.vp.nearbyint.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl)
842   ret <vscale x 1 x double> %v
845 define <vscale x 1 x double> @vp_nearbyint_nxv1f64_unmasked(<vscale x 1 x double> %va, i32 zeroext %evl) {
846 ; CHECK-LABEL: vp_nearbyint_nxv1f64_unmasked:
847 ; CHECK:       # %bb.0:
848 ; CHECK-NEXT:    lui a1, %hi(.LCPI23_0)
849 ; CHECK-NEXT:    fld fa5, %lo(.LCPI23_0)(a1)
850 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
851 ; CHECK-NEXT:    vfabs.v v9, v8
852 ; CHECK-NEXT:    vmflt.vf v0, v9, fa5
853 ; CHECK-NEXT:    frflags a0
854 ; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
855 ; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
856 ; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
857 ; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
858 ; CHECK-NEXT:    fsflags a0
859 ; CHECK-NEXT:    ret
860   %v = call <vscale x 1 x double> @llvm.vp.nearbyint.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
861   ret <vscale x 1 x double> %v
864 declare <vscale x 2 x double> @llvm.vp.nearbyint.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
866 define <vscale x 2 x double> @vp_nearbyint_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
867 ; CHECK-LABEL: vp_nearbyint_nxv2f64:
868 ; CHECK:       # %bb.0:
869 ; CHECK-NEXT:    lui a1, %hi(.LCPI24_0)
870 ; CHECK-NEXT:    fld fa5, %lo(.LCPI24_0)(a1)
871 ; CHECK-NEXT:    vmv1r.v v10, v0
872 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
873 ; CHECK-NEXT:    vfabs.v v12, v8, v0.t
874 ; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, mu
875 ; CHECK-NEXT:    vmflt.vf v10, v12, fa5, v0.t
876 ; CHECK-NEXT:    frflags a0
877 ; CHECK-NEXT:    vmv1r.v v0, v10
878 ; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
879 ; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
880 ; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
881 ; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, mu
882 ; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
883 ; CHECK-NEXT:    fsflags a0
884 ; CHECK-NEXT:    ret
885   %v = call <vscale x 2 x double> @llvm.vp.nearbyint.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
886   ret <vscale x 2 x double> %v
889 define <vscale x 2 x double> @vp_nearbyint_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) {
890 ; CHECK-LABEL: vp_nearbyint_nxv2f64_unmasked:
891 ; CHECK:       # %bb.0:
892 ; CHECK-NEXT:    lui a1, %hi(.LCPI25_0)
893 ; CHECK-NEXT:    fld fa5, %lo(.LCPI25_0)(a1)
894 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
895 ; CHECK-NEXT:    vfabs.v v10, v8
896 ; CHECK-NEXT:    vmflt.vf v0, v10, fa5
897 ; CHECK-NEXT:    frflags a0
898 ; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t
899 ; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t
900 ; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, mu
901 ; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
902 ; CHECK-NEXT:    fsflags a0
903 ; CHECK-NEXT:    ret
904   %v = call <vscale x 2 x double> @llvm.vp.nearbyint.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
905   ret <vscale x 2 x double> %v
908 declare <vscale x 4 x double> @llvm.vp.nearbyint.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
910 define <vscale x 4 x double> @vp_nearbyint_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
911 ; CHECK-LABEL: vp_nearbyint_nxv4f64:
912 ; CHECK:       # %bb.0:
913 ; CHECK-NEXT:    lui a1, %hi(.LCPI26_0)
914 ; CHECK-NEXT:    fld fa5, %lo(.LCPI26_0)(a1)
915 ; CHECK-NEXT:    vmv1r.v v12, v0
916 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
917 ; CHECK-NEXT:    vfabs.v v16, v8, v0.t
918 ; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
919 ; CHECK-NEXT:    vmflt.vf v12, v16, fa5, v0.t
920 ; CHECK-NEXT:    frflags a0
921 ; CHECK-NEXT:    vmv1r.v v0, v12
922 ; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, ma
923 ; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
924 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
925 ; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
926 ; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
927 ; CHECK-NEXT:    fsflags a0
928 ; CHECK-NEXT:    ret
929   %v = call <vscale x 4 x double> @llvm.vp.nearbyint.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl)
930   ret <vscale x 4 x double> %v
933 define <vscale x 4 x double> @vp_nearbyint_nxv4f64_unmasked(<vscale x 4 x double> %va, i32 zeroext %evl) {
934 ; CHECK-LABEL: vp_nearbyint_nxv4f64_unmasked:
935 ; CHECK:       # %bb.0:
936 ; CHECK-NEXT:    lui a1, %hi(.LCPI27_0)
937 ; CHECK-NEXT:    fld fa5, %lo(.LCPI27_0)(a1)
938 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
939 ; CHECK-NEXT:    vfabs.v v12, v8
940 ; CHECK-NEXT:    vmflt.vf v0, v12, fa5
941 ; CHECK-NEXT:    frflags a0
942 ; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
943 ; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
944 ; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
945 ; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
946 ; CHECK-NEXT:    fsflags a0
947 ; CHECK-NEXT:    ret
948   %v = call <vscale x 4 x double> @llvm.vp.nearbyint.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
949   ret <vscale x 4 x double> %v
952 declare <vscale x 7 x double> @llvm.vp.nearbyint.nxv7f64(<vscale x 7 x double>, <vscale x 7 x i1>, i32)
954 define <vscale x 7 x double> @vp_nearbyint_nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x i1> %m, i32 zeroext %evl) {
955 ; CHECK-LABEL: vp_nearbyint_nxv7f64:
956 ; CHECK:       # %bb.0:
957 ; CHECK-NEXT:    lui a1, %hi(.LCPI28_0)
958 ; CHECK-NEXT:    fld fa5, %lo(.LCPI28_0)(a1)
959 ; CHECK-NEXT:    vmv1r.v v16, v0
960 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
961 ; CHECK-NEXT:    vfabs.v v24, v8, v0.t
962 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
963 ; CHECK-NEXT:    vmflt.vf v16, v24, fa5, v0.t
964 ; CHECK-NEXT:    frflags a0
965 ; CHECK-NEXT:    vmv1r.v v0, v16
966 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma
967 ; CHECK-NEXT:    vfcvt.x.f.v v24, v8, v0.t
968 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
969 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
970 ; CHECK-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
971 ; CHECK-NEXT:    fsflags a0
972 ; CHECK-NEXT:    ret
973   %v = call <vscale x 7 x double> @llvm.vp.nearbyint.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x i1> %m, i32 %evl)
974   ret <vscale x 7 x double> %v
977 define <vscale x 7 x double> @vp_nearbyint_nxv7f64_unmasked(<vscale x 7 x double> %va, i32 zeroext %evl) {
978 ; CHECK-LABEL: vp_nearbyint_nxv7f64_unmasked:
979 ; CHECK:       # %bb.0:
980 ; CHECK-NEXT:    lui a1, %hi(.LCPI29_0)
981 ; CHECK-NEXT:    fld fa5, %lo(.LCPI29_0)(a1)
982 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
983 ; CHECK-NEXT:    vfabs.v v16, v8
984 ; CHECK-NEXT:    vmflt.vf v0, v16, fa5
985 ; CHECK-NEXT:    frflags a0
986 ; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
987 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
988 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
989 ; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
990 ; CHECK-NEXT:    fsflags a0
991 ; CHECK-NEXT:    ret
992   %v = call <vscale x 7 x double> @llvm.vp.nearbyint.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x i1> splat (i1 true), i32 %evl)
993   ret <vscale x 7 x double> %v
996 declare <vscale x 8 x double> @llvm.vp.nearbyint.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
998 define <vscale x 8 x double> @vp_nearbyint_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
999 ; CHECK-LABEL: vp_nearbyint_nxv8f64:
1000 ; CHECK:       # %bb.0:
1001 ; CHECK-NEXT:    lui a1, %hi(.LCPI30_0)
1002 ; CHECK-NEXT:    fld fa5, %lo(.LCPI30_0)(a1)
1003 ; CHECK-NEXT:    vmv1r.v v16, v0
1004 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1005 ; CHECK-NEXT:    vfabs.v v24, v8, v0.t
1006 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1007 ; CHECK-NEXT:    vmflt.vf v16, v24, fa5, v0.t
1008 ; CHECK-NEXT:    frflags a0
1009 ; CHECK-NEXT:    vmv1r.v v0, v16
1010 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma
1011 ; CHECK-NEXT:    vfcvt.x.f.v v24, v8, v0.t
1012 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
1013 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1014 ; CHECK-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
1015 ; CHECK-NEXT:    fsflags a0
1016 ; CHECK-NEXT:    ret
1017   %v = call <vscale x 8 x double> @llvm.vp.nearbyint.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl)
1018   ret <vscale x 8 x double> %v
1021 define <vscale x 8 x double> @vp_nearbyint_nxv8f64_unmasked(<vscale x 8 x double> %va, i32 zeroext %evl) {
1022 ; CHECK-LABEL: vp_nearbyint_nxv8f64_unmasked:
1023 ; CHECK:       # %bb.0:
1024 ; CHECK-NEXT:    lui a1, %hi(.LCPI31_0)
1025 ; CHECK-NEXT:    fld fa5, %lo(.LCPI31_0)(a1)
1026 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1027 ; CHECK-NEXT:    vfabs.v v16, v8
1028 ; CHECK-NEXT:    vmflt.vf v0, v16, fa5
1029 ; CHECK-NEXT:    frflags a0
1030 ; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
1031 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
1032 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1033 ; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
1034 ; CHECK-NEXT:    fsflags a0
1035 ; CHECK-NEXT:    ret
1036   %v = call <vscale x 8 x double> @llvm.vp.nearbyint.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1037   ret <vscale x 8 x double> %v
1040 ; Test splitting.
1041 declare <vscale x 16 x double> @llvm.vp.nearbyint.nxv16f64(<vscale x 16 x double>, <vscale x 16 x i1>, i32)
1043 define <vscale x 16 x double> @vp_nearbyint_nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1044 ; CHECK-LABEL: vp_nearbyint_nxv16f64:
1045 ; CHECK:       # %bb.0:
1046 ; CHECK-NEXT:    vmv1r.v v7, v0
1047 ; CHECK-NEXT:    csrr a1, vlenb
1048 ; CHECK-NEXT:    srli a2, a1, 3
1049 ; CHECK-NEXT:    vsetvli a3, zero, e8, mf4, ta, ma
1050 ; CHECK-NEXT:    vslidedown.vx v6, v0, a2
1051 ; CHECK-NEXT:    sub a2, a0, a1
1052 ; CHECK-NEXT:    lui a3, %hi(.LCPI32_0)
1053 ; CHECK-NEXT:    fld fa5, %lo(.LCPI32_0)(a3)
1054 ; CHECK-NEXT:    sltu a3, a0, a2
1055 ; CHECK-NEXT:    addi a3, a3, -1
1056 ; CHECK-NEXT:    and a2, a3, a2
1057 ; CHECK-NEXT:    vmv1r.v v0, v6
1058 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1059 ; CHECK-NEXT:    vfabs.v v24, v16, v0.t
1060 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1061 ; CHECK-NEXT:    vmflt.vf v6, v24, fa5, v0.t
1062 ; CHECK-NEXT:    frflags a2
1063 ; CHECK-NEXT:    vmv1r.v v0, v6
1064 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma
1065 ; CHECK-NEXT:    vfcvt.x.f.v v24, v16, v0.t
1066 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
1067 ; CHECK-NEXT:    fsflags a2
1068 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1069 ; CHECK-NEXT:    vfsgnj.vv v16, v24, v16, v0.t
1070 ; CHECK-NEXT:    bltu a0, a1, .LBB32_2
1071 ; CHECK-NEXT:  # %bb.1:
1072 ; CHECK-NEXT:    mv a0, a1
1073 ; CHECK-NEXT:  .LBB32_2:
1074 ; CHECK-NEXT:    vmv1r.v v0, v7
1075 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1076 ; CHECK-NEXT:    vfabs.v v24, v8, v0.t
1077 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1078 ; CHECK-NEXT:    vmflt.vf v7, v24, fa5, v0.t
1079 ; CHECK-NEXT:    frflags a0
1080 ; CHECK-NEXT:    vmv1r.v v0, v7
1081 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma
1082 ; CHECK-NEXT:    vfcvt.x.f.v v24, v8, v0.t
1083 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
1084 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1085 ; CHECK-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
1086 ; CHECK-NEXT:    fsflags a0
1087 ; CHECK-NEXT:    ret
1088   %v = call <vscale x 16 x double> @llvm.vp.nearbyint.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x i1> %m, i32 %evl)
1089   ret <vscale x 16 x double> %v
1092 define <vscale x 16 x double> @vp_nearbyint_nxv16f64_unmasked(<vscale x 16 x double> %va, i32 zeroext %evl) {
1093 ; CHECK-LABEL: vp_nearbyint_nxv16f64_unmasked:
1094 ; CHECK:       # %bb.0:
1095 ; CHECK-NEXT:    csrr a1, vlenb
1096 ; CHECK-NEXT:    sub a2, a0, a1
1097 ; CHECK-NEXT:    lui a3, %hi(.LCPI33_0)
1098 ; CHECK-NEXT:    fld fa5, %lo(.LCPI33_0)(a3)
1099 ; CHECK-NEXT:    sltu a3, a0, a2
1100 ; CHECK-NEXT:    addi a3, a3, -1
1101 ; CHECK-NEXT:    and a2, a3, a2
1102 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1103 ; CHECK-NEXT:    vfabs.v v24, v16
1104 ; CHECK-NEXT:    vmflt.vf v0, v24, fa5
1105 ; CHECK-NEXT:    frflags a2
1106 ; CHECK-NEXT:    vfcvt.x.f.v v24, v16, v0.t
1107 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
1108 ; CHECK-NEXT:    fsflags a2
1109 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1110 ; CHECK-NEXT:    vfsgnj.vv v16, v24, v16, v0.t
1111 ; CHECK-NEXT:    bltu a0, a1, .LBB33_2
1112 ; CHECK-NEXT:  # %bb.1:
1113 ; CHECK-NEXT:    mv a0, a1
1114 ; CHECK-NEXT:  .LBB33_2:
1115 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1116 ; CHECK-NEXT:    vfabs.v v24, v8
1117 ; CHECK-NEXT:    vmflt.vf v0, v24, fa5
1118 ; CHECK-NEXT:    frflags a0
1119 ; CHECK-NEXT:    vfcvt.x.f.v v24, v8, v0.t
1120 ; CHECK-NEXT:    vfcvt.f.x.v v24, v24, v0.t
1121 ; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
1122 ; CHECK-NEXT:    vfsgnj.vv v8, v24, v8, v0.t
1123 ; CHECK-NEXT:    fsflags a0
1124 ; CHECK-NEXT:    ret
1125   %v = call <vscale x 16 x double> @llvm.vp.nearbyint.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1126   ret <vscale x 16 x double> %v