xref: /llvm-project/llvm/test/CodeGen/RISCV/compress-opt-select.ll (revision 80df56e03b0455382cec51557bfc9f099d5c0a6f)
1594579b7SPhilip Reames; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2594579b7SPhilip Reames; RUN: llc -mtriple=riscv32 -target-abi ilp32d -mattr=+c,+f,+d \
3594579b7SPhilip Reames; RUN:     -riscv-no-aliases < %s \
4c532e6dbSPhilip Reames; RUN:   | FileCheck -check-prefix=RV32IFDC %s
5594579b7SPhilip Reames; RUN: llc -mtriple=riscv32 -target-abi ilp32d -mattr=-c,+f,+d \
6594579b7SPhilip Reames; RUN:     -riscv-no-aliases < %s \
7c532e6dbSPhilip Reames; RUN:   | FileCheck -check-prefix=RV32IFD %s
80e6c1576SIvan Tetyushkin
90e6c1576SIvan Tetyushkin; constant is small and fit in 6 bit (compress imm)
10c532e6dbSPhilip Reamesdefine i32 @ne_small_pos(i32 %in0) minsize {
11594579b7SPhilip Reames; RV32IFDC-LABEL: ne_small_pos:
12594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
136657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.li a1, 20
146657d4bdSPhilip Reames; RV32IFDC-NEXT:    bne a0, a1, .LBB0_2
15594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
16*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
17594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB0_2:
18*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
19594579b7SPhilip Reames;
20594579b7SPhilip Reames; RV32IFD-LABEL: ne_small_pos:
21594579b7SPhilip Reames; RV32IFD:       # %bb.0:
226657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 20
236657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB0_2
24594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
25594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
266657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
27594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB0_2:
286657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
29594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
30c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, 20
311c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
320e6c1576SIvan Tetyushkin  ret i32 %toRet
330e6c1576SIvan Tetyushkin}
340e6c1576SIvan Tetyushkin
350e6c1576SIvan Tetyushkin; constant is small and fit in 6 bit (compress imm)
36c532e6dbSPhilip Reamesdefine i32 @ne_small_neg(i32 %in0) minsize {
37594579b7SPhilip Reames; RV32IFDC-LABEL: ne_small_neg:
38594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
396657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.li a1, -20
406657d4bdSPhilip Reames; RV32IFDC-NEXT:    bne a0, a1, .LBB1_2
41594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
42*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
43594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB1_2:
44*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
45594579b7SPhilip Reames;
46594579b7SPhilip Reames; RV32IFD-LABEL: ne_small_neg:
47594579b7SPhilip Reames; RV32IFD:       # %bb.0:
486657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -20
496657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB1_2
50594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
51594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
526657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
53594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB1_2:
546657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
55594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
56c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, -20
571c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
580e6c1576SIvan Tetyushkin  ret i32 %toRet
590e6c1576SIvan Tetyushkin}
600e6c1576SIvan Tetyushkin
610e6c1576SIvan Tetyushkin; constant is small and fit in 6 bit (compress imm)
62c532e6dbSPhilip Reamesdefine i32 @ne_small_edge_pos(i32 %in0) minsize {
63594579b7SPhilip Reames; RV32IFDC-LABEL: ne_small_edge_pos:
64594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
656657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.li a1, 31
666657d4bdSPhilip Reames; RV32IFDC-NEXT:    bne a0, a1, .LBB2_2
67594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
68*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
69594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB2_2:
70*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
71594579b7SPhilip Reames;
72594579b7SPhilip Reames; RV32IFD-LABEL: ne_small_edge_pos:
73594579b7SPhilip Reames; RV32IFD:       # %bb.0:
746657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 31
756657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB2_2
76594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
77594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
786657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
79594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB2_2:
806657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
81594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
82c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, 31
831c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
840e6c1576SIvan Tetyushkin  ret i32 %toRet
850e6c1576SIvan Tetyushkin}
860e6c1576SIvan Tetyushkin
870e6c1576SIvan Tetyushkin; constant is small and fit in 6 bit (compress imm)
88c532e6dbSPhilip Reamesdefine i32 @ne_small_edge_neg(i32 %in0) minsize {
89594579b7SPhilip Reames; RV32IFDC-LABEL: ne_small_edge_neg:
90594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
916657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.li a1, -32
926657d4bdSPhilip Reames; RV32IFDC-NEXT:    bne a0, a1, .LBB3_2
93594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
94*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
95594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB3_2:
96*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
97594579b7SPhilip Reames;
98594579b7SPhilip Reames; RV32IFD-LABEL: ne_small_edge_neg:
99594579b7SPhilip Reames; RV32IFD:       # %bb.0:
1006657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -32
1016657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB3_2
102594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
103594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
1046657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
105594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB3_2:
1066657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
107594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
108c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, -32
1091c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
1100e6c1576SIvan Tetyushkin  ret i32 %toRet
1110e6c1576SIvan Tetyushkin}
1120e6c1576SIvan Tetyushkin
1130e6c1576SIvan Tetyushkin; constant is medium and not fit in 6 bit (compress imm),
1140e6c1576SIvan Tetyushkin; but fit in 12 bit (imm)
115c532e6dbSPhilip Reamesdefine i32 @ne_medium_ledge_pos(i32 %in0) minsize {
116594579b7SPhilip Reames; RV32IFDC-LABEL: ne_medium_ledge_pos:
117594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
1186657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, -33
1196657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.bnez a0, .LBB4_2
120594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
121*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
122594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB4_2:
123*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
124594579b7SPhilip Reames;
125594579b7SPhilip Reames; RV32IFD-LABEL: ne_medium_ledge_pos:
126594579b7SPhilip Reames; RV32IFD:       # %bb.0:
1276657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 33
1286657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB4_2
129594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
130594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
1316657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
132594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB4_2:
1336657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
134594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
135c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, 33
1361c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
1370e6c1576SIvan Tetyushkin  ret i32 %toRet
1380e6c1576SIvan Tetyushkin}
1390e6c1576SIvan Tetyushkin
1400e6c1576SIvan Tetyushkin; constant is medium and not fit in 6 bit (compress imm),
1410e6c1576SIvan Tetyushkin; but fit in 12 bit (imm)
142c532e6dbSPhilip Reamesdefine i32 @ne_medium_ledge_neg(i32 %in0) minsize {
143594579b7SPhilip Reames; RV32IFDC-LABEL: ne_medium_ledge_neg:
144594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
1456657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, 33
1466657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.bnez a0, .LBB5_2
147594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
148*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
149594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB5_2:
150*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
151594579b7SPhilip Reames;
152594579b7SPhilip Reames; RV32IFD-LABEL: ne_medium_ledge_neg:
153594579b7SPhilip Reames; RV32IFD:       # %bb.0:
1546657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -33
1556657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB5_2
156594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
157594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
1586657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
159594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB5_2:
1606657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
161594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
162c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, -33
1631c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
1640e6c1576SIvan Tetyushkin  ret i32 %toRet
1650e6c1576SIvan Tetyushkin}
1660e6c1576SIvan Tetyushkin
1670e6c1576SIvan Tetyushkin; constant is medium and not fit in 6 bit (compress imm),
1680e6c1576SIvan Tetyushkin; but fit in 12 bit (imm)
169c532e6dbSPhilip Reamesdefine i32 @ne_medium_pos(i32 %in0) minsize {
170594579b7SPhilip Reames; RV32IFDC-LABEL: ne_medium_pos:
171594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
1726657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, -63
1736657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.bnez a0, .LBB6_2
174594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
175*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
176594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB6_2:
177*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
178594579b7SPhilip Reames;
179594579b7SPhilip Reames; RV32IFD-LABEL: ne_medium_pos:
180594579b7SPhilip Reames; RV32IFD:       # %bb.0:
1816657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 63
1826657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB6_2
183594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
184594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
1856657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
186594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB6_2:
1876657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
188594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
189c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, 63
1901c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
1910e6c1576SIvan Tetyushkin  ret i32 %toRet
1920e6c1576SIvan Tetyushkin}
1930e6c1576SIvan Tetyushkin
1940e6c1576SIvan Tetyushkin; constant is medium and not fit in 6 bit (compress imm),
1950e6c1576SIvan Tetyushkin; but fit in 12 bit (imm)
196c532e6dbSPhilip Reamesdefine i32 @ne_medium_neg(i32 %in0) minsize {
197594579b7SPhilip Reames; RV32IFDC-LABEL: ne_medium_neg:
198594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
1996657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, 63
2006657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.bnez a0, .LBB7_2
201594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
202*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
203594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB7_2:
204*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
205594579b7SPhilip Reames;
206594579b7SPhilip Reames; RV32IFD-LABEL: ne_medium_neg:
207594579b7SPhilip Reames; RV32IFD:       # %bb.0:
2086657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -63
2096657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB7_2
210594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
211594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
2126657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
213594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB7_2:
2146657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
215594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
216c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, -63
2171c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
2180e6c1576SIvan Tetyushkin  ret i32 %toRet
2190e6c1576SIvan Tetyushkin}
2200e6c1576SIvan Tetyushkin
2210e6c1576SIvan Tetyushkin; constant is medium and not fit in 6 bit (compress imm),
2220e6c1576SIvan Tetyushkin; but fit in 12 bit (imm)
223c532e6dbSPhilip Reamesdefine i32 @ne_medium_bedge_pos(i32 %in0) minsize {
224594579b7SPhilip Reames; RV32IFDC-LABEL: ne_medium_bedge_pos:
225594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
2266657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, -2047
2276657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.bnez a0, .LBB8_2
228594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
229*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
230594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB8_2:
231*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
232594579b7SPhilip Reames;
233594579b7SPhilip Reames; RV32IFD-LABEL: ne_medium_bedge_pos:
234594579b7SPhilip Reames; RV32IFD:       # %bb.0:
2356657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 2047
2366657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB8_2
237594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
238594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
2396657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
240594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB8_2:
2416657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
242594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
243c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, 2047
2441c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
2450e6c1576SIvan Tetyushkin  ret i32 %toRet
2460e6c1576SIvan Tetyushkin}
2470e6c1576SIvan Tetyushkin
2480e6c1576SIvan Tetyushkin; constant is medium and not fit in 6 bit (compress imm),
2490e6c1576SIvan Tetyushkin; but fit in 12 bit (imm), negative value fit in 12 bit too.
250c532e6dbSPhilip Reamesdefine i32 @ne_medium_bedge_neg(i32 %in0) minsize {
251594579b7SPhilip Reames; RV32IFDC-LABEL: ne_medium_bedge_neg:
252594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
2536657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, 2047
2546657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.bnez a0, .LBB9_2
255594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
256*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
257594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB9_2:
258*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
259594579b7SPhilip Reames;
260594579b7SPhilip Reames; RV32IFD-LABEL: ne_medium_bedge_neg:
261594579b7SPhilip Reames; RV32IFD:       # %bb.0:
2626657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -2047
2636657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB9_2
264594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
265594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
2666657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
267594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB9_2:
2686657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
269594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
270c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, -2047
2711c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
2720e6c1576SIvan Tetyushkin  ret i32 %toRet
2730e6c1576SIvan Tetyushkin}
2740e6c1576SIvan Tetyushkin
2750e6c1576SIvan Tetyushkin; constant is big and do not fit in 12 bit (imm), fit in i32
276c532e6dbSPhilip Reamesdefine i32 @ne_big_ledge_pos(i32 %in0) minsize {
277594579b7SPhilip Reames; RV32IFDC-LABEL: ne_big_ledge_pos:
278594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
2796657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.li a1, 1
2806657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.slli a1, 11
2816657d4bdSPhilip Reames; RV32IFDC-NEXT:    bne a0, a1, .LBB10_2
282594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
283*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
284594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB10_2:
285*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
286594579b7SPhilip Reames;
287594579b7SPhilip Reames; RV32IFD-LABEL: ne_big_ledge_pos:
288594579b7SPhilip Reames; RV32IFD:       # %bb.0:
2896657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 1
2906657d4bdSPhilip Reames; RV32IFD-NEXT:    slli a1, a1, 11
2916657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB10_2
292594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
293594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
2946657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
295594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB10_2:
2966657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
297594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
298c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, 2048
2991c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
3000e6c1576SIvan Tetyushkin  ret i32 %toRet
3010e6c1576SIvan Tetyushkin}
3020e6c1576SIvan Tetyushkin
3030e6c1576SIvan Tetyushkin; constant is big and do not fit in 12 bit (imm), fit in i32
304c532e6dbSPhilip Reamesdefine i32 @ne_big_ledge_neg(i32 %in0) minsize {
305594579b7SPhilip Reames; RV32IFDC-LABEL: ne_big_ledge_neg:
306594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
3076657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a1, zero, -2048
3086657d4bdSPhilip Reames; RV32IFDC-NEXT:    bne a0, a1, .LBB11_2
309594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
310*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
311594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB11_2:
312*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
313594579b7SPhilip Reames;
314594579b7SPhilip Reames; RV32IFD-LABEL: ne_big_ledge_neg:
315594579b7SPhilip Reames; RV32IFD:       # %bb.0:
3166657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -2048
3176657d4bdSPhilip Reames; RV32IFD-NEXT:    bne a0, a1, .LBB11_2
318594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
319594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
3206657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
321594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB11_2:
3226657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
323594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
324c532e6dbSPhilip Reames  %cmp = icmp ne i32 %in0, -2048
325c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
326c532e6dbSPhilip Reames  ret i32 %toRet
327c532e6dbSPhilip Reames}
328c532e6dbSPhilip Reames
329c532e6dbSPhilip Reames
330c532e6dbSPhilip Reames;; Same as above, but for eq
331c532e6dbSPhilip Reames
332c532e6dbSPhilip Reames; constant is small and fit in 6 bit (compress imm)
333c532e6dbSPhilip Reamesdefine i32 @eq_small_pos(i32 %in0) minsize {
334594579b7SPhilip Reames; RV32IFDC-LABEL: eq_small_pos:
335594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
3366657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.li a1, 20
3376657d4bdSPhilip Reames; RV32IFDC-NEXT:    beq a0, a1, .LBB12_2
338594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
339*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
340594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB12_2:
341*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
342594579b7SPhilip Reames;
343594579b7SPhilip Reames; RV32IFD-LABEL: eq_small_pos:
344594579b7SPhilip Reames; RV32IFD:       # %bb.0:
3456657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 20
3466657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB12_2
347594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
348594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
3496657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
350594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB12_2:
3516657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
352594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
353c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, 20
354c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
355c532e6dbSPhilip Reames  ret i32 %toRet
356c532e6dbSPhilip Reames}
357c532e6dbSPhilip Reames
358c532e6dbSPhilip Reames; constant is small and fit in 6 bit (compress imm)
359c532e6dbSPhilip Reamesdefine i32 @eq_small_neg(i32 %in0) minsize {
360594579b7SPhilip Reames; RV32IFDC-LABEL: eq_small_neg:
361594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
3626657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.li a1, -20
3636657d4bdSPhilip Reames; RV32IFDC-NEXT:    beq a0, a1, .LBB13_2
364594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
365*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
366594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB13_2:
367*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
368594579b7SPhilip Reames;
369594579b7SPhilip Reames; RV32IFD-LABEL: eq_small_neg:
370594579b7SPhilip Reames; RV32IFD:       # %bb.0:
3716657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -20
3726657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB13_2
373594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
374594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
3756657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
376594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB13_2:
3776657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
378594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
379c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, -20
380c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
381c532e6dbSPhilip Reames  ret i32 %toRet
382c532e6dbSPhilip Reames}
383c532e6dbSPhilip Reames
384c532e6dbSPhilip Reames; constant is small and fit in 6 bit (compress imm)
385c532e6dbSPhilip Reamesdefine i32 @eq_small_edge_pos(i32 %in0) minsize {
386594579b7SPhilip Reames; RV32IFDC-LABEL: eq_small_edge_pos:
387594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
3886657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.li a1, 31
3896657d4bdSPhilip Reames; RV32IFDC-NEXT:    beq a0, a1, .LBB14_2
390594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
391*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
392594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB14_2:
393*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
394594579b7SPhilip Reames;
395594579b7SPhilip Reames; RV32IFD-LABEL: eq_small_edge_pos:
396594579b7SPhilip Reames; RV32IFD:       # %bb.0:
3976657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 31
3986657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB14_2
399594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
400594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
4016657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
402594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB14_2:
4036657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
404594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
405c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, 31
406c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
407c532e6dbSPhilip Reames  ret i32 %toRet
408c532e6dbSPhilip Reames}
409c532e6dbSPhilip Reames
410c532e6dbSPhilip Reames; constant is small and fit in 6 bit (compress imm)
411c532e6dbSPhilip Reamesdefine i32 @eq_small_edge_neg(i32 %in0) minsize {
412594579b7SPhilip Reames; RV32IFDC-LABEL: eq_small_edge_neg:
413594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
4146657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.li a1, -32
4156657d4bdSPhilip Reames; RV32IFDC-NEXT:    beq a0, a1, .LBB15_2
416594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
417*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
418594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB15_2:
419*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
420594579b7SPhilip Reames;
421594579b7SPhilip Reames; RV32IFD-LABEL: eq_small_edge_neg:
422594579b7SPhilip Reames; RV32IFD:       # %bb.0:
4236657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -32
4246657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB15_2
425594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
426594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
4276657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
428594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB15_2:
4296657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
430594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
431c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, -32
432c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
433c532e6dbSPhilip Reames  ret i32 %toRet
434c532e6dbSPhilip Reames}
435c532e6dbSPhilip Reames
436c532e6dbSPhilip Reames; constant is medium and not fit in 6 bit (compress imm),
437c532e6dbSPhilip Reames; but fit in 12 bit (imm)
438c532e6dbSPhilip Reamesdefine i32 @eq_medium_ledge_pos(i32 %in0) minsize {
439594579b7SPhilip Reames; RV32IFDC-LABEL: eq_medium_ledge_pos:
440594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
4416657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, -33
4426657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.beqz a0, .LBB16_2
443594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
444*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
445594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB16_2:
446*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
447594579b7SPhilip Reames;
448594579b7SPhilip Reames; RV32IFD-LABEL: eq_medium_ledge_pos:
449594579b7SPhilip Reames; RV32IFD:       # %bb.0:
4506657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 33
4516657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB16_2
452594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
453594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
4546657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
455594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB16_2:
4566657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
457594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
458c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, 33
459c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
460c532e6dbSPhilip Reames  ret i32 %toRet
461c532e6dbSPhilip Reames}
462c532e6dbSPhilip Reames
463c532e6dbSPhilip Reames; constant is medium and not fit in 6 bit (compress imm),
464c532e6dbSPhilip Reames; but fit in 12 bit (imm)
465c532e6dbSPhilip Reamesdefine i32 @eq_medium_ledge_neg(i32 %in0) minsize {
466594579b7SPhilip Reames; RV32IFDC-LABEL: eq_medium_ledge_neg:
467594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
4686657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, 33
4696657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.beqz a0, .LBB17_2
470594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
471*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
472594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB17_2:
473*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
474594579b7SPhilip Reames;
475594579b7SPhilip Reames; RV32IFD-LABEL: eq_medium_ledge_neg:
476594579b7SPhilip Reames; RV32IFD:       # %bb.0:
4776657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -33
4786657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB17_2
479594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
480594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
4816657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
482594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB17_2:
4836657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
484594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
485c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, -33
486c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
487c532e6dbSPhilip Reames  ret i32 %toRet
488c532e6dbSPhilip Reames}
489c532e6dbSPhilip Reames
490c532e6dbSPhilip Reames; constant is medium and not fit in 6 bit (compress imm),
491c532e6dbSPhilip Reames; but fit in 12 bit (imm)
492c532e6dbSPhilip Reamesdefine i32 @eq_medium_pos(i32 %in0) minsize {
493594579b7SPhilip Reames; RV32IFDC-LABEL: eq_medium_pos:
494594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
4956657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, -63
4966657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.beqz a0, .LBB18_2
497594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
498*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
499594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB18_2:
500*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
501594579b7SPhilip Reames;
502594579b7SPhilip Reames; RV32IFD-LABEL: eq_medium_pos:
503594579b7SPhilip Reames; RV32IFD:       # %bb.0:
5046657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 63
5056657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB18_2
506594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
507594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
5086657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
509594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB18_2:
5106657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
511594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
512c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, 63
513c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
514c532e6dbSPhilip Reames  ret i32 %toRet
515c532e6dbSPhilip Reames}
516c532e6dbSPhilip Reames
517c532e6dbSPhilip Reames; constant is medium and not fit in 6 bit (compress imm),
518c532e6dbSPhilip Reames; but fit in 12 bit (imm)
519c532e6dbSPhilip Reamesdefine i32 @eq_medium_neg(i32 %in0) minsize {
520594579b7SPhilip Reames; RV32IFDC-LABEL: eq_medium_neg:
521594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
5226657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, 63
5236657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.beqz a0, .LBB19_2
524594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
525*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
526594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB19_2:
527*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
528594579b7SPhilip Reames;
529594579b7SPhilip Reames; RV32IFD-LABEL: eq_medium_neg:
530594579b7SPhilip Reames; RV32IFD:       # %bb.0:
5316657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -63
5326657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB19_2
533594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
534594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
5356657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
536594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB19_2:
5376657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
538594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
539c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, -63
540c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
541c532e6dbSPhilip Reames  ret i32 %toRet
542c532e6dbSPhilip Reames}
543c532e6dbSPhilip Reames
544c532e6dbSPhilip Reames; constant is medium and not fit in 6 bit (compress imm),
545c532e6dbSPhilip Reames; but fit in 12 bit (imm)
546c532e6dbSPhilip Reamesdefine i32 @eq_medium_bedge_pos(i32 %in0) minsize {
547594579b7SPhilip Reames; RV32IFDC-LABEL: eq_medium_bedge_pos:
548594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
5496657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, -2047
5506657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.beqz a0, .LBB20_2
551594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
552*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
553594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB20_2:
554*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
555594579b7SPhilip Reames;
556594579b7SPhilip Reames; RV32IFD-LABEL: eq_medium_bedge_pos:
557594579b7SPhilip Reames; RV32IFD:       # %bb.0:
5586657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 2047
5596657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB20_2
560594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
561594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
5626657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
563594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB20_2:
5646657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
565594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
566c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, 2047
567c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
568c532e6dbSPhilip Reames  ret i32 %toRet
569c532e6dbSPhilip Reames}
570c532e6dbSPhilip Reames
571c532e6dbSPhilip Reames; constant is medium and not fit in 6 bit (compress imm),
572c532e6dbSPhilip Reames; but fit in 12 bit (imm), negative value fit in 12 bit too.
573c532e6dbSPhilip Reamesdefine i32 @eq_medium_bedge_neg(i32 %in0) minsize {
574594579b7SPhilip Reames; RV32IFDC-LABEL: eq_medium_bedge_neg:
575594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
5766657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a0, a0, 2047
5776657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.beqz a0, .LBB21_2
578594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
579*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
580594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB21_2:
581*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
582594579b7SPhilip Reames;
583594579b7SPhilip Reames; RV32IFD-LABEL: eq_medium_bedge_neg:
584594579b7SPhilip Reames; RV32IFD:       # %bb.0:
5856657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -2047
5866657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB21_2
587594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
588594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
5896657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
590594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB21_2:
5916657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
592594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
593c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, -2047
594c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
595c532e6dbSPhilip Reames  ret i32 %toRet
596c532e6dbSPhilip Reames}
597c532e6dbSPhilip Reames
598c532e6dbSPhilip Reames; constant is big and do not fit in 12 bit (imm), fit in i32
599c532e6dbSPhilip Reamesdefine i32 @eq_big_ledge_pos(i32 %in0) minsize {
600594579b7SPhilip Reames; RV32IFDC-LABEL: eq_big_ledge_pos:
601594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
6026657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.li a1, 1
6036657d4bdSPhilip Reames; RV32IFDC-NEXT:    c.slli a1, 11
6046657d4bdSPhilip Reames; RV32IFDC-NEXT:    beq a0, a1, .LBB22_2
605594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
606*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
607594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB22_2:
608*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
609594579b7SPhilip Reames;
610594579b7SPhilip Reames; RV32IFD-LABEL: eq_big_ledge_pos:
611594579b7SPhilip Reames; RV32IFD:       # %bb.0:
6126657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, 1
6136657d4bdSPhilip Reames; RV32IFD-NEXT:    slli a1, a1, 11
6146657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB22_2
615594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
616594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
6176657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
618594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB22_2:
6196657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
620594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
621c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, 2048
622c532e6dbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
623c532e6dbSPhilip Reames  ret i32 %toRet
624c532e6dbSPhilip Reames}
625c532e6dbSPhilip Reames
626c532e6dbSPhilip Reames; constant is big and do not fit in 12 bit (imm), fit in i32
627c532e6dbSPhilip Reamesdefine i32 @eq_big_ledge_neg(i32 %in0) minsize {
628594579b7SPhilip Reames; RV32IFDC-LABEL: eq_big_ledge_neg:
629594579b7SPhilip Reames; RV32IFDC:       # %bb.0:
6306657d4bdSPhilip Reames; RV32IFDC-NEXT:    addi a1, zero, -2048
6316657d4bdSPhilip Reames; RV32IFDC-NEXT:    beq a0, a1, .LBB23_2
632594579b7SPhilip Reames; RV32IFDC-NEXT:  # %bb.1:
633*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_1
634594579b7SPhilip Reames; RV32IFDC-NEXT:  .LBB23_2:
635*80df56e0SMark Goncharov; RV32IFDC-NEXT:    tail OUTLINED_FUNCTION_0
636594579b7SPhilip Reames;
637594579b7SPhilip Reames; RV32IFD-LABEL: eq_big_ledge_neg:
638594579b7SPhilip Reames; RV32IFD:       # %bb.0:
6396657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a1, zero, -2048
6406657d4bdSPhilip Reames; RV32IFD-NEXT:    beq a0, a1, .LBB23_2
641594579b7SPhilip Reames; RV32IFD-NEXT:  # %bb.1:
642594579b7SPhilip Reames; RV32IFD-NEXT:    addi a0, zero, 42
6436657d4bdSPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
644594579b7SPhilip Reames; RV32IFD-NEXT:  .LBB23_2:
6456657d4bdSPhilip Reames; RV32IFD-NEXT:    addi a0, zero, -99
646594579b7SPhilip Reames; RV32IFD-NEXT:    jalr zero, 0(ra)
647c532e6dbSPhilip Reames  %cmp = icmp eq i32 %in0, -2048
6481c41d0cbSPhilip Reames  %toRet = select i1 %cmp, i32 -99, i32 42
6490e6c1576SIvan Tetyushkin  ret i32 %toRet
6500e6c1576SIvan Tetyushkin}
651