xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fnearbyint-constrained-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,+v -target-abi=ilp32d \
3; RUN:     -verify-machineinstrs < %s | FileCheck %s
4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \
5; RUN:     -verify-machineinstrs < %s | FileCheck %s
6
7declare <2 x half> @llvm.experimental.constrained.nearbyint.v2f16(<2 x half>, metadata, metadata)
8
9define <2 x half> @nearbyint_v2f16(<2 x half> %v) strictfp {
10; CHECK-LABEL: nearbyint_v2f16:
11; CHECK:       # %bb.0:
12; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
13; CHECK-NEXT:    vmfne.vv v0, v8, v8
14; CHECK-NEXT:    lui a0, %hi(.LCPI0_0)
15; CHECK-NEXT:    flh fa5, %lo(.LCPI0_0)(a0)
16; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
17; CHECK-NEXT:    vfabs.v v9, v8
18; CHECK-NEXT:    vmflt.vf v0, v9, fa5
19; CHECK-NEXT:    frflags a0
20; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
21; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
22; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
23; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu
24; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
25; CHECK-NEXT:    fsflags a0
26; CHECK-NEXT:    ret
27  %r = call <2 x half> @llvm.experimental.constrained.nearbyint.v2f16(<2 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
28  ret <2 x half> %r
29}
30
31declare <4 x half> @llvm.experimental.constrained.nearbyint.v4f16(<4 x half>, metadata, metadata)
32
33define <4 x half> @nearbyint_v4f16(<4 x half> %v) strictfp {
34; CHECK-LABEL: nearbyint_v4f16:
35; CHECK:       # %bb.0:
36; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
37; CHECK-NEXT:    vmfne.vv v0, v8, v8
38; CHECK-NEXT:    lui a0, %hi(.LCPI1_0)
39; CHECK-NEXT:    flh fa5, %lo(.LCPI1_0)(a0)
40; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
41; CHECK-NEXT:    vfabs.v v9, v8
42; CHECK-NEXT:    vmflt.vf v0, v9, fa5
43; CHECK-NEXT:    frflags a0
44; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
45; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
46; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
47; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu
48; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
49; CHECK-NEXT:    fsflags a0
50; CHECK-NEXT:    ret
51  %r = call <4 x half> @llvm.experimental.constrained.nearbyint.v4f16(<4 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
52  ret <4 x half> %r
53}
54
55declare <8 x half> @llvm.experimental.constrained.nearbyint.v8f16(<8 x half>, metadata, metadata)
56
57define <8 x half> @nearbyint_v8f16(<8 x half> %v) strictfp {
58; CHECK-LABEL: nearbyint_v8f16:
59; CHECK:       # %bb.0:
60; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
61; CHECK-NEXT:    vmfne.vv v0, v8, v8
62; CHECK-NEXT:    lui a0, %hi(.LCPI2_0)
63; CHECK-NEXT:    flh fa5, %lo(.LCPI2_0)(a0)
64; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
65; CHECK-NEXT:    vfabs.v v9, v8
66; CHECK-NEXT:    vmflt.vf v0, v9, fa5
67; CHECK-NEXT:    frflags a0
68; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
69; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
70; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
71; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
72; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
73; CHECK-NEXT:    fsflags a0
74; CHECK-NEXT:    ret
75  %r = call <8 x half> @llvm.experimental.constrained.nearbyint.v8f16(<8 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
76  ret <8 x half> %r
77}
78
79declare <16 x half> @llvm.experimental.constrained.nearbyint.v16f16(<16 x half>, metadata, metadata)
80
81define <16 x half> @nearbyint_v16f16(<16 x half> %v) strictfp {
82; CHECK-LABEL: nearbyint_v16f16:
83; CHECK:       # %bb.0:
84; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
85; CHECK-NEXT:    vmfne.vv v0, v8, v8
86; CHECK-NEXT:    lui a0, %hi(.LCPI3_0)
87; CHECK-NEXT:    flh fa5, %lo(.LCPI3_0)(a0)
88; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
89; CHECK-NEXT:    vfabs.v v10, v8
90; CHECK-NEXT:    vmflt.vf v0, v10, fa5
91; CHECK-NEXT:    frflags a0
92; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
93; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t
94; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t
95; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, mu
96; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
97; CHECK-NEXT:    fsflags a0
98; CHECK-NEXT:    ret
99  %r = call <16 x half> @llvm.experimental.constrained.nearbyint.v16f16(<16 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
100  ret <16 x half> %r
101}
102
103declare <32 x half> @llvm.experimental.constrained.nearbyint.v32f16(<32 x half>, metadata, metadata)
104
105define <32 x half> @nearbyint_v32f16(<32 x half> %v) strictfp {
106; CHECK-LABEL: nearbyint_v32f16:
107; CHECK:       # %bb.0:
108; CHECK-NEXT:    li a0, 32
109; CHECK-NEXT:    lui a1, %hi(.LCPI4_0)
110; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
111; CHECK-NEXT:    vmfne.vv v0, v8, v8
112; CHECK-NEXT:    flh fa5, %lo(.LCPI4_0)(a1)
113; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
114; CHECK-NEXT:    vfabs.v v12, v8
115; CHECK-NEXT:    vmflt.vf v0, v12, fa5
116; CHECK-NEXT:    frflags a0
117; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
118; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
119; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
120; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, mu
121; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
122; CHECK-NEXT:    fsflags a0
123; CHECK-NEXT:    ret
124  %r = call <32 x half> @llvm.experimental.constrained.nearbyint.v32f16(<32 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
125  ret <32 x half> %r
126}
127
128declare <2 x float> @llvm.experimental.constrained.nearbyint.v2f32(<2 x float>, metadata, metadata)
129
130define <2 x float> @nearbyint_v2f32(<2 x float> %v) strictfp {
131; CHECK-LABEL: nearbyint_v2f32:
132; CHECK:       # %bb.0:
133; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
134; CHECK-NEXT:    vmfne.vv v0, v8, v8
135; CHECK-NEXT:    lui a0, 307200
136; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
137; CHECK-NEXT:    fmv.w.x fa5, a0
138; CHECK-NEXT:    vfabs.v v9, v8
139; CHECK-NEXT:    vmflt.vf v0, v9, fa5
140; CHECK-NEXT:    frflags a0
141; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
142; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
143; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
144; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
145; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
146; CHECK-NEXT:    fsflags a0
147; CHECK-NEXT:    ret
148  %r = call <2 x float> @llvm.experimental.constrained.nearbyint.v2f32(<2 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
149  ret <2 x float> %r
150}
151
152declare <4 x float> @llvm.experimental.constrained.nearbyint.v4f32(<4 x float>, metadata, metadata)
153
154define <4 x float> @nearbyint_v4f32(<4 x float> %v) strictfp {
155; CHECK-LABEL: nearbyint_v4f32:
156; CHECK:       # %bb.0:
157; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
158; CHECK-NEXT:    vmfne.vv v0, v8, v8
159; CHECK-NEXT:    lui a0, 307200
160; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
161; CHECK-NEXT:    fmv.w.x fa5, a0
162; CHECK-NEXT:    vfabs.v v9, v8
163; CHECK-NEXT:    vmflt.vf v0, v9, fa5
164; CHECK-NEXT:    frflags a0
165; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
166; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
167; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
168; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
169; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
170; CHECK-NEXT:    fsflags a0
171; CHECK-NEXT:    ret
172  %r = call <4 x float> @llvm.experimental.constrained.nearbyint.v4f32(<4 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
173  ret <4 x float> %r
174}
175
176declare <8 x float> @llvm.experimental.constrained.nearbyint.v8f32(<8 x float>, metadata, metadata)
177
178define <8 x float> @nearbyint_v8f32(<8 x float> %v) strictfp {
179; CHECK-LABEL: nearbyint_v8f32:
180; CHECK:       # %bb.0:
181; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
182; CHECK-NEXT:    vmfne.vv v0, v8, v8
183; CHECK-NEXT:    lui a0, 307200
184; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
185; CHECK-NEXT:    fmv.w.x fa5, a0
186; CHECK-NEXT:    vfabs.v v10, v8
187; CHECK-NEXT:    vmflt.vf v0, v10, fa5
188; CHECK-NEXT:    frflags a0
189; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
190; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t
191; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t
192; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
193; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
194; CHECK-NEXT:    fsflags a0
195; CHECK-NEXT:    ret
196  %r = call <8 x float> @llvm.experimental.constrained.nearbyint.v8f32(<8 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
197  ret <8 x float> %r
198}
199
200declare <16 x float> @llvm.experimental.constrained.nearbyint.v16f32(<16 x float>, metadata, metadata)
201
202define <16 x float> @nearbyint_v16f32(<16 x float> %v) strictfp {
203; CHECK-LABEL: nearbyint_v16f32:
204; CHECK:       # %bb.0:
205; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
206; CHECK-NEXT:    vmfne.vv v0, v8, v8
207; CHECK-NEXT:    lui a0, 307200
208; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
209; CHECK-NEXT:    fmv.w.x fa5, a0
210; CHECK-NEXT:    vfabs.v v12, v8
211; CHECK-NEXT:    vmflt.vf v0, v12, fa5
212; CHECK-NEXT:    frflags a0
213; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
214; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
215; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
216; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
217; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
218; CHECK-NEXT:    fsflags a0
219; CHECK-NEXT:    ret
220  %r = call <16 x float> @llvm.experimental.constrained.nearbyint.v16f32(<16 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
221  ret <16 x float> %r
222}
223
224declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)
225
226define <2 x double> @nearbyint_v2f64(<2 x double> %v) strictfp {
227; CHECK-LABEL: nearbyint_v2f64:
228; CHECK:       # %bb.0:
229; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
230; CHECK-NEXT:    vmfne.vv v0, v8, v8
231; CHECK-NEXT:    lui a0, %hi(.LCPI9_0)
232; CHECK-NEXT:    fld fa5, %lo(.LCPI9_0)(a0)
233; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
234; CHECK-NEXT:    vfabs.v v9, v8
235; CHECK-NEXT:    vmflt.vf v0, v9, fa5
236; CHECK-NEXT:    frflags a0
237; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
238; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
239; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
240; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
241; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
242; CHECK-NEXT:    fsflags a0
243; CHECK-NEXT:    ret
244  %r = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
245  ret <2 x double> %r
246}
247
248declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata)
249
250define <4 x double> @nearbyint_v4f64(<4 x double> %v) strictfp {
251; CHECK-LABEL: nearbyint_v4f64:
252; CHECK:       # %bb.0:
253; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
254; CHECK-NEXT:    vmfne.vv v0, v8, v8
255; CHECK-NEXT:    lui a0, %hi(.LCPI10_0)
256; CHECK-NEXT:    fld fa5, %lo(.LCPI10_0)(a0)
257; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
258; CHECK-NEXT:    vfabs.v v10, v8
259; CHECK-NEXT:    vmflt.vf v0, v10, fa5
260; CHECK-NEXT:    frflags a0
261; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
262; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t
263; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t
264; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, mu
265; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
266; CHECK-NEXT:    fsflags a0
267; CHECK-NEXT:    ret
268  %r = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
269  ret <4 x double> %r
270}
271
272declare <8 x double> @llvm.experimental.constrained.nearbyint.v8f64(<8 x double>, metadata, metadata)
273
274define <8 x double> @nearbyint_v8f64(<8 x double> %v) strictfp {
275; CHECK-LABEL: nearbyint_v8f64:
276; CHECK:       # %bb.0:
277; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
278; CHECK-NEXT:    vmfne.vv v0, v8, v8
279; CHECK-NEXT:    lui a0, %hi(.LCPI11_0)
280; CHECK-NEXT:    fld fa5, %lo(.LCPI11_0)(a0)
281; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
282; CHECK-NEXT:    vfabs.v v12, v8
283; CHECK-NEXT:    vmflt.vf v0, v12, fa5
284; CHECK-NEXT:    frflags a0
285; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, ma
286; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
287; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
288; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
289; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
290; CHECK-NEXT:    fsflags a0
291; CHECK-NEXT:    ret
292  %r = call <8 x double> @llvm.experimental.constrained.nearbyint.v8f64(<8 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
293  ret <8 x double> %r
294}
295