blob: 2173887e854178996709a4006b50c40ff058fbda [file] [log] [blame]
Yeting Kuo1855c0a2023-04-17 15:26:51 +08001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Luke Lau1cb59982024-10-31 06:39:55 +08002; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \
Yeting Kuo1855c0a2023-04-17 15:26:51 +08003; RUN: -verify-machineinstrs < %s | FileCheck %s
Luke Lau1cb59982024-10-31 06:39:55 +08004; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \
Yeting Kuo1855c0a2023-04-17 15:26:51 +08005; RUN: -verify-machineinstrs < %s | FileCheck %s
6
Kevin P. Neal95c2d012023-07-20 09:51:50 -04007define <1 x half> @trunc_v1f16(<1 x half> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +08008; CHECK-LABEL: trunc_v1f16:
9; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -070010; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +080011; CHECK-NEXT: vmfne.vv v0, v8, v8
12; CHECK-NEXT: lui a0, %hi(.LCPI0_0)
13; CHECK-NEXT: flh fa5, %lo(.LCPI0_0)(a0)
14; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
15; CHECK-NEXT: vfabs.v v9, v8
16; CHECK-NEXT: vmflt.vf v0, v9, fa5
Craig Topperd490ce22024-05-28 08:51:42 -070017; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +080018; CHECK-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
19; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
20; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu
21; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
22; CHECK-NEXT: ret
23 %a = call <1 x half> @llvm.experimental.constrained.trunc.v1f16(<1 x half> %x, metadata !"fpexcept.strict")
24 ret <1 x half> %a
25}
26declare <1 x half> @llvm.experimental.constrained.trunc.v1f16(<1 x half>, metadata)
27
Kevin P. Neal95c2d012023-07-20 09:51:50 -040028define <2 x half> @trunc_v2f16(<2 x half> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +080029; CHECK-LABEL: trunc_v2f16:
30; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -070031; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +080032; CHECK-NEXT: vmfne.vv v0, v8, v8
33; CHECK-NEXT: lui a0, %hi(.LCPI1_0)
34; CHECK-NEXT: flh fa5, %lo(.LCPI1_0)(a0)
35; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
36; CHECK-NEXT: vfabs.v v9, v8
37; CHECK-NEXT: vmflt.vf v0, v9, fa5
Craig Topperd490ce22024-05-28 08:51:42 -070038; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +080039; CHECK-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
40; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
41; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu
42; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
43; CHECK-NEXT: ret
44 %a = call <2 x half> @llvm.experimental.constrained.trunc.v2f16(<2 x half> %x, metadata !"fpexcept.strict")
45 ret <2 x half> %a
46}
47declare <2 x half> @llvm.experimental.constrained.trunc.v2f16(<2 x half>, metadata)
48
Kevin P. Neal95c2d012023-07-20 09:51:50 -040049define <4 x half> @trunc_v4f16(<4 x half> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +080050; CHECK-LABEL: trunc_v4f16:
51; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -070052; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +080053; CHECK-NEXT: vmfne.vv v0, v8, v8
54; CHECK-NEXT: lui a0, %hi(.LCPI2_0)
55; CHECK-NEXT: flh fa5, %lo(.LCPI2_0)(a0)
56; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
57; CHECK-NEXT: vfabs.v v9, v8
58; CHECK-NEXT: vmflt.vf v0, v9, fa5
Craig Topperd490ce22024-05-28 08:51:42 -070059; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +080060; CHECK-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
61; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
62; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu
63; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
64; CHECK-NEXT: ret
65 %a = call <4 x half> @llvm.experimental.constrained.trunc.v4f16(<4 x half> %x, metadata !"fpexcept.strict")
66 ret <4 x half> %a
67}
68declare <4 x half> @llvm.experimental.constrained.trunc.v4f16(<4 x half>, metadata)
69
Kevin P. Neal95c2d012023-07-20 09:51:50 -040070define <8 x half> @trunc_v8f16(<8 x half> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +080071; CHECK-LABEL: trunc_v8f16:
72; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -070073; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +080074; CHECK-NEXT: vmfne.vv v0, v8, v8
75; CHECK-NEXT: lui a0, %hi(.LCPI3_0)
76; CHECK-NEXT: flh fa5, %lo(.LCPI3_0)(a0)
77; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
78; CHECK-NEXT: vfabs.v v9, v8
79; CHECK-NEXT: vmflt.vf v0, v9, fa5
Craig Topperd490ce22024-05-28 08:51:42 -070080; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +080081; CHECK-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
82; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
83; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu
84; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
85; CHECK-NEXT: ret
86 %a = call <8 x half> @llvm.experimental.constrained.trunc.v8f16(<8 x half> %x, metadata !"fpexcept.strict")
87 ret <8 x half> %a
88}
89declare <8 x half> @llvm.experimental.constrained.trunc.v8f16(<8 x half>, metadata)
90
Kevin P. Neal95c2d012023-07-20 09:51:50 -040091define <16 x half> @trunc_v16f16(<16 x half> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +080092; CHECK-LABEL: trunc_v16f16:
93; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -070094; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +080095; CHECK-NEXT: vmfne.vv v0, v8, v8
96; CHECK-NEXT: lui a0, %hi(.LCPI4_0)
97; CHECK-NEXT: flh fa5, %lo(.LCPI4_0)(a0)
98; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
99; CHECK-NEXT: vfabs.v v10, v8
100; CHECK-NEXT: vmflt.vf v0, v10, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700101; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800102; CHECK-NEXT: vfcvt.rtz.x.f.v v10, v8, v0.t
103; CHECK-NEXT: vfcvt.f.x.v v10, v10, v0.t
104; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu
105; CHECK-NEXT: vfsgnj.vv v8, v10, v8, v0.t
106; CHECK-NEXT: ret
107 %a = call <16 x half> @llvm.experimental.constrained.trunc.v16f16(<16 x half> %x, metadata !"fpexcept.strict")
108 ret <16 x half> %a
109}
110declare <16 x half> @llvm.experimental.constrained.trunc.v16f16(<16 x half>, metadata)
111
Kevin P. Neal95c2d012023-07-20 09:51:50 -0400112define <32 x half> @trunc_v32f16(<32 x half> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800113; CHECK-LABEL: trunc_v32f16:
114; CHECK: # %bb.0:
115; CHECK-NEXT: li a0, 32
Pengcheng Wang9122c522024-11-15 17:53:14 +0800116; CHECK-NEXT: lui a1, %hi(.LCPI5_0)
Craig Topperd490ce22024-05-28 08:51:42 -0700117; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800118; CHECK-NEXT: vmfne.vv v0, v8, v8
Pengcheng Wang9122c522024-11-15 17:53:14 +0800119; CHECK-NEXT: flh fa5, %lo(.LCPI5_0)(a1)
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800120; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
121; CHECK-NEXT: vfabs.v v12, v8
122; CHECK-NEXT: vmflt.vf v0, v12, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700123; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800124; CHECK-NEXT: vfcvt.rtz.x.f.v v12, v8, v0.t
125; CHECK-NEXT: vfcvt.f.x.v v12, v12, v0.t
126; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, mu
127; CHECK-NEXT: vfsgnj.vv v8, v12, v8, v0.t
128; CHECK-NEXT: ret
129 %a = call <32 x half> @llvm.experimental.constrained.trunc.v32f16(<32 x half> %x, metadata !"fpexcept.strict")
130 ret <32 x half> %a
131}
132declare <32 x half> @llvm.experimental.constrained.trunc.v32f16(<32 x half>, metadata)
133
Kevin P. Neal95c2d012023-07-20 09:51:50 -0400134define <1 x float> @trunc_v1f32(<1 x float> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800135; CHECK-LABEL: trunc_v1f32:
136; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -0700137; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800138; CHECK-NEXT: vmfne.vv v0, v8, v8
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800139; CHECK-NEXT: lui a0, 307200
Pengcheng Wang9122c522024-11-15 17:53:14 +0800140; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800141; CHECK-NEXT: fmv.w.x fa5, a0
Pengcheng Wang9122c522024-11-15 17:53:14 +0800142; CHECK-NEXT: vfabs.v v9, v8
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800143; CHECK-NEXT: vmflt.vf v0, v9, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700144; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800145; CHECK-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
146; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
147; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, mu
148; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
149; CHECK-NEXT: ret
150 %a = call <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float> %x, metadata !"fpexcept.strict")
151 ret <1 x float> %a
152}
153declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata)
154
Kevin P. Neal95c2d012023-07-20 09:51:50 -0400155define <2 x float> @trunc_v2f32(<2 x float> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800156; CHECK-LABEL: trunc_v2f32:
157; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -0700158; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800159; CHECK-NEXT: vmfne.vv v0, v8, v8
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800160; CHECK-NEXT: lui a0, 307200
Pengcheng Wang9122c522024-11-15 17:53:14 +0800161; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800162; CHECK-NEXT: fmv.w.x fa5, a0
Pengcheng Wang9122c522024-11-15 17:53:14 +0800163; CHECK-NEXT: vfabs.v v9, v8
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800164; CHECK-NEXT: vmflt.vf v0, v9, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700165; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800166; CHECK-NEXT: vfcvt.rtz.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, mf2, ta, mu
169; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
170; CHECK-NEXT: ret
171 %a = call <2 x float> @llvm.experimental.constrained.trunc.v2f32(<2 x float> %x, metadata !"fpexcept.strict")
172 ret <2 x float> %a
173}
174declare <2 x float> @llvm.experimental.constrained.trunc.v2f32(<2 x float>, metadata)
175
Kevin P. Neal95c2d012023-07-20 09:51:50 -0400176define <4 x float> @trunc_v4f32(<4 x float> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800177; CHECK-LABEL: trunc_v4f32:
178; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -0700179; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800180; CHECK-NEXT: vmfne.vv v0, v8, v8
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800181; CHECK-NEXT: lui a0, 307200
Pengcheng Wang9122c522024-11-15 17:53:14 +0800182; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800183; CHECK-NEXT: fmv.w.x fa5, a0
Pengcheng Wang9122c522024-11-15 17:53:14 +0800184; CHECK-NEXT: vfabs.v v9, v8
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800185; CHECK-NEXT: vmflt.vf v0, v9, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700186; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800187; CHECK-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
188; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
189; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, mu
190; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
191; CHECK-NEXT: ret
192 %a = call <4 x float> @llvm.experimental.constrained.trunc.v4f32(<4 x float> %x, metadata !"fpexcept.strict")
193 ret <4 x float> %a
194}
195declare <4 x float> @llvm.experimental.constrained.trunc.v4f32(<4 x float>, metadata)
196
Kevin P. Neal95c2d012023-07-20 09:51:50 -0400197define <8 x float> @trunc_v8f32(<8 x float> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800198; CHECK-LABEL: trunc_v8f32:
199; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -0700200; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800201; CHECK-NEXT: vmfne.vv v0, v8, v8
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800202; CHECK-NEXT: lui a0, 307200
Pengcheng Wang9122c522024-11-15 17:53:14 +0800203; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800204; CHECK-NEXT: fmv.w.x fa5, a0
Pengcheng Wang9122c522024-11-15 17:53:14 +0800205; CHECK-NEXT: vfabs.v v10, v8
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800206; CHECK-NEXT: vmflt.vf v0, v10, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700207; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800208; CHECK-NEXT: vfcvt.rtz.x.f.v v10, v8, v0.t
209; CHECK-NEXT: vfcvt.f.x.v v10, v10, v0.t
210; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, mu
211; CHECK-NEXT: vfsgnj.vv v8, v10, v8, v0.t
212; CHECK-NEXT: ret
213 %a = call <8 x float> @llvm.experimental.constrained.trunc.v8f32(<8 x float> %x, metadata !"fpexcept.strict")
214 ret <8 x float> %a
215}
216declare <8 x float> @llvm.experimental.constrained.trunc.v8f32(<8 x float>, metadata)
217
Kevin P. Neal95c2d012023-07-20 09:51:50 -0400218define <16 x float> @trunc_v16f32(<16 x float> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800219; CHECK-LABEL: trunc_v16f32:
220; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -0700221; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800222; CHECK-NEXT: vmfne.vv v0, v8, v8
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800223; CHECK-NEXT: lui a0, 307200
Pengcheng Wang9122c522024-11-15 17:53:14 +0800224; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800225; CHECK-NEXT: fmv.w.x fa5, a0
Pengcheng Wang9122c522024-11-15 17:53:14 +0800226; CHECK-NEXT: vfabs.v v12, v8
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800227; CHECK-NEXT: vmflt.vf v0, v12, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700228; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800229; CHECK-NEXT: vfcvt.rtz.x.f.v v12, v8, v0.t
230; CHECK-NEXT: vfcvt.f.x.v v12, v12, v0.t
231; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, mu
232; CHECK-NEXT: vfsgnj.vv v8, v12, v8, v0.t
233; CHECK-NEXT: ret
234 %a = call <16 x float> @llvm.experimental.constrained.trunc.v16f32(<16 x float> %x, metadata !"fpexcept.strict")
235 ret <16 x float> %a
236}
237declare <16 x float> @llvm.experimental.constrained.trunc.v16f32(<16 x float>, metadata)
238
Kevin P. Neal95c2d012023-07-20 09:51:50 -0400239define <1 x double> @trunc_v1f64(<1 x double> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800240; CHECK-LABEL: trunc_v1f64:
241; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -0700242; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800243; CHECK-NEXT: vmfne.vv v0, v8, v8
244; CHECK-NEXT: lui a0, %hi(.LCPI11_0)
245; CHECK-NEXT: fld fa5, %lo(.LCPI11_0)(a0)
246; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
247; CHECK-NEXT: vfabs.v v9, v8
248; CHECK-NEXT: vmflt.vf v0, v9, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700249; CHECK-NEXT: vsetvli zero, zero, e64, m1, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800250; CHECK-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
251; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
252; CHECK-NEXT: vsetvli zero, zero, e64, m1, ta, mu
253; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
254; CHECK-NEXT: ret
255 %a = call <1 x double> @llvm.experimental.constrained.trunc.v1f64(<1 x double> %x, metadata !"fpexcept.strict")
256 ret <1 x double> %a
257}
258declare <1 x double> @llvm.experimental.constrained.trunc.v1f64(<1 x double>, metadata)
259
Kevin P. Neal95c2d012023-07-20 09:51:50 -0400260define <2 x double> @trunc_v2f64(<2 x double> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800261; CHECK-LABEL: trunc_v2f64:
262; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -0700263; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800264; CHECK-NEXT: vmfne.vv v0, v8, v8
265; CHECK-NEXT: lui a0, %hi(.LCPI12_0)
266; CHECK-NEXT: fld fa5, %lo(.LCPI12_0)(a0)
267; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
268; CHECK-NEXT: vfabs.v v9, v8
269; CHECK-NEXT: vmflt.vf v0, v9, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700270; CHECK-NEXT: vsetvli zero, zero, e64, m1, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800271; CHECK-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
272; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t
273; CHECK-NEXT: vsetvli zero, zero, e64, m1, ta, mu
274; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t
275; CHECK-NEXT: ret
276 %a = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double> %x, metadata !"fpexcept.strict")
277 ret <2 x double> %a
278}
279declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata)
280
Kevin P. Neal95c2d012023-07-20 09:51:50 -0400281define <4 x double> @trunc_v4f64(<4 x double> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800282; CHECK-LABEL: trunc_v4f64:
283; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -0700284; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800285; CHECK-NEXT: vmfne.vv v0, v8, v8
286; CHECK-NEXT: lui a0, %hi(.LCPI13_0)
287; CHECK-NEXT: fld fa5, %lo(.LCPI13_0)(a0)
288; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
289; CHECK-NEXT: vfabs.v v10, v8
290; CHECK-NEXT: vmflt.vf v0, v10, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700291; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800292; CHECK-NEXT: vfcvt.rtz.x.f.v v10, v8, v0.t
293; CHECK-NEXT: vfcvt.f.x.v v10, v10, v0.t
294; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, mu
295; CHECK-NEXT: vfsgnj.vv v8, v10, v8, v0.t
296; CHECK-NEXT: ret
297 %a = call <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double> %x, metadata !"fpexcept.strict")
298 ret <4 x double> %a
299}
300declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata)
301
Kevin P. Neal95c2d012023-07-20 09:51:50 -0400302define <8 x double> @trunc_v8f64(<8 x double> %x) strictfp {
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800303; CHECK-LABEL: trunc_v8f64:
304; CHECK: # %bb.0:
Craig Topperd490ce22024-05-28 08:51:42 -0700305; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800306; CHECK-NEXT: vmfne.vv v0, v8, v8
307; CHECK-NEXT: lui a0, %hi(.LCPI14_0)
308; CHECK-NEXT: fld fa5, %lo(.LCPI14_0)(a0)
309; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
310; CHECK-NEXT: vfabs.v v12, v8
311; CHECK-NEXT: vmflt.vf v0, v12, fa5
Craig Topperd490ce22024-05-28 08:51:42 -0700312; CHECK-NEXT: vsetvli zero, zero, e64, m4, ta, ma
Yeting Kuo1855c0a2023-04-17 15:26:51 +0800313; CHECK-NEXT: vfcvt.rtz.x.f.v v12, v8, v0.t
314; CHECK-NEXT: vfcvt.f.x.v v12, v12, v0.t
315; CHECK-NEXT: vsetvli zero, zero, e64, m4, ta, mu
316; CHECK-NEXT: vfsgnj.vv v8, v12, v8, v0.t
317; CHECK-NEXT: ret
318 %a = call <8 x double> @llvm.experimental.constrained.trunc.v8f64(<8 x double> %x, metadata !"fpexcept.strict")
319 ret <8 x double> %a
320}
321declare <8 x double> @llvm.experimental.constrained.trunc.v8f64(<8 x double>, metadata)