1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \
3 ; RUN: -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \
4 ; RUN: --check-prefixes=CHECK,ZVFH
5 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \
6 ; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \
7 ; RUN: --check-prefixes=CHECK,ZVFH
8 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \
9 ; RUN: -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \
10 ; RUN: --check-prefixes=CHECK,ZVFHMIN
11 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \
12 ; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \
13 ; RUN: --check-prefixes=CHECK,ZVFHMIN
15 define <vscale x 1 x bfloat> @floor_nxv1bf16(<vscale x 1 x bfloat> %x) {
16 ; CHECK-LABEL: floor_nxv1bf16:
18 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
19 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
20 ; CHECK-NEXT: lui a0, 307200
21 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
22 ; CHECK-NEXT: vfabs.v v8, v9
23 ; CHECK-NEXT: fmv.w.x fa5, a0
24 ; CHECK-NEXT: vmflt.vf v0, v8, fa5
25 ; CHECK-NEXT: fsrmi a0, 2
26 ; CHECK-NEXT: vfcvt.x.f.v v8, v9, v0.t
28 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
29 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, mu
30 ; CHECK-NEXT: vfsgnj.vv v9, v8, v9, v0.t
31 ; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
32 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9
34 %a = call <vscale x 1 x bfloat> @llvm.floor.nxv1bf16(<vscale x 1 x bfloat> %x)
35 ret <vscale x 1 x bfloat> %a
37 declare <vscale x 1 x bfloat> @llvm.floor.nxv1bf16(<vscale x 1 x bfloat>)
39 define <vscale x 2 x bfloat> @floor_nxv2bf16(<vscale x 2 x bfloat> %x) {
40 ; CHECK-LABEL: floor_nxv2bf16:
42 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
43 ; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8
44 ; CHECK-NEXT: lui a0, 307200
45 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
46 ; CHECK-NEXT: vfabs.v v8, v9
47 ; CHECK-NEXT: fmv.w.x fa5, a0
48 ; CHECK-NEXT: vmflt.vf v0, v8, fa5
49 ; CHECK-NEXT: fsrmi a0, 2
50 ; CHECK-NEXT: vfcvt.x.f.v v8, v9, v0.t
52 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
53 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, mu
54 ; CHECK-NEXT: vfsgnj.vv v9, v8, v9, v0.t
55 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
56 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9
58 %a = call <vscale x 2 x bfloat> @llvm.floor.nxv2bf16(<vscale x 2 x bfloat> %x)
59 ret <vscale x 2 x bfloat> %a
61 declare <vscale x 2 x bfloat> @llvm.floor.nxv2bf16(<vscale x 2 x bfloat>)
63 define <vscale x 4 x bfloat> @floor_nxv4bf16(<vscale x 4 x bfloat> %x) {
64 ; CHECK-LABEL: floor_nxv4bf16:
66 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
67 ; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8
68 ; CHECK-NEXT: lui a0, 307200
69 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
70 ; CHECK-NEXT: vfabs.v v8, v10
71 ; CHECK-NEXT: fmv.w.x fa5, a0
72 ; CHECK-NEXT: vmflt.vf v0, v8, fa5
73 ; CHECK-NEXT: fsrmi a0, 2
74 ; CHECK-NEXT: vfcvt.x.f.v v8, v10, v0.t
76 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
77 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, mu
78 ; CHECK-NEXT: vfsgnj.vv v10, v8, v10, v0.t
79 ; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma
80 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10
82 %a = call <vscale x 4 x bfloat> @llvm.floor.nxv4bf16(<vscale x 4 x bfloat> %x)
83 ret <vscale x 4 x bfloat> %a
85 declare <vscale x 4 x bfloat> @llvm.floor.nxv4bf16(<vscale x 4 x bfloat>)
87 define <vscale x 8 x bfloat> @floor_nxv8bf16(<vscale x 8 x bfloat> %x) {
88 ; CHECK-LABEL: floor_nxv8bf16:
90 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
91 ; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8
92 ; CHECK-NEXT: lui a0, 307200
93 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
94 ; CHECK-NEXT: vfabs.v v8, v12
95 ; CHECK-NEXT: fmv.w.x fa5, a0
96 ; CHECK-NEXT: vmflt.vf v0, v8, fa5
97 ; CHECK-NEXT: fsrmi a0, 2
98 ; CHECK-NEXT: vfcvt.x.f.v v8, v12, v0.t
100 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
101 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, mu
102 ; CHECK-NEXT: vfsgnj.vv v12, v8, v12, v0.t
103 ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
104 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12
106 %a = call <vscale x 8 x bfloat> @llvm.floor.nxv8bf16(<vscale x 8 x bfloat> %x)
107 ret <vscale x 8 x bfloat> %a
109 declare <vscale x 8 x bfloat> @llvm.floor.nxv8bf16(<vscale x 8 x bfloat>)
111 define <vscale x 16 x bfloat> @floor_nxv16bf16(<vscale x 16 x bfloat> %x) {
112 ; CHECK-LABEL: floor_nxv16bf16:
114 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
115 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
116 ; CHECK-NEXT: lui a0, 307200
117 ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma
118 ; CHECK-NEXT: vfabs.v v8, v16
119 ; CHECK-NEXT: fmv.w.x fa5, a0
120 ; CHECK-NEXT: vmflt.vf v0, v8, fa5
121 ; CHECK-NEXT: fsrmi a0, 2
122 ; CHECK-NEXT: vfcvt.x.f.v v8, v16, v0.t
123 ; CHECK-NEXT: fsrm a0
124 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
125 ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, mu
126 ; CHECK-NEXT: vfsgnj.vv v16, v8, v16, v0.t
127 ; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma
128 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16
130 %a = call <vscale x 16 x bfloat> @llvm.floor.nxv16bf16(<vscale x 16 x bfloat> %x)
131 ret <vscale x 16 x bfloat> %a
133 declare <vscale x 16 x bfloat> @llvm.floor.nxv16bf16(<vscale x 16 x bfloat>)
135 define <vscale x 32 x bfloat> @floor_nxv32bf16(<vscale x 32 x bfloat> %x) {
136 ; CHECK-LABEL: floor_nxv32bf16:
138 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
139 ; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8
140 ; CHECK-NEXT: lui a0, 307200
141 ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma
142 ; CHECK-NEXT: vfabs.v v24, v16
143 ; CHECK-NEXT: fmv.w.x fa5, a0
144 ; CHECK-NEXT: vmflt.vf v0, v24, fa5
145 ; CHECK-NEXT: fsrmi a0, 2
146 ; CHECK-NEXT: vfcvt.x.f.v v24, v16, v0.t
147 ; CHECK-NEXT: fsrm a0
148 ; CHECK-NEXT: vfcvt.f.x.v v24, v24, v0.t
149 ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, mu
150 ; CHECK-NEXT: vfsgnj.vv v16, v24, v16, v0.t
151 ; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma
152 ; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v12
153 ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma
154 ; CHECK-NEXT: vfabs.v v8, v24
155 ; CHECK-NEXT: vmflt.vf v0, v8, fa5
156 ; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma
157 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16
158 ; CHECK-NEXT: fsrmi a0, 2
159 ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma
160 ; CHECK-NEXT: vfcvt.x.f.v v16, v24, v0.t
161 ; CHECK-NEXT: fsrm a0
162 ; CHECK-NEXT: vfcvt.f.x.v v16, v16, v0.t
163 ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, mu
164 ; CHECK-NEXT: vfsgnj.vv v24, v16, v24, v0.t
165 ; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma
166 ; CHECK-NEXT: vfncvtbf16.f.f.w v12, v24
168 %a = call <vscale x 32 x bfloat> @llvm.floor.nxv32bf16(<vscale x 32 x bfloat> %x)
169 ret <vscale x 32 x bfloat> %a
171 declare <vscale x 32 x bfloat> @llvm.floor.nxv32bf16(<vscale x 32 x bfloat>)
173 define <vscale x 1 x half> @floor_nxv1f16(<vscale x 1 x half> %x) {
174 ; ZVFH-LABEL: floor_nxv1f16:
176 ; ZVFH-NEXT: lui a0, %hi(.LCPI6_0)
177 ; ZVFH-NEXT: flh fa5, %lo(.LCPI6_0)(a0)
178 ; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
179 ; ZVFH-NEXT: vfabs.v v9, v8
180 ; ZVFH-NEXT: vmflt.vf v0, v9, fa5
181 ; ZVFH-NEXT: fsrmi a0, 2
182 ; ZVFH-NEXT: vfcvt.x.f.v v9, v8, v0.t
184 ; ZVFH-NEXT: vfcvt.f.x.v v9, v9, v0.t
185 ; ZVFH-NEXT: vsetvli zero, zero, e16, mf4, ta, mu
186 ; ZVFH-NEXT: vfsgnj.vv v8, v9, v8, v0.t
189 ; ZVFHMIN-LABEL: floor_nxv1f16:
191 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
192 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
193 ; ZVFHMIN-NEXT: lui a0, 307200
194 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
195 ; ZVFHMIN-NEXT: vfabs.v v8, v9
196 ; ZVFHMIN-NEXT: fmv.w.x fa5, a0
197 ; ZVFHMIN-NEXT: vmflt.vf v0, v8, fa5
198 ; ZVFHMIN-NEXT: fsrmi a0, 2
199 ; ZVFHMIN-NEXT: vfcvt.x.f.v v8, v9, v0.t
200 ; ZVFHMIN-NEXT: fsrm a0
201 ; ZVFHMIN-NEXT: vfcvt.f.x.v v8, v8, v0.t
202 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, mu
203 ; ZVFHMIN-NEXT: vfsgnj.vv v9, v8, v9, v0.t
204 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
205 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
207 %a = call <vscale x 1 x half> @llvm.floor.nxv1f16(<vscale x 1 x half> %x)
208 ret <vscale x 1 x half> %a
210 declare <vscale x 1 x half> @llvm.floor.nxv1f16(<vscale x 1 x half>)
212 define <vscale x 2 x half> @floor_nxv2f16(<vscale x 2 x half> %x) {
213 ; ZVFH-LABEL: floor_nxv2f16:
215 ; ZVFH-NEXT: lui a0, %hi(.LCPI7_0)
216 ; ZVFH-NEXT: flh fa5, %lo(.LCPI7_0)(a0)
217 ; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
218 ; ZVFH-NEXT: vfabs.v v9, v8
219 ; ZVFH-NEXT: vmflt.vf v0, v9, fa5
220 ; ZVFH-NEXT: fsrmi a0, 2
221 ; ZVFH-NEXT: vfcvt.x.f.v v9, v8, v0.t
223 ; ZVFH-NEXT: vfcvt.f.x.v v9, v9, v0.t
224 ; ZVFH-NEXT: vsetvli zero, zero, e16, mf2, ta, mu
225 ; ZVFH-NEXT: vfsgnj.vv v8, v9, v8, v0.t
228 ; ZVFHMIN-LABEL: floor_nxv2f16:
230 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
231 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
232 ; ZVFHMIN-NEXT: lui a0, 307200
233 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
234 ; ZVFHMIN-NEXT: vfabs.v v8, v9
235 ; ZVFHMIN-NEXT: fmv.w.x fa5, a0
236 ; ZVFHMIN-NEXT: vmflt.vf v0, v8, fa5
237 ; ZVFHMIN-NEXT: fsrmi a0, 2
238 ; ZVFHMIN-NEXT: vfcvt.x.f.v v8, v9, v0.t
239 ; ZVFHMIN-NEXT: fsrm a0
240 ; ZVFHMIN-NEXT: vfcvt.f.x.v v8, v8, v0.t
241 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, mu
242 ; ZVFHMIN-NEXT: vfsgnj.vv v9, v8, v9, v0.t
243 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
244 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
246 %a = call <vscale x 2 x half> @llvm.floor.nxv2f16(<vscale x 2 x half> %x)
247 ret <vscale x 2 x half> %a
249 declare <vscale x 2 x half> @llvm.floor.nxv2f16(<vscale x 2 x half>)
251 define <vscale x 4 x half> @floor_nxv4f16(<vscale x 4 x half> %x) {
252 ; ZVFH-LABEL: floor_nxv4f16:
254 ; ZVFH-NEXT: lui a0, %hi(.LCPI8_0)
255 ; ZVFH-NEXT: flh fa5, %lo(.LCPI8_0)(a0)
256 ; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma
257 ; ZVFH-NEXT: vfabs.v v9, v8
258 ; ZVFH-NEXT: vmflt.vf v0, v9, fa5
259 ; ZVFH-NEXT: fsrmi a0, 2
260 ; ZVFH-NEXT: vfcvt.x.f.v v9, v8, v0.t
262 ; ZVFH-NEXT: vfcvt.f.x.v v9, v9, v0.t
263 ; ZVFH-NEXT: vsetvli zero, zero, e16, m1, ta, mu
264 ; ZVFH-NEXT: vfsgnj.vv v8, v9, v8, v0.t
267 ; ZVFHMIN-LABEL: floor_nxv4f16:
269 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
270 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
271 ; ZVFHMIN-NEXT: lui a0, 307200
272 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
273 ; ZVFHMIN-NEXT: vfabs.v v8, v10
274 ; ZVFHMIN-NEXT: fmv.w.x fa5, a0
275 ; ZVFHMIN-NEXT: vmflt.vf v0, v8, fa5
276 ; ZVFHMIN-NEXT: fsrmi a0, 2
277 ; ZVFHMIN-NEXT: vfcvt.x.f.v v8, v10, v0.t
278 ; ZVFHMIN-NEXT: fsrm a0
279 ; ZVFHMIN-NEXT: vfcvt.f.x.v v8, v8, v0.t
280 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, mu
281 ; ZVFHMIN-NEXT: vfsgnj.vv v10, v8, v10, v0.t
282 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma
283 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
285 %a = call <vscale x 4 x half> @llvm.floor.nxv4f16(<vscale x 4 x half> %x)
286 ret <vscale x 4 x half> %a
288 declare <vscale x 4 x half> @llvm.floor.nxv4f16(<vscale x 4 x half>)
290 define <vscale x 8 x half> @floor_nxv8f16(<vscale x 8 x half> %x) {
291 ; ZVFH-LABEL: floor_nxv8f16:
293 ; ZVFH-NEXT: lui a0, %hi(.LCPI9_0)
294 ; ZVFH-NEXT: flh fa5, %lo(.LCPI9_0)(a0)
295 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
296 ; ZVFH-NEXT: vfabs.v v10, v8
297 ; ZVFH-NEXT: vmflt.vf v0, v10, fa5
298 ; ZVFH-NEXT: fsrmi a0, 2
299 ; ZVFH-NEXT: vfcvt.x.f.v v10, v8, v0.t
301 ; ZVFH-NEXT: vfcvt.f.x.v v10, v10, v0.t
302 ; ZVFH-NEXT: vsetvli zero, zero, e16, m2, ta, mu
303 ; ZVFH-NEXT: vfsgnj.vv v8, v10, v8, v0.t
306 ; ZVFHMIN-LABEL: floor_nxv8f16:
308 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
309 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
310 ; ZVFHMIN-NEXT: lui a0, 307200
311 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
312 ; ZVFHMIN-NEXT: vfabs.v v8, v12
313 ; ZVFHMIN-NEXT: fmv.w.x fa5, a0
314 ; ZVFHMIN-NEXT: vmflt.vf v0, v8, fa5
315 ; ZVFHMIN-NEXT: fsrmi a0, 2
316 ; ZVFHMIN-NEXT: vfcvt.x.f.v v8, v12, v0.t
317 ; ZVFHMIN-NEXT: fsrm a0
318 ; ZVFHMIN-NEXT: vfcvt.f.x.v v8, v8, v0.t
319 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, mu
320 ; ZVFHMIN-NEXT: vfsgnj.vv v12, v8, v12, v0.t
321 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
322 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12
324 %a = call <vscale x 8 x half> @llvm.floor.nxv8f16(<vscale x 8 x half> %x)
325 ret <vscale x 8 x half> %a
327 declare <vscale x 8 x half> @llvm.floor.nxv8f16(<vscale x 8 x half>)
329 define <vscale x 16 x half> @floor_nxv16f16(<vscale x 16 x half> %x) {
330 ; ZVFH-LABEL: floor_nxv16f16:
332 ; ZVFH-NEXT: lui a0, %hi(.LCPI10_0)
333 ; ZVFH-NEXT: flh fa5, %lo(.LCPI10_0)(a0)
334 ; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma
335 ; ZVFH-NEXT: vfabs.v v12, v8
336 ; ZVFH-NEXT: vmflt.vf v0, v12, fa5
337 ; ZVFH-NEXT: fsrmi a0, 2
338 ; ZVFH-NEXT: vfcvt.x.f.v v12, v8, v0.t
340 ; ZVFH-NEXT: vfcvt.f.x.v v12, v12, v0.t
341 ; ZVFH-NEXT: vsetvli zero, zero, e16, m4, ta, mu
342 ; ZVFH-NEXT: vfsgnj.vv v8, v12, v8, v0.t
345 ; ZVFHMIN-LABEL: floor_nxv16f16:
347 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
348 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
349 ; ZVFHMIN-NEXT: lui a0, 307200
350 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
351 ; ZVFHMIN-NEXT: vfabs.v v8, v16
352 ; ZVFHMIN-NEXT: fmv.w.x fa5, a0
353 ; ZVFHMIN-NEXT: vmflt.vf v0, v8, fa5
354 ; ZVFHMIN-NEXT: fsrmi a0, 2
355 ; ZVFHMIN-NEXT: vfcvt.x.f.v v8, v16, v0.t
356 ; ZVFHMIN-NEXT: fsrm a0
357 ; ZVFHMIN-NEXT: vfcvt.f.x.v v8, v8, v0.t
358 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, mu
359 ; ZVFHMIN-NEXT: vfsgnj.vv v16, v8, v16, v0.t
360 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
361 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16
363 %a = call <vscale x 16 x half> @llvm.floor.nxv16f16(<vscale x 16 x half> %x)
364 ret <vscale x 16 x half> %a
366 declare <vscale x 16 x half> @llvm.floor.nxv16f16(<vscale x 16 x half>)
368 define <vscale x 32 x half> @floor_nxv32f16(<vscale x 32 x half> %x) {
369 ; ZVFH-LABEL: floor_nxv32f16:
371 ; ZVFH-NEXT: lui a0, %hi(.LCPI11_0)
372 ; ZVFH-NEXT: flh fa5, %lo(.LCPI11_0)(a0)
373 ; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma
374 ; ZVFH-NEXT: vfabs.v v16, v8
375 ; ZVFH-NEXT: vmflt.vf v0, v16, fa5
376 ; ZVFH-NEXT: fsrmi a0, 2
377 ; ZVFH-NEXT: vfcvt.x.f.v v16, v8, v0.t
379 ; ZVFH-NEXT: vfcvt.f.x.v v16, v16, v0.t
380 ; ZVFH-NEXT: vsetvli zero, zero, e16, m8, ta, mu
381 ; ZVFH-NEXT: vfsgnj.vv v8, v16, v8, v0.t
384 ; ZVFHMIN-LABEL: floor_nxv32f16:
386 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
387 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
388 ; ZVFHMIN-NEXT: lui a0, 307200
389 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
390 ; ZVFHMIN-NEXT: vfabs.v v24, v16
391 ; ZVFHMIN-NEXT: fmv.w.x fa5, a0
392 ; ZVFHMIN-NEXT: vmflt.vf v0, v24, fa5
393 ; ZVFHMIN-NEXT: fsrmi a0, 2
394 ; ZVFHMIN-NEXT: vfcvt.x.f.v v24, v16, v0.t
395 ; ZVFHMIN-NEXT: fsrm a0
396 ; ZVFHMIN-NEXT: vfcvt.f.x.v v24, v24, v0.t
397 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, mu
398 ; ZVFHMIN-NEXT: vfsgnj.vv v16, v24, v16, v0.t
399 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
400 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12
401 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
402 ; ZVFHMIN-NEXT: vfabs.v v8, v24
403 ; ZVFHMIN-NEXT: vmflt.vf v0, v8, fa5
404 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
405 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16
406 ; ZVFHMIN-NEXT: fsrmi a0, 2
407 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
408 ; ZVFHMIN-NEXT: vfcvt.x.f.v v16, v24, v0.t
409 ; ZVFHMIN-NEXT: fsrm a0
410 ; ZVFHMIN-NEXT: vfcvt.f.x.v v16, v16, v0.t
411 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, mu
412 ; ZVFHMIN-NEXT: vfsgnj.vv v24, v16, v24, v0.t
413 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
414 ; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v24
416 %a = call <vscale x 32 x half> @llvm.floor.nxv32f16(<vscale x 32 x half> %x)
417 ret <vscale x 32 x half> %a
419 declare <vscale x 32 x half> @llvm.floor.nxv32f16(<vscale x 32 x half>)
421 define <vscale x 1 x float> @floor_nxv1f32(<vscale x 1 x float> %x) {
422 ; CHECK-LABEL: floor_nxv1f32:
424 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
425 ; CHECK-NEXT: vfabs.v v9, v8
426 ; CHECK-NEXT: lui a0, 307200
427 ; CHECK-NEXT: fmv.w.x fa5, a0
428 ; CHECK-NEXT: vmflt.vf v0, v9, fa5
429 ; CHECK-NEXT: fsrmi a0, 2
430 ; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t
431 ; CHECK-NEXT: fsrm a0
432 ; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
433 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, mu
434 ; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
436 %a = call <vscale x 1 x float> @llvm.floor.nxv1f32(<vscale x 1 x float> %x)
437 ret <vscale x 1 x float> %a
439 declare <vscale x 1 x float> @llvm.floor.nxv1f32(<vscale x 1 x float>)
441 define <vscale x 2 x float> @floor_nxv2f32(<vscale x 2 x float> %x) {
442 ; CHECK-LABEL: floor_nxv2f32:
444 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
445 ; CHECK-NEXT: vfabs.v v9, v8
446 ; CHECK-NEXT: lui a0, 307200
447 ; CHECK-NEXT: fmv.w.x fa5, a0
448 ; CHECK-NEXT: vmflt.vf v0, v9, fa5
449 ; CHECK-NEXT: fsrmi a0, 2
450 ; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t
451 ; CHECK-NEXT: fsrm a0
452 ; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
453 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, mu
454 ; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
456 %a = call <vscale x 2 x float> @llvm.floor.nxv2f32(<vscale x 2 x float> %x)
457 ret <vscale x 2 x float> %a
459 declare <vscale x 2 x float> @llvm.floor.nxv2f32(<vscale x 2 x float>)
461 define <vscale x 4 x float> @floor_nxv4f32(<vscale x 4 x float> %x) {
462 ; CHECK-LABEL: floor_nxv4f32:
464 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
465 ; CHECK-NEXT: vfabs.v v10, v8
466 ; CHECK-NEXT: lui a0, 307200
467 ; CHECK-NEXT: fmv.w.x fa5, a0
468 ; CHECK-NEXT: vmflt.vf v0, v10, fa5
469 ; CHECK-NEXT: fsrmi a0, 2
470 ; CHECK-NEXT: vfcvt.x.f.v v10, v8, v0.t
471 ; CHECK-NEXT: fsrm a0
472 ; CHECK-NEXT: vfcvt.f.x.v v10, v10, v0.t
473 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, mu
474 ; CHECK-NEXT: vfsgnj.vv v8, v10, v8, v0.t
476 %a = call <vscale x 4 x float> @llvm.floor.nxv4f32(<vscale x 4 x float> %x)
477 ret <vscale x 4 x float> %a
479 declare <vscale x 4 x float> @llvm.floor.nxv4f32(<vscale x 4 x float>)
481 define <vscale x 8 x float> @floor_nxv8f32(<vscale x 8 x float> %x) {
482 ; CHECK-LABEL: floor_nxv8f32:
484 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
485 ; CHECK-NEXT: vfabs.v v12, v8
486 ; CHECK-NEXT: lui a0, 307200
487 ; CHECK-NEXT: fmv.w.x fa5, a0
488 ; CHECK-NEXT: vmflt.vf v0, v12, fa5
489 ; CHECK-NEXT: fsrmi a0, 2
490 ; CHECK-NEXT: vfcvt.x.f.v v12, v8, v0.t
491 ; CHECK-NEXT: fsrm a0
492 ; CHECK-NEXT: vfcvt.f.x.v v12, v12, v0.t
493 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, mu
494 ; CHECK-NEXT: vfsgnj.vv v8, v12, v8, v0.t
496 %a = call <vscale x 8 x float> @llvm.floor.nxv8f32(<vscale x 8 x float> %x)
497 ret <vscale x 8 x float> %a
499 declare <vscale x 8 x float> @llvm.floor.nxv8f32(<vscale x 8 x float>)
501 define <vscale x 16 x float> @floor_nxv16f32(<vscale x 16 x float> %x) {
502 ; CHECK-LABEL: floor_nxv16f32:
504 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
505 ; CHECK-NEXT: vfabs.v v16, v8
506 ; CHECK-NEXT: lui a0, 307200
507 ; CHECK-NEXT: fmv.w.x fa5, a0
508 ; CHECK-NEXT: vmflt.vf v0, v16, fa5
509 ; CHECK-NEXT: fsrmi a0, 2
510 ; CHECK-NEXT: vfcvt.x.f.v v16, v8, v0.t
511 ; CHECK-NEXT: fsrm a0
512 ; CHECK-NEXT: vfcvt.f.x.v v16, v16, v0.t
513 ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, mu
514 ; CHECK-NEXT: vfsgnj.vv v8, v16, v8, v0.t
516 %a = call <vscale x 16 x float> @llvm.floor.nxv16f32(<vscale x 16 x float> %x)
517 ret <vscale x 16 x float> %a
519 declare <vscale x 16 x float> @llvm.floor.nxv16f32(<vscale x 16 x float>)
521 define <vscale x 1 x double> @floor_nxv1f64(<vscale x 1 x double> %x) {
522 ; CHECK-LABEL: floor_nxv1f64:
524 ; CHECK-NEXT: lui a0, %hi(.LCPI17_0)
525 ; CHECK-NEXT: fld fa5, %lo(.LCPI17_0)(a0)
526 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
527 ; CHECK-NEXT: vfabs.v v9, v8
528 ; CHECK-NEXT: vmflt.vf v0, v9, fa5
529 ; CHECK-NEXT: fsrmi a0, 2
530 ; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t
531 ; CHECK-NEXT: fsrm a0
532 ; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
533 ; CHECK-NEXT: vsetvli zero, zero, e64, m1, ta, mu
534 ; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
536 %a = call <vscale x 1 x double> @llvm.floor.nxv1f64(<vscale x 1 x double> %x)
537 ret <vscale x 1 x double> %a
539 declare <vscale x 1 x double> @llvm.floor.nxv1f64(<vscale x 1 x double>)
541 define <vscale x 2 x double> @floor_nxv2f64(<vscale x 2 x double> %x) {
542 ; CHECK-LABEL: floor_nxv2f64:
544 ; CHECK-NEXT: lui a0, %hi(.LCPI18_0)
545 ; CHECK-NEXT: fld fa5, %lo(.LCPI18_0)(a0)
546 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
547 ; CHECK-NEXT: vfabs.v v10, v8
548 ; CHECK-NEXT: vmflt.vf v0, v10, fa5
549 ; CHECK-NEXT: fsrmi a0, 2
550 ; CHECK-NEXT: vfcvt.x.f.v v10, v8, v0.t
551 ; CHECK-NEXT: fsrm a0
552 ; CHECK-NEXT: vfcvt.f.x.v v10, v10, v0.t
553 ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, mu
554 ; CHECK-NEXT: vfsgnj.vv v8, v10, v8, v0.t
556 %a = call <vscale x 2 x double> @llvm.floor.nxv2f64(<vscale x 2 x double> %x)
557 ret <vscale x 2 x double> %a
559 declare <vscale x 2 x double> @llvm.floor.nxv2f64(<vscale x 2 x double>)
561 define <vscale x 4 x double> @floor_nxv4f64(<vscale x 4 x double> %x) {
562 ; CHECK-LABEL: floor_nxv4f64:
564 ; CHECK-NEXT: lui a0, %hi(.LCPI19_0)
565 ; CHECK-NEXT: fld fa5, %lo(.LCPI19_0)(a0)
566 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
567 ; CHECK-NEXT: vfabs.v v12, v8
568 ; CHECK-NEXT: vmflt.vf v0, v12, fa5
569 ; CHECK-NEXT: fsrmi a0, 2
570 ; CHECK-NEXT: vfcvt.x.f.v v12, v8, v0.t
571 ; CHECK-NEXT: fsrm a0
572 ; CHECK-NEXT: vfcvt.f.x.v v12, v12, v0.t
573 ; CHECK-NEXT: vsetvli zero, zero, e64, m4, ta, mu
574 ; CHECK-NEXT: vfsgnj.vv v8, v12, v8, v0.t
576 %a = call <vscale x 4 x double> @llvm.floor.nxv4f64(<vscale x 4 x double> %x)
577 ret <vscale x 4 x double> %a
579 declare <vscale x 4 x double> @llvm.floor.nxv4f64(<vscale x 4 x double>)
581 define <vscale x 8 x double> @floor_nxv8f64(<vscale x 8 x double> %x) {
582 ; CHECK-LABEL: floor_nxv8f64:
584 ; CHECK-NEXT: lui a0, %hi(.LCPI20_0)
585 ; CHECK-NEXT: fld fa5, %lo(.LCPI20_0)(a0)
586 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
587 ; CHECK-NEXT: vfabs.v v16, v8
588 ; CHECK-NEXT: vmflt.vf v0, v16, fa5
589 ; CHECK-NEXT: fsrmi a0, 2
590 ; CHECK-NEXT: vfcvt.x.f.v v16, v8, v0.t
591 ; CHECK-NEXT: fsrm a0
592 ; CHECK-NEXT: vfcvt.f.x.v v16, v16, v0.t
593 ; CHECK-NEXT: vsetvli zero, zero, e64, m8, ta, mu
594 ; CHECK-NEXT: vfsgnj.vv v8, v16, v8, v0.t
596 %a = call <vscale x 8 x double> @llvm.floor.nxv8f64(<vscale x 8 x double> %x)
597 ret <vscale x 8 x double> %a
599 declare <vscale x 8 x double> @llvm.floor.nxv8f64(<vscale x 8 x double>)