xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/ffloor-sdnode.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
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
14
15define <vscale x 1 x bfloat> @floor_nxv1bf16(<vscale x 1 x bfloat> %x) {
16; CHECK-LABEL: floor_nxv1bf16:
17; CHECK:       # %bb.0:
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
27; CHECK-NEXT:    fsrm a0
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
33; CHECK-NEXT:    ret
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
36}
37declare <vscale x 1 x bfloat> @llvm.floor.nxv1bf16(<vscale x 1 x bfloat>)
38
39define <vscale x 2 x bfloat> @floor_nxv2bf16(<vscale x 2 x bfloat> %x) {
40; CHECK-LABEL: floor_nxv2bf16:
41; CHECK:       # %bb.0:
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
51; CHECK-NEXT:    fsrm a0
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
57; CHECK-NEXT:    ret
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
60}
61declare <vscale x 2 x bfloat> @llvm.floor.nxv2bf16(<vscale x 2 x bfloat>)
62
63define <vscale x 4 x bfloat> @floor_nxv4bf16(<vscale x 4 x bfloat> %x) {
64; CHECK-LABEL: floor_nxv4bf16:
65; CHECK:       # %bb.0:
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
75; CHECK-NEXT:    fsrm a0
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
81; CHECK-NEXT:    ret
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
84}
85declare <vscale x 4 x bfloat> @llvm.floor.nxv4bf16(<vscale x 4 x bfloat>)
86
87define <vscale x 8 x bfloat> @floor_nxv8bf16(<vscale x 8 x bfloat> %x) {
88; CHECK-LABEL: floor_nxv8bf16:
89; CHECK:       # %bb.0:
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
99; CHECK-NEXT:    fsrm a0
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
105; CHECK-NEXT:    ret
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
108}
109declare <vscale x 8 x bfloat> @llvm.floor.nxv8bf16(<vscale x 8 x bfloat>)
110
111define <vscale x 16 x bfloat> @floor_nxv16bf16(<vscale x 16 x bfloat> %x) {
112; CHECK-LABEL: floor_nxv16bf16:
113; CHECK:       # %bb.0:
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
129; CHECK-NEXT:    ret
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
132}
133declare <vscale x 16 x bfloat> @llvm.floor.nxv16bf16(<vscale x 16 x bfloat>)
134
135define <vscale x 32 x bfloat> @floor_nxv32bf16(<vscale x 32 x bfloat> %x) {
136; CHECK-LABEL: floor_nxv32bf16:
137; CHECK:       # %bb.0:
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
167; CHECK-NEXT:    ret
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
170}
171declare <vscale x 32 x bfloat> @llvm.floor.nxv32bf16(<vscale x 32 x bfloat>)
172
173define <vscale x 1 x half> @floor_nxv1f16(<vscale x 1 x half> %x) {
174; ZVFH-LABEL: floor_nxv1f16:
175; ZVFH:       # %bb.0:
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
183; ZVFH-NEXT:    fsrm a0
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
187; ZVFH-NEXT:    ret
188;
189; ZVFHMIN-LABEL: floor_nxv1f16:
190; ZVFHMIN:       # %bb.0:
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
206; ZVFHMIN-NEXT:    ret
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
209}
210declare <vscale x 1 x half> @llvm.floor.nxv1f16(<vscale x 1 x half>)
211
212define <vscale x 2 x half> @floor_nxv2f16(<vscale x 2 x half> %x) {
213; ZVFH-LABEL: floor_nxv2f16:
214; ZVFH:       # %bb.0:
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
222; ZVFH-NEXT:    fsrm a0
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
226; ZVFH-NEXT:    ret
227;
228; ZVFHMIN-LABEL: floor_nxv2f16:
229; ZVFHMIN:       # %bb.0:
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
245; ZVFHMIN-NEXT:    ret
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
248}
249declare <vscale x 2 x half> @llvm.floor.nxv2f16(<vscale x 2 x half>)
250
251define <vscale x 4 x half> @floor_nxv4f16(<vscale x 4 x half> %x) {
252; ZVFH-LABEL: floor_nxv4f16:
253; ZVFH:       # %bb.0:
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
261; ZVFH-NEXT:    fsrm a0
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
265; ZVFH-NEXT:    ret
266;
267; ZVFHMIN-LABEL: floor_nxv4f16:
268; ZVFHMIN:       # %bb.0:
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
284; ZVFHMIN-NEXT:    ret
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
287}
288declare <vscale x 4 x half> @llvm.floor.nxv4f16(<vscale x 4 x half>)
289
290define <vscale x 8 x half> @floor_nxv8f16(<vscale x 8 x half> %x) {
291; ZVFH-LABEL: floor_nxv8f16:
292; ZVFH:       # %bb.0:
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
300; ZVFH-NEXT:    fsrm a0
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
304; ZVFH-NEXT:    ret
305;
306; ZVFHMIN-LABEL: floor_nxv8f16:
307; ZVFHMIN:       # %bb.0:
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
323; ZVFHMIN-NEXT:    ret
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
326}
327declare <vscale x 8 x half> @llvm.floor.nxv8f16(<vscale x 8 x half>)
328
329define <vscale x 16 x half> @floor_nxv16f16(<vscale x 16 x half> %x) {
330; ZVFH-LABEL: floor_nxv16f16:
331; ZVFH:       # %bb.0:
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
339; ZVFH-NEXT:    fsrm a0
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
343; ZVFH-NEXT:    ret
344;
345; ZVFHMIN-LABEL: floor_nxv16f16:
346; ZVFHMIN:       # %bb.0:
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
362; ZVFHMIN-NEXT:    ret
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
365}
366declare <vscale x 16 x half> @llvm.floor.nxv16f16(<vscale x 16 x half>)
367
368define <vscale x 32 x half> @floor_nxv32f16(<vscale x 32 x half> %x) {
369; ZVFH-LABEL: floor_nxv32f16:
370; ZVFH:       # %bb.0:
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
378; ZVFH-NEXT:    fsrm a0
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
382; ZVFH-NEXT:    ret
383;
384; ZVFHMIN-LABEL: floor_nxv32f16:
385; ZVFHMIN:       # %bb.0:
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
415; ZVFHMIN-NEXT:    ret
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
418}
419declare <vscale x 32 x half> @llvm.floor.nxv32f16(<vscale x 32 x half>)
420
421define <vscale x 1 x float> @floor_nxv1f32(<vscale x 1 x float> %x) {
422; CHECK-LABEL: floor_nxv1f32:
423; CHECK:       # %bb.0:
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
435; CHECK-NEXT:    ret
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
438}
439declare <vscale x 1 x float> @llvm.floor.nxv1f32(<vscale x 1 x float>)
440
441define <vscale x 2 x float> @floor_nxv2f32(<vscale x 2 x float> %x) {
442; CHECK-LABEL: floor_nxv2f32:
443; CHECK:       # %bb.0:
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
455; CHECK-NEXT:    ret
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
458}
459declare <vscale x 2 x float> @llvm.floor.nxv2f32(<vscale x 2 x float>)
460
461define <vscale x 4 x float> @floor_nxv4f32(<vscale x 4 x float> %x) {
462; CHECK-LABEL: floor_nxv4f32:
463; CHECK:       # %bb.0:
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
475; CHECK-NEXT:    ret
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
478}
479declare <vscale x 4 x float> @llvm.floor.nxv4f32(<vscale x 4 x float>)
480
481define <vscale x 8 x float> @floor_nxv8f32(<vscale x 8 x float> %x) {
482; CHECK-LABEL: floor_nxv8f32:
483; CHECK:       # %bb.0:
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
495; CHECK-NEXT:    ret
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
498}
499declare <vscale x 8 x float> @llvm.floor.nxv8f32(<vscale x 8 x float>)
500
501define <vscale x 16 x float> @floor_nxv16f32(<vscale x 16 x float> %x) {
502; CHECK-LABEL: floor_nxv16f32:
503; CHECK:       # %bb.0:
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
515; CHECK-NEXT:    ret
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
518}
519declare <vscale x 16 x float> @llvm.floor.nxv16f32(<vscale x 16 x float>)
520
521define <vscale x 1 x double> @floor_nxv1f64(<vscale x 1 x double> %x) {
522; CHECK-LABEL: floor_nxv1f64:
523; CHECK:       # %bb.0:
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
535; CHECK-NEXT:    ret
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
538}
539declare <vscale x 1 x double> @llvm.floor.nxv1f64(<vscale x 1 x double>)
540
541define <vscale x 2 x double> @floor_nxv2f64(<vscale x 2 x double> %x) {
542; CHECK-LABEL: floor_nxv2f64:
543; CHECK:       # %bb.0:
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
555; CHECK-NEXT:    ret
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
558}
559declare <vscale x 2 x double> @llvm.floor.nxv2f64(<vscale x 2 x double>)
560
561define <vscale x 4 x double> @floor_nxv4f64(<vscale x 4 x double> %x) {
562; CHECK-LABEL: floor_nxv4f64:
563; CHECK:       # %bb.0:
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
575; CHECK-NEXT:    ret
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
578}
579declare <vscale x 4 x double> @llvm.floor.nxv4f64(<vscale x 4 x double>)
580
581define <vscale x 8 x double> @floor_nxv8f64(<vscale x 8 x double> %x) {
582; CHECK-LABEL: floor_nxv8f64:
583; CHECK:       # %bb.0:
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
595; CHECK-NEXT:    ret
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
598}
599declare <vscale x 8 x double> @llvm.floor.nxv8f64(<vscale x 8 x double>)
600