xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/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 <vscale x 1 x half> @llvm.experimental.constrained.nearbyint.nxv1f16(<vscale x 1 x half>, metadata, metadata)
8
9define <vscale x 1 x half> @nearbyint_nxv1f16(<vscale x 1 x half> %v) strictfp {
10; CHECK-LABEL: nearbyint_nxv1f16:
11; CHECK:       # %bb.0:
12; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x half> @llvm.experimental.constrained.nearbyint.nxv1f16(<vscale x 1 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
28  ret <vscale x 1 x half> %r
29}
30
31declare <vscale x 2 x half> @llvm.experimental.constrained.nearbyint.nxv2f16(<vscale x 2 x half>, metadata, metadata)
32
33define <vscale x 2 x half> @nearbyint_nxv2f16(<vscale x 2 x half> %v) strictfp {
34; CHECK-LABEL: nearbyint_nxv2f16:
35; CHECK:       # %bb.0:
36; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 2 x half> @llvm.experimental.constrained.nearbyint.nxv2f16(<vscale x 2 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
52  ret <vscale x 2 x half> %r
53}
54
55declare <vscale x 4 x half> @llvm.experimental.constrained.nearbyint.nxv4f16(<vscale x 4 x half>, metadata, metadata)
56
57define <vscale x 4 x half> @nearbyint_nxv4f16(<vscale x 4 x half> %v) strictfp {
58; CHECK-LABEL: nearbyint_nxv4f16:
59; CHECK:       # %bb.0:
60; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 4 x half> @llvm.experimental.constrained.nearbyint.nxv4f16(<vscale x 4 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
76  ret <vscale x 4 x half> %r
77}
78
79declare <vscale x 8 x half> @llvm.experimental.constrained.nearbyint.nxv8f16(<vscale x 8 x half>, metadata, metadata)
80
81define <vscale x 8 x half> @nearbyint_nxv8f16(<vscale x 8 x half> %v) strictfp {
82; CHECK-LABEL: nearbyint_nxv8f16:
83; CHECK:       # %bb.0:
84; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 8 x half> @llvm.experimental.constrained.nearbyint.nxv8f16(<vscale x 8 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
100  ret <vscale x 8 x half> %r
101}
102
103declare <vscale x 16 x half> @llvm.experimental.constrained.nearbyint.nxv16f16(<vscale x 16 x half>, metadata, metadata)
104
105define <vscale x 16 x half> @nearbyint_nxv16f16(<vscale x 16 x half> %v) strictfp {
106; CHECK-LABEL: nearbyint_nxv16f16:
107; CHECK:       # %bb.0:
108; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
109; CHECK-NEXT:    vmfne.vv v0, v8, v8
110; CHECK-NEXT:    lui a0, %hi(.LCPI4_0)
111; CHECK-NEXT:    flh fa5, %lo(.LCPI4_0)(a0)
112; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
113; CHECK-NEXT:    vfabs.v v12, v8
114; CHECK-NEXT:    vmflt.vf v0, v12, fa5
115; CHECK-NEXT:    frflags a0
116; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
117; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
118; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
119; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, mu
120; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
121; CHECK-NEXT:    fsflags a0
122; CHECK-NEXT:    ret
123  %r = call <vscale x 16 x half> @llvm.experimental.constrained.nearbyint.nxv16f16(<vscale x 16 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
124  ret <vscale x 16 x half> %r
125}
126
127declare <vscale x 32 x half> @llvm.experimental.constrained.nearbyint.nxv32f16(<vscale x 32 x half>, metadata, metadata)
128
129define <vscale x 32 x half> @nearbyint_nxv32f16(<vscale x 32 x half> %v) strictfp {
130; CHECK-LABEL: nearbyint_nxv32f16:
131; CHECK:       # %bb.0:
132; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
133; CHECK-NEXT:    vmfne.vv v0, v8, v8
134; CHECK-NEXT:    lui a0, %hi(.LCPI5_0)
135; CHECK-NEXT:    flh fa5, %lo(.LCPI5_0)(a0)
136; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
137; CHECK-NEXT:    vfabs.v v16, v8
138; CHECK-NEXT:    vmflt.vf v0, v16, fa5
139; CHECK-NEXT:    frflags a0
140; CHECK-NEXT:    vsetvli zero, zero, e16, m8, ta, ma
141; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
142; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
143; CHECK-NEXT:    vsetvli zero, zero, e16, m8, ta, mu
144; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
145; CHECK-NEXT:    fsflags a0
146; CHECK-NEXT:    ret
147  %r = call <vscale x 32 x half> @llvm.experimental.constrained.nearbyint.nxv32f16(<vscale x 32 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
148  ret <vscale x 32 x half> %r
149}
150
151declare <vscale x 1 x float> @llvm.experimental.constrained.nearbyint.nxv1f32(<vscale x 1 x float>, metadata, metadata)
152
153define <vscale x 1 x float> @nearbyint_nxv1f32(<vscale x 1 x float> %v) strictfp {
154; CHECK-LABEL: nearbyint_nxv1f32:
155; CHECK:       # %bb.0:
156; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
157; CHECK-NEXT:    vmfne.vv v0, v8, v8
158; CHECK-NEXT:    lui a0, 307200
159; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
160; CHECK-NEXT:    fmv.w.x fa5, a0
161; CHECK-NEXT:    vfabs.v v9, v8
162; CHECK-NEXT:    vmflt.vf v0, v9, fa5
163; CHECK-NEXT:    frflags a0
164; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
165; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
166; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
167; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
168; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
169; CHECK-NEXT:    fsflags a0
170; CHECK-NEXT:    ret
171  %r = call <vscale x 1 x float> @llvm.experimental.constrained.nearbyint.nxv1f32(<vscale x 1 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
172  ret <vscale x 1 x float> %r
173}
174
175declare <vscale x 2 x float> @llvm.experimental.constrained.nearbyint.nxv2f32(<vscale x 2 x float>, metadata, metadata)
176
177define <vscale x 2 x float> @nearbyint_nxv2f32(<vscale x 2 x float> %v) strictfp {
178; CHECK-LABEL: nearbyint_nxv2f32:
179; CHECK:       # %bb.0:
180; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
181; CHECK-NEXT:    vmfne.vv v0, v8, v8
182; CHECK-NEXT:    lui a0, 307200
183; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
184; CHECK-NEXT:    fmv.w.x fa5, a0
185; CHECK-NEXT:    vfabs.v v9, v8
186; CHECK-NEXT:    vmflt.vf v0, v9, fa5
187; CHECK-NEXT:    frflags a0
188; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
189; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
190; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
191; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu
192; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
193; CHECK-NEXT:    fsflags a0
194; CHECK-NEXT:    ret
195  %r = call <vscale x 2 x float> @llvm.experimental.constrained.nearbyint.nxv2f32(<vscale x 2 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
196  ret <vscale x 2 x float> %r
197}
198
199declare <vscale x 4 x float> @llvm.experimental.constrained.nearbyint.nxv4f32(<vscale x 4 x float>, metadata, metadata)
200
201define <vscale x 4 x float> @nearbyint_nxv4f32(<vscale x 4 x float> %v) strictfp {
202; CHECK-LABEL: nearbyint_nxv4f32:
203; CHECK:       # %bb.0:
204; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
205; CHECK-NEXT:    vmfne.vv v0, v8, v8
206; CHECK-NEXT:    lui a0, 307200
207; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
208; CHECK-NEXT:    fmv.w.x fa5, a0
209; CHECK-NEXT:    vfabs.v v10, v8
210; CHECK-NEXT:    vmflt.vf v0, v10, fa5
211; CHECK-NEXT:    frflags a0
212; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
213; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t
214; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t
215; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
216; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
217; CHECK-NEXT:    fsflags a0
218; CHECK-NEXT:    ret
219  %r = call <vscale x 4 x float> @llvm.experimental.constrained.nearbyint.nxv4f32(<vscale x 4 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
220  ret <vscale x 4 x float> %r
221}
222
223declare <vscale x 8 x float> @llvm.experimental.constrained.nearbyint.nxv8f32(<vscale x 8 x float>, metadata, metadata)
224
225define <vscale x 8 x float> @nearbyint_nxv8f32(<vscale x 8 x float> %v) strictfp {
226; CHECK-LABEL: nearbyint_nxv8f32:
227; CHECK:       # %bb.0:
228; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
229; CHECK-NEXT:    vmfne.vv v0, v8, v8
230; CHECK-NEXT:    lui a0, 307200
231; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
232; CHECK-NEXT:    fmv.w.x fa5, a0
233; CHECK-NEXT:    vfabs.v v12, v8
234; CHECK-NEXT:    vmflt.vf v0, v12, fa5
235; CHECK-NEXT:    frflags a0
236; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
237; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
238; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
239; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu
240; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
241; CHECK-NEXT:    fsflags a0
242; CHECK-NEXT:    ret
243  %r = call <vscale x 8 x float> @llvm.experimental.constrained.nearbyint.nxv8f32(<vscale x 8 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
244  ret <vscale x 8 x float> %r
245}
246
247declare <vscale x 16 x float> @llvm.experimental.constrained.nearbyint.nxv16f32(<vscale x 16 x float>, metadata, metadata)
248
249define <vscale x 16 x float> @nearbyint_nxv16f32(<vscale x 16 x float> %v) strictfp {
250; CHECK-LABEL: nearbyint_nxv16f32:
251; CHECK:       # %bb.0:
252; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
253; CHECK-NEXT:    vmfne.vv v0, v8, v8
254; CHECK-NEXT:    lui a0, 307200
255; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
256; CHECK-NEXT:    fmv.w.x fa5, a0
257; CHECK-NEXT:    vfabs.v v16, v8
258; CHECK-NEXT:    vmflt.vf v0, v16, fa5
259; CHECK-NEXT:    frflags a0
260; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
261; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
262; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
263; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, mu
264; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
265; CHECK-NEXT:    fsflags a0
266; CHECK-NEXT:    ret
267  %r = call <vscale x 16 x float> @llvm.experimental.constrained.nearbyint.nxv16f32(<vscale x 16 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
268  ret <vscale x 16 x float> %r
269}
270
271declare <vscale x 1 x double> @llvm.experimental.constrained.nearbyint.nxv1f64(<vscale x 1 x double>, metadata, metadata)
272
273define <vscale x 1 x double> @nearbyint_nxv1f64(<vscale x 1 x double> %v) strictfp {
274; CHECK-LABEL: nearbyint_nxv1f64:
275; CHECK:       # %bb.0:
276; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
277; CHECK-NEXT:    vmfne.vv v0, v8, v8
278; CHECK-NEXT:    lui a0, %hi(.LCPI11_0)
279; CHECK-NEXT:    fld fa5, %lo(.LCPI11_0)(a0)
280; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
281; CHECK-NEXT:    vfabs.v v9, v8
282; CHECK-NEXT:    vmflt.vf v0, v9, fa5
283; CHECK-NEXT:    frflags a0
284; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
285; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t
286; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t
287; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
288; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t
289; CHECK-NEXT:    fsflags a0
290; CHECK-NEXT:    ret
291  %r = call <vscale x 1 x double> @llvm.experimental.constrained.nearbyint.nxv1f64(<vscale x 1 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
292  ret <vscale x 1 x double> %r
293}
294
295declare <vscale x 2 x double> @llvm.experimental.constrained.nearbyint.nxv2f64(<vscale x 2 x double>, metadata, metadata)
296
297define <vscale x 2 x double> @nearbyint_nxv2f64(<vscale x 2 x double> %v) strictfp {
298; CHECK-LABEL: nearbyint_nxv2f64:
299; CHECK:       # %bb.0:
300; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
301; CHECK-NEXT:    vmfne.vv v0, v8, v8
302; CHECK-NEXT:    lui a0, %hi(.LCPI12_0)
303; CHECK-NEXT:    fld fa5, %lo(.LCPI12_0)(a0)
304; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
305; CHECK-NEXT:    vfabs.v v10, v8
306; CHECK-NEXT:    vmflt.vf v0, v10, fa5
307; CHECK-NEXT:    frflags a0
308; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
309; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t
310; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t
311; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, mu
312; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t
313; CHECK-NEXT:    fsflags a0
314; CHECK-NEXT:    ret
315  %r = call <vscale x 2 x double> @llvm.experimental.constrained.nearbyint.nxv2f64(<vscale x 2 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
316  ret <vscale x 2 x double> %r
317}
318
319declare <vscale x 4 x double> @llvm.experimental.constrained.nearbyint.nxv4f64(<vscale x 4 x double>, metadata, metadata)
320
321define <vscale x 4 x double> @nearbyint_nxv4f64(<vscale x 4 x double> %v) strictfp {
322; CHECK-LABEL: nearbyint_nxv4f64:
323; CHECK:       # %bb.0:
324; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
325; CHECK-NEXT:    vmfne.vv v0, v8, v8
326; CHECK-NEXT:    lui a0, %hi(.LCPI13_0)
327; CHECK-NEXT:    fld fa5, %lo(.LCPI13_0)(a0)
328; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
329; CHECK-NEXT:    vfabs.v v12, v8
330; CHECK-NEXT:    vmflt.vf v0, v12, fa5
331; CHECK-NEXT:    frflags a0
332; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, ma
333; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t
334; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t
335; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
336; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t
337; CHECK-NEXT:    fsflags a0
338; CHECK-NEXT:    ret
339  %r = call <vscale x 4 x double> @llvm.experimental.constrained.nearbyint.nxv4f64(<vscale x 4 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
340  ret <vscale x 4 x double> %r
341}
342
343declare <vscale x 8 x double> @llvm.experimental.constrained.nearbyint.nxv8f64(<vscale x 8 x double>, metadata, metadata)
344
345define <vscale x 8 x double> @nearbyint_nxv8f64(<vscale x 8 x double> %v) strictfp {
346; CHECK-LABEL: nearbyint_nxv8f64:
347; CHECK:       # %bb.0:
348; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
349; CHECK-NEXT:    vmfne.vv v0, v8, v8
350; CHECK-NEXT:    lui a0, %hi(.LCPI14_0)
351; CHECK-NEXT:    fld fa5, %lo(.LCPI14_0)(a0)
352; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t
353; CHECK-NEXT:    vfabs.v v16, v8
354; CHECK-NEXT:    vmflt.vf v0, v16, fa5
355; CHECK-NEXT:    frflags a0
356; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma
357; CHECK-NEXT:    vfcvt.x.f.v v16, v8, v0.t
358; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
359; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
360; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t
361; CHECK-NEXT:    fsflags a0
362; CHECK-NEXT:    ret
363  %r = call <vscale x 8 x double> @llvm.experimental.constrained.nearbyint.nxv8f64(<vscale x 8 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
364  ret <vscale x 8 x double> %r
365}
366