xref: /llvm-project/llvm/test/CodeGen/RISCV/half-zfa-fli.ll (revision 87f671756dc64bca4ae717479fa84ac49fb77512)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfh < %s \
3; RUN:     | FileCheck %s
4; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfh < %s \
5; RUN:     | FileCheck %s
6; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfhmin < %s \
7; RUN:     | FileCheck %s --check-prefix=ZFHMIN
8; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfhmin < %s \
9; RUN:     | FileCheck %s --check-prefix=ZFHMIN
10
11define half @loadfpimm1() {
12; CHECK-LABEL: loadfpimm1:
13; CHECK:       # %bb.0:
14; CHECK-NEXT:    fli.h fa0, 0.0625
15; CHECK-NEXT:    ret
16;
17; ZFHMIN-LABEL: loadfpimm1:
18; ZFHMIN:       # %bb.0:
19; ZFHMIN-NEXT:    lui a0, %hi(.LCPI0_0)
20; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI0_0)(a0)
21; ZFHMIN-NEXT:    ret
22  ret half 0.0625
23}
24
25define half @loadfpimm2() {
26; CHECK-LABEL: loadfpimm2:
27; CHECK:       # %bb.0:
28; CHECK-NEXT:    fli.h fa0, 0.75
29; CHECK-NEXT:    ret
30;
31; ZFHMIN-LABEL: loadfpimm2:
32; ZFHMIN:       # %bb.0:
33; ZFHMIN-NEXT:    lui a0, %hi(.LCPI1_0)
34; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI1_0)(a0)
35; ZFHMIN-NEXT:    ret
36  ret half 0.75
37}
38
39define half @loadfpimm3() {
40; CHECK-LABEL: loadfpimm3:
41; CHECK:       # %bb.0:
42; CHECK-NEXT:    fli.h fa0, 1.25
43; CHECK-NEXT:    ret
44;
45; ZFHMIN-LABEL: loadfpimm3:
46; ZFHMIN:       # %bb.0:
47; ZFHMIN-NEXT:    lui a0, %hi(.LCPI2_0)
48; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI2_0)(a0)
49; ZFHMIN-NEXT:    ret
50  ret half 1.25
51}
52
53define half @loadfpimm4() {
54; CHECK-LABEL: loadfpimm4:
55; CHECK:       # %bb.0:
56; CHECK-NEXT:    fli.h fa0, 3.0
57; CHECK-NEXT:    ret
58;
59; ZFHMIN-LABEL: loadfpimm4:
60; ZFHMIN:       # %bb.0:
61; ZFHMIN-NEXT:    lui a0, %hi(.LCPI3_0)
62; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI3_0)(a0)
63; ZFHMIN-NEXT:    ret
64  ret half 3.0
65}
66
67define half @loadfpimm5() {
68; CHECK-LABEL: loadfpimm5:
69; CHECK:       # %bb.0:
70; CHECK-NEXT:    fli.h fa0, 256.0
71; CHECK-NEXT:    ret
72;
73; ZFHMIN-LABEL: loadfpimm5:
74; ZFHMIN:       # %bb.0:
75; ZFHMIN-NEXT:    lui a0, %hi(.LCPI4_0)
76; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI4_0)(a0)
77; ZFHMIN-NEXT:    ret
78  ret half 256.0
79}
80
81define half @loadfpimm6() {
82; CHECK-LABEL: loadfpimm6:
83; CHECK:       # %bb.0:
84; CHECK-NEXT:    fli.h fa0, inf
85; CHECK-NEXT:    ret
86;
87; ZFHMIN-LABEL: loadfpimm6:
88; ZFHMIN:       # %bb.0:
89; ZFHMIN-NEXT:    lui a0, %hi(.LCPI5_0)
90; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI5_0)(a0)
91; ZFHMIN-NEXT:    ret
92  ret half 0xH7C00
93}
94
95define half @loadfpimm7() {
96; CHECK-LABEL: loadfpimm7:
97; CHECK:       # %bb.0:
98; CHECK-NEXT:    fli.h fa0, nan
99; CHECK-NEXT:    ret
100;
101; ZFHMIN-LABEL: loadfpimm7:
102; ZFHMIN:       # %bb.0:
103; ZFHMIN-NEXT:    lui a0, %hi(.LCPI6_0)
104; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI6_0)(a0)
105; ZFHMIN-NEXT:    ret
106  ret half 0xH7E00
107}
108
109define half @loadfpimm8() {
110; CHECK-LABEL: loadfpimm8:
111; CHECK:       # %bb.0:
112; CHECK-NEXT:    fli.h fa0, min
113; CHECK-NEXT:    ret
114;
115; ZFHMIN-LABEL: loadfpimm8:
116; ZFHMIN:       # %bb.0:
117; ZFHMIN-NEXT:    li a0, 1024
118; ZFHMIN-NEXT:    fmv.h.x fa0, a0
119; ZFHMIN-NEXT:    ret
120  ret half 0xH0400
121}
122
123define half @loadfpimm9() {
124; CHECK-LABEL: loadfpimm9:
125; CHECK:       # %bb.0:
126; CHECK-NEXT:    lui a0, %hi(.LCPI8_0)
127; CHECK-NEXT:    flh fa0, %lo(.LCPI8_0)(a0)
128; CHECK-NEXT:    ret
129;
130; ZFHMIN-LABEL: loadfpimm9:
131; ZFHMIN:       # %bb.0:
132; ZFHMIN-NEXT:    lui a0, %hi(.LCPI8_0)
133; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI8_0)(a0)
134; ZFHMIN-NEXT:    ret
135  ret half 255.0
136}
137
138; This is 1 * 2^-16
139define half @loadfpimm10() {
140; CHECK-LABEL: loadfpimm10:
141; CHECK:       # %bb.0:
142; CHECK-NEXT:    fli.h fa0, 1.52587890625e-05
143; CHECK-NEXT:    ret
144;
145; ZFHMIN-LABEL: loadfpimm10:
146; ZFHMIN:       # %bb.0:
147; ZFHMIN-NEXT:    li a0, 256
148; ZFHMIN-NEXT:    fmv.h.x fa0, a0
149; ZFHMIN-NEXT:    ret
150  ret half 0xH0100
151}
152
153; This is 1 * 2^-15
154define half @loadfpimm11() {
155; CHECK-LABEL: loadfpimm11:
156; CHECK:       # %bb.0:
157; CHECK-NEXT:    fli.h fa0, 3.0517578125e-05
158; CHECK-NEXT:    ret
159;
160; ZFHMIN-LABEL: loadfpimm11:
161; ZFHMIN:       # %bb.0:
162; ZFHMIN-NEXT:    li a0, 512
163; ZFHMIN-NEXT:    fmv.h.x fa0, a0
164; ZFHMIN-NEXT:    ret
165  ret half 0xH0200
166}
167
168; Negative test. This is an snan with payload of 1.
169define half @loadfpimm12() {
170; CHECK-LABEL: loadfpimm12:
171; CHECK:       # %bb.0:
172; CHECK-NEXT:    lui a0, %hi(.LCPI11_0)
173; CHECK-NEXT:    flh fa0, %lo(.LCPI11_0)(a0)
174; CHECK-NEXT:    ret
175;
176; ZFHMIN-LABEL: loadfpimm12:
177; ZFHMIN:       # %bb.0:
178; ZFHMIN-NEXT:    lui a0, %hi(.LCPI11_0)
179; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI11_0)(a0)
180; ZFHMIN-NEXT:    ret
181  ret half 0xH7c01
182}
183
184define half @loadfpimm13() {
185; CHECK-LABEL: loadfpimm13:
186; CHECK:       # %bb.0:
187; CHECK-NEXT:    fli.h fa0, -1.0
188; CHECK-NEXT:    ret
189;
190; ZFHMIN-LABEL: loadfpimm13:
191; ZFHMIN:       # %bb.0:
192; ZFHMIN-NEXT:    lui a0, %hi(.LCPI12_0)
193; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI12_0)(a0)
194; ZFHMIN-NEXT:    ret
195  ret half -1.0
196}
197
198; Ensure fli isn't directly used for negated versions of numbers in the fli
199; table.
200define half @loadfpimm14() {
201; CHECK-LABEL: loadfpimm14:
202; CHECK:       # %bb.0:
203; CHECK-NEXT:    fli.h fa5, 2.0
204; CHECK-NEXT:    fneg.h fa0, fa5
205; CHECK-NEXT:    ret
206;
207; ZFHMIN-LABEL: loadfpimm14:
208; ZFHMIN:       # %bb.0:
209; ZFHMIN-NEXT:    lui a0, 1048572
210; ZFHMIN-NEXT:    fmv.h.x fa0, a0
211; ZFHMIN-NEXT:    ret
212  ret half -2.0
213}
214
215; Ensure fli isn't directly used for negative min normal value.
216define half @loadfpimm15() {
217; CHECK-LABEL: loadfpimm15:
218; CHECK:       # %bb.0:
219; CHECK-NEXT:    fli.h fa5, min
220; CHECK-NEXT:    fneg.h fa0, fa5
221; CHECK-NEXT:    ret
222;
223; ZFHMIN-LABEL: loadfpimm15:
224; ZFHMIN:       # %bb.0:
225; ZFHMIN-NEXT:    lui a0, %hi(.LCPI14_0)
226; ZFHMIN-NEXT:    flh fa0, %lo(.LCPI14_0)(a0)
227; ZFHMIN-NEXT:    ret
228  ret half 0xH8400
229}
230