xref: /llvm-project/llvm/test/CodeGen/RISCV/zfhmin-half-intrinsics.ll (revision 5aa83eb677d2f8cba0c2ad3dcc14f3f4e80a0bba)
17b50c183SMonk Chiang; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
27b50c183SMonk Chiang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zfhmin \
37b50c183SMonk Chiang; RUN:   -verify-machineinstrs -target-abi ilp32f | \
47b50c183SMonk Chiang; RUN:   FileCheck -check-prefix=RV32IZFHMIN %s
57b50c183SMonk Chiang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zfhmin \
67b50c183SMonk Chiang; RUN:   -verify-machineinstrs -target-abi lp64f | \
77b50c183SMonk Chiang; RUN:   FileCheck -check-prefix=RV64IZFHMIN %s
87b50c183SMonk Chiang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d \
97b50c183SMonk Chiang; RUN:   -mattr=+zfhmin -verify-machineinstrs -target-abi ilp32d | \
107b50c183SMonk Chiang; RUN:   FileCheck -check-prefix=RV32IDZFHMIN %s
117b50c183SMonk Chiang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d \
127b50c183SMonk Chiang; RUN:   -mattr=+zfhmin -verify-machineinstrs -target-abi lp64d | \
137b50c183SMonk Chiang; RUN:   FileCheck -check-prefix=RV64IDZFHMIN %s
14773b0aaaSQihan Cai; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zhinxmin \
15773b0aaaSQihan Cai; RUN:   -verify-machineinstrs -target-abi ilp32 | \
16773b0aaaSQihan Cai; RUN:   FileCheck -check-prefix=RV32IZHINXMIN %s
17773b0aaaSQihan Cai; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zhinxmin \
18773b0aaaSQihan Cai; RUN:   -verify-machineinstrs -target-abi lp64 | \
19773b0aaaSQihan Cai; RUN:   FileCheck -check-prefix=RV64IZHINXMIN %s
20773b0aaaSQihan Cai; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zdinx \
21773b0aaaSQihan Cai; RUN:   -mattr=+zhinxmin -verify-machineinstrs -target-abi ilp32 | \
22773b0aaaSQihan Cai; RUN:   FileCheck -check-prefix=RV32IZDINXZHINXMIN %s
23773b0aaaSQihan Cai; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zdinx \
24773b0aaaSQihan Cai; RUN:   -mattr=+zhinxmin -verify-machineinstrs -target-abi lp64 | \
25773b0aaaSQihan Cai; RUN:   FileCheck -check-prefix=RV64IZDINXZHINXMIN %s
267b50c183SMonk Chiang
277b50c183SMonk Chiang; These intrinsics require half to be a legal type.
287b50c183SMonk Chiang
297b50c183SMonk Chiangdeclare iXLen @llvm.lrint.iXLen.f16(half)
307b50c183SMonk Chiang
317b50c183SMonk Chiangdefine iXLen @lrint_f16(half %a) nounwind {
327b50c183SMonk Chiang; RV32IZFHMIN-LABEL: lrint_f16:
337b50c183SMonk Chiang; RV32IZFHMIN:       # %bb.0:
347b0c4184SCraig Topper; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
357b0c4184SCraig Topper; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5
367b50c183SMonk Chiang; RV32IZFHMIN-NEXT:    ret
377b50c183SMonk Chiang;
387b50c183SMonk Chiang; RV64IZFHMIN-LABEL: lrint_f16:
397b50c183SMonk Chiang; RV64IZFHMIN:       # %bb.0:
407b0c4184SCraig Topper; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
417b0c4184SCraig Topper; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5
427b50c183SMonk Chiang; RV64IZFHMIN-NEXT:    ret
437b50c183SMonk Chiang;
447b50c183SMonk Chiang; RV32IDZFHMIN-LABEL: lrint_f16:
457b50c183SMonk Chiang; RV32IDZFHMIN:       # %bb.0:
467b0c4184SCraig Topper; RV32IDZFHMIN-NEXT:    fcvt.s.h fa5, fa0
477b0c4184SCraig Topper; RV32IDZFHMIN-NEXT:    fcvt.w.s a0, fa5
487b50c183SMonk Chiang; RV32IDZFHMIN-NEXT:    ret
497b50c183SMonk Chiang;
507b50c183SMonk Chiang; RV64IDZFHMIN-LABEL: lrint_f16:
517b50c183SMonk Chiang; RV64IDZFHMIN:       # %bb.0:
527b0c4184SCraig Topper; RV64IDZFHMIN-NEXT:    fcvt.s.h fa5, fa0
537b0c4184SCraig Topper; RV64IDZFHMIN-NEXT:    fcvt.l.s a0, fa5
547b50c183SMonk Chiang; RV64IDZFHMIN-NEXT:    ret
55773b0aaaSQihan Cai;
56773b0aaaSQihan Cai; RV32IZHINXMIN-LABEL: lrint_f16:
57773b0aaaSQihan Cai; RV32IZHINXMIN:       # %bb.0:
58773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
59773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT:    fcvt.w.s a0, a0
60773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT:    ret
61773b0aaaSQihan Cai;
62773b0aaaSQihan Cai; RV64IZHINXMIN-LABEL: lrint_f16:
63773b0aaaSQihan Cai; RV64IZHINXMIN:       # %bb.0:
64773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
65773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT:    fcvt.l.s a0, a0
66773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT:    ret
67773b0aaaSQihan Cai;
68773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-LABEL: lrint_f16:
69773b0aaaSQihan Cai; RV32IZDINXZHINXMIN:       # %bb.0:
70773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0
71773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT:    fcvt.w.s a0, a0
72773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT:    ret
73773b0aaaSQihan Cai;
74773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-LABEL: lrint_f16:
75773b0aaaSQihan Cai; RV64IZDINXZHINXMIN:       # %bb.0:
76773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0
77773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT:    fcvt.l.s a0, a0
78773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT:    ret
797b50c183SMonk Chiang  %1 = call iXLen @llvm.lrint.iXLen.f16(half %a)
807b50c183SMonk Chiang  ret iXLen %1
817b50c183SMonk Chiang}
827b50c183SMonk Chiang
837b50c183SMonk Chiangdeclare iXLen @llvm.lround.iXLen.f16(half)
847b50c183SMonk Chiang
857b50c183SMonk Chiangdefine iXLen @lround_f16(half %a) nounwind {
867b50c183SMonk Chiang; RV32IZFHMIN-LABEL: lround_f16:
877b50c183SMonk Chiang; RV32IZFHMIN:       # %bb.0:
887b0c4184SCraig Topper; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
897b0c4184SCraig Topper; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm
907b50c183SMonk Chiang; RV32IZFHMIN-NEXT:    ret
917b50c183SMonk Chiang;
927b50c183SMonk Chiang; RV64IZFHMIN-LABEL: lround_f16:
937b50c183SMonk Chiang; RV64IZFHMIN:       # %bb.0:
947b0c4184SCraig Topper; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
957b0c4184SCraig Topper; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rmm
967b50c183SMonk Chiang; RV64IZFHMIN-NEXT:    ret
977b50c183SMonk Chiang;
987b50c183SMonk Chiang; RV32IDZFHMIN-LABEL: lround_f16:
997b50c183SMonk Chiang; RV32IDZFHMIN:       # %bb.0:
1007b0c4184SCraig Topper; RV32IDZFHMIN-NEXT:    fcvt.s.h fa5, fa0
1017b0c4184SCraig Topper; RV32IDZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm
1027b50c183SMonk Chiang; RV32IDZFHMIN-NEXT:    ret
1037b50c183SMonk Chiang;
1047b50c183SMonk Chiang; RV64IDZFHMIN-LABEL: lround_f16:
1057b50c183SMonk Chiang; RV64IDZFHMIN:       # %bb.0:
1067b0c4184SCraig Topper; RV64IDZFHMIN-NEXT:    fcvt.s.h fa5, fa0
1077b0c4184SCraig Topper; RV64IDZFHMIN-NEXT:    fcvt.l.s a0, fa5, rmm
1087b50c183SMonk Chiang; RV64IDZFHMIN-NEXT:    ret
109773b0aaaSQihan Cai;
110773b0aaaSQihan Cai; RV32IZHINXMIN-LABEL: lround_f16:
111773b0aaaSQihan Cai; RV32IZHINXMIN:       # %bb.0:
112773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
113773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT:    fcvt.w.s a0, a0, rmm
114773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT:    ret
115773b0aaaSQihan Cai;
116773b0aaaSQihan Cai; RV64IZHINXMIN-LABEL: lround_f16:
117773b0aaaSQihan Cai; RV64IZHINXMIN:       # %bb.0:
118773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
119773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT:    fcvt.l.s a0, a0, rmm
120773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT:    ret
121773b0aaaSQihan Cai;
122773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-LABEL: lround_f16:
123773b0aaaSQihan Cai; RV32IZDINXZHINXMIN:       # %bb.0:
124773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0
125773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT:    fcvt.w.s a0, a0, rmm
126773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT:    ret
127773b0aaaSQihan Cai;
128773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-LABEL: lround_f16:
129773b0aaaSQihan Cai; RV64IZDINXZHINXMIN:       # %bb.0:
130773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0
131773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT:    fcvt.l.s a0, a0, rmm
132773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT:    ret
1337b50c183SMonk Chiang  %1 = call iXLen @llvm.lround.iXLen.f16(half %a)
1347b50c183SMonk Chiang  ret iXLen %1
1357b50c183SMonk Chiang}
136*5aa83eb6SCraig Topper
137*5aa83eb6SCraig Topperdefine i32 @lround_i32_f16(half %a) nounwind {
138*5aa83eb6SCraig Topper; RV32IZFHMIN-LABEL: lround_i32_f16:
139*5aa83eb6SCraig Topper; RV32IZFHMIN:       # %bb.0:
140*5aa83eb6SCraig Topper; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
141*5aa83eb6SCraig Topper; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm
142*5aa83eb6SCraig Topper; RV32IZFHMIN-NEXT:    ret
143*5aa83eb6SCraig Topper;
144*5aa83eb6SCraig Topper; RV64IZFHMIN-LABEL: lround_i32_f16:
145*5aa83eb6SCraig Topper; RV64IZFHMIN:       # %bb.0:
146*5aa83eb6SCraig Topper; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
147*5aa83eb6SCraig Topper; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm
148*5aa83eb6SCraig Topper; RV64IZFHMIN-NEXT:    ret
149*5aa83eb6SCraig Topper;
150*5aa83eb6SCraig Topper; RV32IDZFHMIN-LABEL: lround_i32_f16:
151*5aa83eb6SCraig Topper; RV32IDZFHMIN:       # %bb.0:
152*5aa83eb6SCraig Topper; RV32IDZFHMIN-NEXT:    fcvt.s.h fa5, fa0
153*5aa83eb6SCraig Topper; RV32IDZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm
154*5aa83eb6SCraig Topper; RV32IDZFHMIN-NEXT:    ret
155*5aa83eb6SCraig Topper;
156*5aa83eb6SCraig Topper; RV64IDZFHMIN-LABEL: lround_i32_f16:
157*5aa83eb6SCraig Topper; RV64IDZFHMIN:       # %bb.0:
158*5aa83eb6SCraig Topper; RV64IDZFHMIN-NEXT:    fcvt.s.h fa5, fa0
159*5aa83eb6SCraig Topper; RV64IDZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm
160*5aa83eb6SCraig Topper; RV64IDZFHMIN-NEXT:    ret
161*5aa83eb6SCraig Topper;
162*5aa83eb6SCraig Topper; RV32IZHINXMIN-LABEL: lround_i32_f16:
163*5aa83eb6SCraig Topper; RV32IZHINXMIN:       # %bb.0:
164*5aa83eb6SCraig Topper; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
165*5aa83eb6SCraig Topper; RV32IZHINXMIN-NEXT:    fcvt.w.s a0, a0, rmm
166*5aa83eb6SCraig Topper; RV32IZHINXMIN-NEXT:    ret
167*5aa83eb6SCraig Topper;
168*5aa83eb6SCraig Topper; RV64IZHINXMIN-LABEL: lround_i32_f16:
169*5aa83eb6SCraig Topper; RV64IZHINXMIN:       # %bb.0:
170*5aa83eb6SCraig Topper; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
171*5aa83eb6SCraig Topper; RV64IZHINXMIN-NEXT:    fcvt.w.s a0, a0, rmm
172*5aa83eb6SCraig Topper; RV64IZHINXMIN-NEXT:    ret
173*5aa83eb6SCraig Topper;
174*5aa83eb6SCraig Topper; RV32IZDINXZHINXMIN-LABEL: lround_i32_f16:
175*5aa83eb6SCraig Topper; RV32IZDINXZHINXMIN:       # %bb.0:
176*5aa83eb6SCraig Topper; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0
177*5aa83eb6SCraig Topper; RV32IZDINXZHINXMIN-NEXT:    fcvt.w.s a0, a0, rmm
178*5aa83eb6SCraig Topper; RV32IZDINXZHINXMIN-NEXT:    ret
179*5aa83eb6SCraig Topper;
180*5aa83eb6SCraig Topper; RV64IZDINXZHINXMIN-LABEL: lround_i32_f16:
181*5aa83eb6SCraig Topper; RV64IZDINXZHINXMIN:       # %bb.0:
182*5aa83eb6SCraig Topper; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0
183*5aa83eb6SCraig Topper; RV64IZDINXZHINXMIN-NEXT:    fcvt.w.s a0, a0, rmm
184*5aa83eb6SCraig Topper; RV64IZDINXZHINXMIN-NEXT:    ret
185*5aa83eb6SCraig Topper  %1 = call i32 @llvm.lround.i32.f16(half %a)
186*5aa83eb6SCraig Topper  ret i32 %1
187*5aa83eb6SCraig Topper}
188