xref: /llvm-project/llvm/test/CodeGen/RISCV/half-zfa-fli.ll (revision 87f671756dc64bca4ae717479fa84ac49fb77512)
117e0926dSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfh < %s \
317e0926dSCraig Topper; RUN:     | FileCheck %s
4eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfh < %s \
517e0926dSCraig Topper; RUN:     | FileCheck %s
6eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfhmin < %s \
717e0926dSCraig Topper; RUN:     | FileCheck %s --check-prefix=ZFHMIN
8eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfhmin < %s \
917e0926dSCraig Topper; RUN:     | FileCheck %s --check-prefix=ZFHMIN
1017e0926dSCraig Topper
1117e0926dSCraig Topperdefine half @loadfpimm1() {
1217e0926dSCraig Topper; CHECK-LABEL: loadfpimm1:
1317e0926dSCraig Topper; CHECK:       # %bb.0:
14c2bcb21cSCraig Topper; CHECK-NEXT:    fli.h fa0, 0.0625
1517e0926dSCraig Topper; CHECK-NEXT:    ret
1617e0926dSCraig Topper;
1717e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm1:
1817e0926dSCraig Topper; ZFHMIN:       # %bb.0:
1917e0926dSCraig Topper; ZFHMIN-NEXT:    lui a0, %hi(.LCPI0_0)
2017e0926dSCraig Topper; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI0_0)(a0)
2117e0926dSCraig Topper; ZFHMIN-NEXT:    ret
2217e0926dSCraig Topper  ret half 0.0625
2317e0926dSCraig Topper}
2417e0926dSCraig Topper
2517e0926dSCraig Topperdefine half @loadfpimm2() {
2617e0926dSCraig Topper; CHECK-LABEL: loadfpimm2:
2717e0926dSCraig Topper; CHECK:       # %bb.0:
28c2bcb21cSCraig Topper; CHECK-NEXT:    fli.h fa0, 0.75
2917e0926dSCraig Topper; CHECK-NEXT:    ret
3017e0926dSCraig Topper;
3117e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm2:
3217e0926dSCraig Topper; ZFHMIN:       # %bb.0:
3317e0926dSCraig Topper; ZFHMIN-NEXT:    lui a0, %hi(.LCPI1_0)
3417e0926dSCraig Topper; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI1_0)(a0)
3517e0926dSCraig Topper; ZFHMIN-NEXT:    ret
3617e0926dSCraig Topper  ret half 0.75
3717e0926dSCraig Topper}
3817e0926dSCraig Topper
3917e0926dSCraig Topperdefine half @loadfpimm3() {
4017e0926dSCraig Topper; CHECK-LABEL: loadfpimm3:
4117e0926dSCraig Topper; CHECK:       # %bb.0:
42c2bcb21cSCraig Topper; CHECK-NEXT:    fli.h fa0, 1.25
4317e0926dSCraig Topper; CHECK-NEXT:    ret
4417e0926dSCraig Topper;
4517e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm3:
4617e0926dSCraig Topper; ZFHMIN:       # %bb.0:
4717e0926dSCraig Topper; ZFHMIN-NEXT:    lui a0, %hi(.LCPI2_0)
4817e0926dSCraig Topper; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI2_0)(a0)
4917e0926dSCraig Topper; ZFHMIN-NEXT:    ret
5017e0926dSCraig Topper  ret half 1.25
5117e0926dSCraig Topper}
5217e0926dSCraig Topper
5317e0926dSCraig Topperdefine half @loadfpimm4() {
5417e0926dSCraig Topper; CHECK-LABEL: loadfpimm4:
5517e0926dSCraig Topper; CHECK:       # %bb.0:
56c2bcb21cSCraig Topper; CHECK-NEXT:    fli.h fa0, 3.0
5717e0926dSCraig Topper; CHECK-NEXT:    ret
5817e0926dSCraig Topper;
5917e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm4:
6017e0926dSCraig Topper; ZFHMIN:       # %bb.0:
6117e0926dSCraig Topper; ZFHMIN-NEXT:    lui a0, %hi(.LCPI3_0)
6217e0926dSCraig Topper; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI3_0)(a0)
6317e0926dSCraig Topper; ZFHMIN-NEXT:    ret
6417e0926dSCraig Topper  ret half 3.0
6517e0926dSCraig Topper}
6617e0926dSCraig Topper
6717e0926dSCraig Topperdefine half @loadfpimm5() {
6817e0926dSCraig Topper; CHECK-LABEL: loadfpimm5:
6917e0926dSCraig Topper; CHECK:       # %bb.0:
70c2bcb21cSCraig Topper; CHECK-NEXT:    fli.h fa0, 256.0
7117e0926dSCraig Topper; CHECK-NEXT:    ret
7217e0926dSCraig Topper;
7317e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm5:
7417e0926dSCraig Topper; ZFHMIN:       # %bb.0:
7517e0926dSCraig Topper; ZFHMIN-NEXT:    lui a0, %hi(.LCPI4_0)
7617e0926dSCraig Topper; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI4_0)(a0)
7717e0926dSCraig Topper; ZFHMIN-NEXT:    ret
7817e0926dSCraig Topper  ret half 256.0
7917e0926dSCraig Topper}
8017e0926dSCraig Topper
8117e0926dSCraig Topperdefine half @loadfpimm6() {
8217e0926dSCraig Topper; CHECK-LABEL: loadfpimm6:
8317e0926dSCraig Topper; CHECK:       # %bb.0:
8417e0926dSCraig Topper; CHECK-NEXT:    fli.h fa0, inf
8517e0926dSCraig Topper; CHECK-NEXT:    ret
8617e0926dSCraig Topper;
8717e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm6:
8817e0926dSCraig Topper; ZFHMIN:       # %bb.0:
8917e0926dSCraig Topper; ZFHMIN-NEXT:    lui a0, %hi(.LCPI5_0)
9017e0926dSCraig Topper; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI5_0)(a0)
9117e0926dSCraig Topper; ZFHMIN-NEXT:    ret
9217e0926dSCraig Topper  ret half 0xH7C00
9317e0926dSCraig Topper}
9417e0926dSCraig Topper
9517e0926dSCraig Topperdefine half @loadfpimm7() {
9617e0926dSCraig Topper; CHECK-LABEL: loadfpimm7:
9717e0926dSCraig Topper; CHECK:       # %bb.0:
9817e0926dSCraig Topper; CHECK-NEXT:    fli.h fa0, nan
9917e0926dSCraig Topper; CHECK-NEXT:    ret
10017e0926dSCraig Topper;
10117e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm7:
10217e0926dSCraig Topper; ZFHMIN:       # %bb.0:
10317e0926dSCraig Topper; ZFHMIN-NEXT:    lui a0, %hi(.LCPI6_0)
10417e0926dSCraig Topper; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI6_0)(a0)
10517e0926dSCraig Topper; ZFHMIN-NEXT:    ret
10617e0926dSCraig Topper  ret half 0xH7E00
10717e0926dSCraig Topper}
10817e0926dSCraig Topper
10917e0926dSCraig Topperdefine half @loadfpimm8() {
11017e0926dSCraig Topper; CHECK-LABEL: loadfpimm8:
11117e0926dSCraig Topper; CHECK:       # %bb.0:
11217e0926dSCraig Topper; CHECK-NEXT:    fli.h fa0, min
11317e0926dSCraig Topper; CHECK-NEXT:    ret
11417e0926dSCraig Topper;
11517e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm8:
11617e0926dSCraig Topper; ZFHMIN:       # %bb.0:
11717e0926dSCraig Topper; ZFHMIN-NEXT:    li a0, 1024
11817e0926dSCraig Topper; ZFHMIN-NEXT:    fmv.h.x fa0, a0
11917e0926dSCraig Topper; ZFHMIN-NEXT:    ret
12017e0926dSCraig Topper  ret half 0xH0400
12117e0926dSCraig Topper}
12217e0926dSCraig Topper
12317e0926dSCraig Topperdefine half @loadfpimm9() {
12417e0926dSCraig Topper; CHECK-LABEL: loadfpimm9:
12517e0926dSCraig Topper; CHECK:       # %bb.0:
12617e0926dSCraig Topper; CHECK-NEXT:    lui a0, %hi(.LCPI8_0)
12717e0926dSCraig Topper; CHECK-NEXT:    flh fa0, %lo(.LCPI8_0)(a0)
12817e0926dSCraig Topper; CHECK-NEXT:    ret
12917e0926dSCraig Topper;
13017e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm9:
13117e0926dSCraig Topper; ZFHMIN:       # %bb.0:
13217e0926dSCraig Topper; ZFHMIN-NEXT:    lui a0, %hi(.LCPI8_0)
13317e0926dSCraig Topper; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI8_0)(a0)
13417e0926dSCraig Topper; ZFHMIN-NEXT:    ret
13517e0926dSCraig Topper  ret half 255.0
13617e0926dSCraig Topper}
137858451c5SCraig Topper
138858451c5SCraig Topper; This is 1 * 2^-16
139858451c5SCraig Topperdefine half @loadfpimm10() {
140858451c5SCraig Topper; CHECK-LABEL: loadfpimm10:
141858451c5SCraig Topper; CHECK:       # %bb.0:
142bf4b9857SCraig Topper; CHECK-NEXT:    fli.h fa0, 1.52587890625e-05
143858451c5SCraig Topper; CHECK-NEXT:    ret
144858451c5SCraig Topper;
145858451c5SCraig Topper; ZFHMIN-LABEL: loadfpimm10:
146858451c5SCraig Topper; ZFHMIN:       # %bb.0:
147858451c5SCraig Topper; ZFHMIN-NEXT:    li a0, 256
148858451c5SCraig Topper; ZFHMIN-NEXT:    fmv.h.x fa0, a0
149858451c5SCraig Topper; ZFHMIN-NEXT:    ret
150858451c5SCraig Topper  ret half 0xH0100
151858451c5SCraig Topper}
152858451c5SCraig Topper
153858451c5SCraig Topper; This is 1 * 2^-15
154858451c5SCraig Topperdefine half @loadfpimm11() {
155858451c5SCraig Topper; CHECK-LABEL: loadfpimm11:
156858451c5SCraig Topper; CHECK:       # %bb.0:
157bf4b9857SCraig Topper; CHECK-NEXT:    fli.h fa0, 3.0517578125e-05
158858451c5SCraig Topper; CHECK-NEXT:    ret
159858451c5SCraig Topper;
160858451c5SCraig Topper; ZFHMIN-LABEL: loadfpimm11:
161858451c5SCraig Topper; ZFHMIN:       # %bb.0:
162858451c5SCraig Topper; ZFHMIN-NEXT:    li a0, 512
163858451c5SCraig Topper; ZFHMIN-NEXT:    fmv.h.x fa0, a0
164858451c5SCraig Topper; ZFHMIN-NEXT:    ret
165858451c5SCraig Topper  ret half 0xH0200
166858451c5SCraig Topper}
167c09730c2SCraig Topper
168c09730c2SCraig Topper; Negative test. This is an snan with payload of 1.
169c09730c2SCraig Topperdefine half @loadfpimm12() {
170c09730c2SCraig Topper; CHECK-LABEL: loadfpimm12:
171c09730c2SCraig Topper; CHECK:       # %bb.0:
172c09730c2SCraig Topper; CHECK-NEXT:    lui a0, %hi(.LCPI11_0)
173c09730c2SCraig Topper; CHECK-NEXT:    flh fa0, %lo(.LCPI11_0)(a0)
174c09730c2SCraig Topper; CHECK-NEXT:    ret
175c09730c2SCraig Topper;
176c09730c2SCraig Topper; ZFHMIN-LABEL: loadfpimm12:
177c09730c2SCraig Topper; ZFHMIN:       # %bb.0:
178c09730c2SCraig Topper; ZFHMIN-NEXT:    lui a0, %hi(.LCPI11_0)
179c09730c2SCraig Topper; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI11_0)(a0)
180c09730c2SCraig Topper; ZFHMIN-NEXT:    ret
181c09730c2SCraig Topper  ret half 0xH7c01
182c09730c2SCraig Topper}
183451255b2SAlex Bradbury
184451255b2SAlex Bradburydefine half @loadfpimm13() {
185451255b2SAlex Bradbury; CHECK-LABEL: loadfpimm13:
186451255b2SAlex Bradbury; CHECK:       # %bb.0:
187451255b2SAlex Bradbury; CHECK-NEXT:    fli.h fa0, -1.0
188451255b2SAlex Bradbury; CHECK-NEXT:    ret
189451255b2SAlex Bradbury;
190451255b2SAlex Bradbury; ZFHMIN-LABEL: loadfpimm13:
191451255b2SAlex Bradbury; ZFHMIN:       # %bb.0:
192451255b2SAlex Bradbury; ZFHMIN-NEXT:    lui a0, %hi(.LCPI12_0)
193451255b2SAlex Bradbury; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI12_0)(a0)
194451255b2SAlex Bradbury; ZFHMIN-NEXT:    ret
195451255b2SAlex Bradbury  ret half -1.0
196451255b2SAlex Bradbury}
197451255b2SAlex Bradbury
198*87f67175SMin-Yih Hsu; Ensure fli isn't directly used for negated versions of numbers in the fli
199451255b2SAlex Bradbury; table.
200451255b2SAlex Bradburydefine half @loadfpimm14() {
201451255b2SAlex Bradbury; CHECK-LABEL: loadfpimm14:
202451255b2SAlex Bradbury; CHECK:       # %bb.0:
203*87f67175SMin-Yih Hsu; CHECK-NEXT:    fli.h fa5, 2.0
204*87f67175SMin-Yih Hsu; CHECK-NEXT:    fneg.h fa0, fa5
205451255b2SAlex Bradbury; CHECK-NEXT:    ret
206451255b2SAlex Bradbury;
207451255b2SAlex Bradbury; ZFHMIN-LABEL: loadfpimm14:
208451255b2SAlex Bradbury; ZFHMIN:       # %bb.0:
209451255b2SAlex Bradbury; ZFHMIN-NEXT:    lui a0, 1048572
210451255b2SAlex Bradbury; ZFHMIN-NEXT:    fmv.h.x fa0, a0
211451255b2SAlex Bradbury; ZFHMIN-NEXT:    ret
212451255b2SAlex Bradbury  ret half -2.0
213451255b2SAlex Bradbury}
214be0cbe91SCraig Topper
215*87f67175SMin-Yih Hsu; Ensure fli isn't directly used for negative min normal value.
216be0cbe91SCraig Topperdefine half @loadfpimm15() {
217be0cbe91SCraig Topper; CHECK-LABEL: loadfpimm15:
218be0cbe91SCraig Topper; CHECK:       # %bb.0:
219*87f67175SMin-Yih Hsu; CHECK-NEXT:    fli.h fa5, min
220*87f67175SMin-Yih Hsu; CHECK-NEXT:    fneg.h fa0, fa5
221be0cbe91SCraig Topper; CHECK-NEXT:    ret
222be0cbe91SCraig Topper;
223be0cbe91SCraig Topper; ZFHMIN-LABEL: loadfpimm15:
224be0cbe91SCraig Topper; ZFHMIN:       # %bb.0:
225be0cbe91SCraig Topper; ZFHMIN-NEXT:    lui a0, %hi(.LCPI14_0)
226be0cbe91SCraig Topper; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI14_0)(a0)
227be0cbe91SCraig Topper; ZFHMIN-NEXT:    ret
228be0cbe91SCraig Topper  ret half 0xH8400
229be0cbe91SCraig Topper}
230