xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/compactbranches/compact-branches.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mcpu=mips32r6 -relocation-model=static -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=STATIC32
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mcpu=mips64r6 -target-abi n64 -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=PIC
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
5*9880d681SAndroid Build Coastguard Workerdefine void @l()  {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
8*9880d681SAndroid Build Coastguard Worker  %call = tail call i32 @k()
9*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
10*9880d681SAndroid Build Coastguard Worker  %call1 = tail call i32 @j()
11*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %call, %call1
12*9880d681SAndroid Build Coastguard Worker; CHECK: bnec
13*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry:
16*9880d681SAndroid Build Coastguard Worker; STATIC: nop
17*9880d681SAndroid Build Coastguard Worker; STATIC: jal
18*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
19*9880d681SAndroid Build Coastguard Worker  tail call void @f(i32 signext -2)
20*9880d681SAndroid Build Coastguard Worker  br label %if.end
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.then, %entry
23*9880d681SAndroid Build Coastguard Worker; CHECK: jrc  $ra
24*9880d681SAndroid Build Coastguard Worker  ret void
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerdeclare i32 @k()
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Workerdeclare i32 @j()
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdeclare void @f(i32 signext)
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker; Function Attrs: define void @l2()  {
34*9880d681SAndroid Build Coastguard Workerdefine void @l2()  {
35*9880d681SAndroid Build Coastguard Workerentry:
36*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
37*9880d681SAndroid Build Coastguard Worker  %call = tail call i32 @k()
38*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
39*9880d681SAndroid Build Coastguard Worker  %call1 = tail call i32 @i()
40*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %call, %call1
41*9880d681SAndroid Build Coastguard Worker; CHECK beqc
42*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.end, label %if.then
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry:
45*9880d681SAndroid Build Coastguard Worker; STATIC: nop
46*9880d681SAndroid Build Coastguard Worker; STATIC: jal
47*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
48*9880d681SAndroid Build Coastguard Worker  tail call void @f(i32 signext -1)
49*9880d681SAndroid Build Coastguard Worker  br label %if.end
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %entry, %if.then
52*9880d681SAndroid Build Coastguard Worker; CHECK: jrc  $ra
53*9880d681SAndroid Build Coastguard Worker  ret void
54*9880d681SAndroid Build Coastguard Worker}
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workerdeclare i32 @i()
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
59*9880d681SAndroid Build Coastguard Workerdefine void @l3()  {
60*9880d681SAndroid Build Coastguard Workerentry:
61*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
62*9880d681SAndroid Build Coastguard Worker  %call = tail call i32 @k()
63*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %call, 0
64*9880d681SAndroid Build Coastguard Worker; CHECK : bgez
65*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry:
68*9880d681SAndroid Build Coastguard Worker; STATIC: nop
69*9880d681SAndroid Build Coastguard Worker; STATIC: jal
70*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
71*9880d681SAndroid Build Coastguard Worker  tail call void @f(i32 signext 0)
72*9880d681SAndroid Build Coastguard Worker  br label %if.end
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.then, %entry
75*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra
76*9880d681SAndroid Build Coastguard Worker  ret void
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
80*9880d681SAndroid Build Coastguard Workerdefine void @l4()  {
81*9880d681SAndroid Build Coastguard Workerentry:
82*9880d681SAndroid Build Coastguard Worker  %call = tail call i32 @k()
83*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %call, 1
84*9880d681SAndroid Build Coastguard Worker; CHECK: bgtzc
85*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry:
88*9880d681SAndroid Build Coastguard Worker; STATIC: nop
89*9880d681SAndroid Build Coastguard Worker; STATIC: jal
90*9880d681SAndroid Build Coastguard Worker  tail call void @f(i32 signext 1)
91*9880d681SAndroid Build Coastguard Worker  br label %if.end
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.then, %entry
94*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra
95*9880d681SAndroid Build Coastguard Worker  ret void
96*9880d681SAndroid Build Coastguard Worker}
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
99*9880d681SAndroid Build Coastguard Workerdefine void @l5()  {
100*9880d681SAndroid Build Coastguard Workerentry:
101*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
102*9880d681SAndroid Build Coastguard Worker  %call = tail call i32 @k()
103*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
104*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %call, 0
105*9880d681SAndroid Build Coastguard Worker; CHECK: blezc
106*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry:
109*9880d681SAndroid Build Coastguard Worker; STATIC: nop
110*9880d681SAndroid Build Coastguard Worker; STATIC: jal
111*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
112*9880d681SAndroid Build Coastguard Worker  tail call void @f(i32 signext 2)
113*9880d681SAndroid Build Coastguard Worker  br label %if.end
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.then, %entry
116*9880d681SAndroid Build Coastguard Worker; CHECK: jrc  $ra
117*9880d681SAndroid Build Coastguard Worker  ret void
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
121*9880d681SAndroid Build Coastguard Workerdefine void @l6()  {
122*9880d681SAndroid Build Coastguard Workerentry:
123*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
124*9880d681SAndroid Build Coastguard Worker  %call = tail call i32 @k()
125*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
126*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %call, -1
127*9880d681SAndroid Build Coastguard Worker; CHECK: bltzc
128*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry:
131*9880d681SAndroid Build Coastguard Worker; STATIC: nop
132*9880d681SAndroid Build Coastguard Worker; STATIC: jal
133*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
134*9880d681SAndroid Build Coastguard Worker  tail call void @f(i32 signext 3)
135*9880d681SAndroid Build Coastguard Worker  br label %if.end
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.then, %entry
138*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra
139*9880d681SAndroid Build Coastguard Worker  ret void
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
143*9880d681SAndroid Build Coastguard Workerdefine void @l7()  {
144*9880d681SAndroid Build Coastguard Workerentry:
145*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
146*9880d681SAndroid Build Coastguard Worker  %call = tail call i32 @k()
147*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %call, 0
148*9880d681SAndroid Build Coastguard Worker; CHECK: bnezc
149*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry:
152*9880d681SAndroid Build Coastguard Worker; STATIC: nop
153*9880d681SAndroid Build Coastguard Worker; STATIC: jal
154*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
155*9880d681SAndroid Build Coastguard Worker  tail call void @f(i32 signext 4)
156*9880d681SAndroid Build Coastguard Worker  br label %if.end
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.then, %entry
159*9880d681SAndroid Build Coastguard Worker; CHECK: jrc  $ra
160*9880d681SAndroid Build Coastguard Worker  ret void
161*9880d681SAndroid Build Coastguard Worker}
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
164*9880d681SAndroid Build Coastguard Workerdefine void @l8()  {
165*9880d681SAndroid Build Coastguard Workerentry:
166*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
167*9880d681SAndroid Build Coastguard Worker  %call = tail call i32 @k()
168*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %call, 0
169*9880d681SAndroid Build Coastguard Worker; CHECK: beqzc
170*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.end, label %if.then
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry:
173*9880d681SAndroid Build Coastguard Worker; STATIC: nop
174*9880d681SAndroid Build Coastguard Worker; STATIC: jal
175*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
176*9880d681SAndroid Build Coastguard Worker  tail call void @f(i32 signext 5)
177*9880d681SAndroid Build Coastguard Worker  br label %if.end
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %entry, %if.then
180*9880d681SAndroid Build Coastguard Worker; CHECK: jrc  $ra
181*9880d681SAndroid Build Coastguard Worker  ret void
182*9880d681SAndroid Build Coastguard Worker}
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Workerdefine i32 @l9(i8* ()* %i) #0 {
185*9880d681SAndroid Build Coastguard Workerentry:
186*9880d681SAndroid Build Coastguard Worker  %i.addr = alloca i8* ()*, align 4
187*9880d681SAndroid Build Coastguard Worker  store i8* ()* %i, i8* ()** %i.addr, align 4
188*9880d681SAndroid Build Coastguard Worker; STATIC32: jal
189*9880d681SAndroid Build Coastguard Worker; STATIC32: nop
190*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
191*9880d681SAndroid Build Coastguard Worker  %call = call i32 @k()
192*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25
193*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne i32 %call, 0
194*9880d681SAndroid Build Coastguard Worker; CHECK: beqzc
195*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry
198*9880d681SAndroid Build Coastguard Worker  %0 = load i8* ()*, i8* ()** %i.addr, align 4
199*9880d681SAndroid Build Coastguard Worker; CHECK: jalrc $25
200*9880d681SAndroid Build Coastguard Worker  %call1 = call i8* %0()
201*9880d681SAndroid Build Coastguard Worker  br label %if.end
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.then, %entry
204*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra
205*9880d681SAndroid Build Coastguard Worker  ret i32 -1
206*9880d681SAndroid Build Coastguard Worker}
207