xref: /llvm-project/llvm/test/CodeGen/RISCV/zfh-half-intrinsics.ll (revision 773b0aaa49170a97b4de7968c4b6dbc7673aba23)
110129fe8SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2a0a76feeSShao-Ce SUN; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zfh \
310129fe8SCraig Topper; RUN:   -verify-machineinstrs -target-abi ilp32f | \
410129fe8SCraig Topper; RUN:   FileCheck -check-prefix=RV32IZFH %s
5a0a76feeSShao-Ce SUN; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zfh \
610129fe8SCraig Topper; RUN:   -verify-machineinstrs -target-abi lp64f | \
710129fe8SCraig Topper; RUN:   FileCheck -check-prefix=RV64IZFH %s
8*773b0aaaSQihan Cai; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=zhinx \
9*773b0aaaSQihan Cai; RUN:   -verify-machineinstrs -target-abi ilp32 | \
10*773b0aaaSQihan Cai; RUN:   FileCheck -check-prefix=RV32IZHINX %s
11*773b0aaaSQihan Cai; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=zhinx \
12*773b0aaaSQihan Cai; RUN:   -verify-machineinstrs -target-abi lp64 | \
13*773b0aaaSQihan Cai; RUN:   FileCheck -check-prefix=RV64IZHINX %s
1410129fe8SCraig Topper; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d \
15a0a76feeSShao-Ce SUN; RUN:   -mattr=+zfh -verify-machineinstrs -target-abi ilp32d | \
1610129fe8SCraig Topper; RUN:   FileCheck -check-prefix=RV32IDZFH %s
1710129fe8SCraig Topper; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d \
18a0a76feeSShao-Ce SUN; RUN:   -mattr=+zfh -verify-machineinstrs -target-abi lp64d | \
1910129fe8SCraig Topper; RUN:   FileCheck -check-prefix=RV64IDZFH %s
20*773b0aaaSQihan Cai; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zdinx \
21*773b0aaaSQihan Cai; RUN:   -mattr=+zhinx -verify-machineinstrs -target-abi ilp32 | \
22*773b0aaaSQihan Cai; RUN:   FileCheck -check-prefix=RV32IZDINXZHINX %s
23*773b0aaaSQihan Cai; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zdinx \
24*773b0aaaSQihan Cai; RUN:   -mattr=+zhinx -verify-machineinstrs -target-abi lp64 | \
25*773b0aaaSQihan Cai; RUN:   FileCheck -check-prefix=RV64IZDINXZHINX %s
2610129fe8SCraig Topper
2710129fe8SCraig Topper; These intrinsics require half to be a legal type.
2810129fe8SCraig Topper
2910129fe8SCraig Topperdeclare iXLen @llvm.lrint.iXLen.f16(half)
3010129fe8SCraig Topper
3110129fe8SCraig Topperdefine iXLen @lrint_f16(half %a) nounwind {
3210129fe8SCraig Topper; RV32IZFH-LABEL: lrint_f16:
3310129fe8SCraig Topper; RV32IZFH:       # %bb.0:
3410129fe8SCraig Topper; RV32IZFH-NEXT:    fcvt.w.h a0, fa0
3510129fe8SCraig Topper; RV32IZFH-NEXT:    ret
3610129fe8SCraig Topper;
3710129fe8SCraig Topper; RV64IZFH-LABEL: lrint_f16:
3810129fe8SCraig Topper; RV64IZFH:       # %bb.0:
3910129fe8SCraig Topper; RV64IZFH-NEXT:    fcvt.l.h a0, fa0
4010129fe8SCraig Topper; RV64IZFH-NEXT:    ret
4110129fe8SCraig Topper;
42*773b0aaaSQihan Cai; RV32IZHINX-LABEL: lrint_f16:
43*773b0aaaSQihan Cai; RV32IZHINX:       # %bb.0:
44*773b0aaaSQihan Cai; RV32IZHINX-NEXT:    fcvt.w.h a0, a0
45*773b0aaaSQihan Cai; RV32IZHINX-NEXT:    ret
46*773b0aaaSQihan Cai;
47*773b0aaaSQihan Cai; RV64IZHINX-LABEL: lrint_f16:
48*773b0aaaSQihan Cai; RV64IZHINX:       # %bb.0:
49*773b0aaaSQihan Cai; RV64IZHINX-NEXT:    fcvt.l.h a0, a0
50*773b0aaaSQihan Cai; RV64IZHINX-NEXT:    ret
51*773b0aaaSQihan Cai;
5210129fe8SCraig Topper; RV32IDZFH-LABEL: lrint_f16:
5310129fe8SCraig Topper; RV32IDZFH:       # %bb.0:
5410129fe8SCraig Topper; RV32IDZFH-NEXT:    fcvt.w.h a0, fa0
5510129fe8SCraig Topper; RV32IDZFH-NEXT:    ret
5610129fe8SCraig Topper;
5710129fe8SCraig Topper; RV64IDZFH-LABEL: lrint_f16:
5810129fe8SCraig Topper; RV64IDZFH:       # %bb.0:
5910129fe8SCraig Topper; RV64IDZFH-NEXT:    fcvt.l.h a0, fa0
6010129fe8SCraig Topper; RV64IDZFH-NEXT:    ret
61*773b0aaaSQihan Cai;
62*773b0aaaSQihan Cai; RV32IZDINXZHINX-LABEL: lrint_f16:
63*773b0aaaSQihan Cai; RV32IZDINXZHINX:       # %bb.0:
64*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT:    fcvt.w.h a0, a0
65*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT:    ret
66*773b0aaaSQihan Cai;
67*773b0aaaSQihan Cai; RV64IZDINXZHINX-LABEL: lrint_f16:
68*773b0aaaSQihan Cai; RV64IZDINXZHINX:       # %bb.0:
69*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT:    fcvt.l.h a0, a0
70*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT:    ret
7110129fe8SCraig Topper  %1 = call iXLen @llvm.lrint.iXLen.f16(half %a)
7210129fe8SCraig Topper  ret iXLen %1
7310129fe8SCraig Topper}
7410129fe8SCraig Topper
75d7c97e91SCraig Topperdeclare i32 @llvm.lround.i32.f16(half)
76d7c97e91SCraig Topperdeclare i64 @llvm.lround.i64.f16(half)
7710129fe8SCraig Topper
7810129fe8SCraig Topperdefine iXLen @lround_f16(half %a) nounwind {
7910129fe8SCraig Topper; RV32IZFH-LABEL: lround_f16:
8010129fe8SCraig Topper; RV32IZFH:       # %bb.0:
8110129fe8SCraig Topper; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rmm
8210129fe8SCraig Topper; RV32IZFH-NEXT:    ret
8310129fe8SCraig Topper;
8410129fe8SCraig Topper; RV64IZFH-LABEL: lround_f16:
8510129fe8SCraig Topper; RV64IZFH:       # %bb.0:
8610129fe8SCraig Topper; RV64IZFH-NEXT:    fcvt.l.h a0, fa0, rmm
8710129fe8SCraig Topper; RV64IZFH-NEXT:    ret
8810129fe8SCraig Topper;
89*773b0aaaSQihan Cai; RV32IZHINX-LABEL: lround_f16:
90*773b0aaaSQihan Cai; RV32IZHINX:       # %bb.0:
91*773b0aaaSQihan Cai; RV32IZHINX-NEXT:    fcvt.w.h a0, a0, rmm
92*773b0aaaSQihan Cai; RV32IZHINX-NEXT:    ret
93*773b0aaaSQihan Cai;
94*773b0aaaSQihan Cai; RV64IZHINX-LABEL: lround_f16:
95*773b0aaaSQihan Cai; RV64IZHINX:       # %bb.0:
96*773b0aaaSQihan Cai; RV64IZHINX-NEXT:    fcvt.l.h a0, a0, rmm
97*773b0aaaSQihan Cai; RV64IZHINX-NEXT:    ret
98*773b0aaaSQihan Cai;
9910129fe8SCraig Topper; RV32IDZFH-LABEL: lround_f16:
10010129fe8SCraig Topper; RV32IDZFH:       # %bb.0:
10110129fe8SCraig Topper; RV32IDZFH-NEXT:    fcvt.w.h a0, fa0, rmm
10210129fe8SCraig Topper; RV32IDZFH-NEXT:    ret
10310129fe8SCraig Topper;
10410129fe8SCraig Topper; RV64IDZFH-LABEL: lround_f16:
10510129fe8SCraig Topper; RV64IDZFH:       # %bb.0:
10610129fe8SCraig Topper; RV64IDZFH-NEXT:    fcvt.l.h a0, fa0, rmm
10710129fe8SCraig Topper; RV64IDZFH-NEXT:    ret
108*773b0aaaSQihan Cai;
109*773b0aaaSQihan Cai; RV32IZDINXZHINX-LABEL: lround_f16:
110*773b0aaaSQihan Cai; RV32IZDINXZHINX:       # %bb.0:
111*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT:    fcvt.w.h a0, a0, rmm
112*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT:    ret
113*773b0aaaSQihan Cai;
114*773b0aaaSQihan Cai; RV64IZDINXZHINX-LABEL: lround_f16:
115*773b0aaaSQihan Cai; RV64IZDINXZHINX:       # %bb.0:
116*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT:    fcvt.l.h a0, a0, rmm
117*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT:    ret
11810129fe8SCraig Topper  %1 = call iXLen @llvm.lround.iXLen.f16(half %a)
11910129fe8SCraig Topper  ret iXLen %1
12010129fe8SCraig Topper}
121d7c97e91SCraig Topper
122d7c97e91SCraig Topperdefine i32 @lround_i32_f16(half %a) nounwind {
123d7c97e91SCraig Topper; RV32IZFH-LABEL: lround_i32_f16:
124d7c97e91SCraig Topper; RV32IZFH:       # %bb.0:
125d7c97e91SCraig Topper; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rmm
126d7c97e91SCraig Topper; RV32IZFH-NEXT:    ret
127d7c97e91SCraig Topper;
128d7c97e91SCraig Topper; RV64IZFH-LABEL: lround_i32_f16:
129d7c97e91SCraig Topper; RV64IZFH:       # %bb.0:
130d7c97e91SCraig Topper; RV64IZFH-NEXT:    fcvt.w.h a0, fa0, rmm
131d7c97e91SCraig Topper; RV64IZFH-NEXT:    ret
132d7c97e91SCraig Topper;
133*773b0aaaSQihan Cai; RV32IZHINX-LABEL: lround_i32_f16:
134*773b0aaaSQihan Cai; RV32IZHINX:       # %bb.0:
135*773b0aaaSQihan Cai; RV32IZHINX-NEXT:    fcvt.w.h a0, a0, rmm
136*773b0aaaSQihan Cai; RV32IZHINX-NEXT:    ret
137*773b0aaaSQihan Cai;
138*773b0aaaSQihan Cai; RV64IZHINX-LABEL: lround_i32_f16:
139*773b0aaaSQihan Cai; RV64IZHINX:       # %bb.0:
140*773b0aaaSQihan Cai; RV64IZHINX-NEXT:    fcvt.w.h a0, a0, rmm
141*773b0aaaSQihan Cai; RV64IZHINX-NEXT:    ret
142*773b0aaaSQihan Cai;
143d7c97e91SCraig Topper; RV32IDZFH-LABEL: lround_i32_f16:
144d7c97e91SCraig Topper; RV32IDZFH:       # %bb.0:
145d7c97e91SCraig Topper; RV32IDZFH-NEXT:    fcvt.w.h a0, fa0, rmm
146d7c97e91SCraig Topper; RV32IDZFH-NEXT:    ret
147d7c97e91SCraig Topper;
148d7c97e91SCraig Topper; RV64IDZFH-LABEL: lround_i32_f16:
149d7c97e91SCraig Topper; RV64IDZFH:       # %bb.0:
150d7c97e91SCraig Topper; RV64IDZFH-NEXT:    fcvt.w.h a0, fa0, rmm
151d7c97e91SCraig Topper; RV64IDZFH-NEXT:    ret
152*773b0aaaSQihan Cai;
153*773b0aaaSQihan Cai; RV32IZDINXZHINX-LABEL: lround_i32_f16:
154*773b0aaaSQihan Cai; RV32IZDINXZHINX:       # %bb.0:
155*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT:    fcvt.w.h a0, a0, rmm
156*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT:    ret
157*773b0aaaSQihan Cai;
158*773b0aaaSQihan Cai; RV64IZDINXZHINX-LABEL: lround_i32_f16:
159*773b0aaaSQihan Cai; RV64IZDINXZHINX:       # %bb.0:
160*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT:    fcvt.w.h a0, a0, rmm
161*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT:    ret
162d7c97e91SCraig Topper  %1 = call i32 @llvm.lround.i32.f16(half %a)
163d7c97e91SCraig Topper  ret i32 %1
164d7c97e91SCraig Topper}
165