xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/call-05.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test conditional sibling calls.
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker@var = global i32 1;
7*9880d681SAndroid Build Coastguard Worker@fun_a = global void()* null;
8*9880d681SAndroid Build Coastguard Worker@fun_b = global void()* null;
9*9880d681SAndroid Build Coastguard Worker@fun_c = global void(i32)* null;
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call.
12*9880d681SAndroid Build Coastguard Workerdefine void @f1(i32 %val1, i32 %val2) {
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1:
14*9880d681SAndroid Build Coastguard Worker; CHECK: crbl %r2, %r3, 0(%r1)
15*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
16*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
17*9880d681SAndroid Build Coastguard Worker  %cond = icmp slt i32 %val1, %val2;
18*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workera:
21*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
22*9880d681SAndroid Build Coastguard Worker  ret void
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerb:
25*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
26*9880d681SAndroid Build Coastguard Worker  ret void
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call when there are two possibilities.
30*9880d681SAndroid Build Coastguard Workerdefine void @f2(i32 %val1, i32 %val2) {
31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2:
32*9880d681SAndroid Build Coastguard Worker; CHECK: crbl %r2, %r3, 0(%r1)
33*9880d681SAndroid Build Coastguard Worker; CHECK: br %r1
34*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
35*9880d681SAndroid Build Coastguard Worker  %fun_b = load volatile void() *, void()** @fun_b;
36*9880d681SAndroid Build Coastguard Worker  %cond = icmp slt i32 %val1, %val2;
37*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workera:
40*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
41*9880d681SAndroid Build Coastguard Worker  ret void
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerb:
44*9880d681SAndroid Build Coastguard Worker  tail call void %fun_b()
45*9880d681SAndroid Build Coastguard Worker  ret void
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call with an argument - not supported.
49*9880d681SAndroid Build Coastguard Workerdefine void @f3(i32 %val1, i32 %val2) {
50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3:
51*9880d681SAndroid Build Coastguard Worker; CHECK: crjhe %r2, %r3
52*9880d681SAndroid Build Coastguard Worker; CHECK: br %r1
53*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
54*9880d681SAndroid Build Coastguard Worker  %fun_c = load volatile void(i32) *, void(i32)** @fun_c;
55*9880d681SAndroid Build Coastguard Worker  %cond = icmp slt i32 %val1, %val2;
56*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workera:
59*9880d681SAndroid Build Coastguard Worker  tail call void %fun_c(i32 1)
60*9880d681SAndroid Build Coastguard Worker  ret void
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerb:
63*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
64*9880d681SAndroid Build Coastguard Worker  ret void
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - unsigned compare.
68*9880d681SAndroid Build Coastguard Workerdefine void @f4(i32 %val1, i32 %val2) {
69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4:
70*9880d681SAndroid Build Coastguard Worker; CHECK: clrbl %r2, %r3, 0(%r1)
71*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
72*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
73*9880d681SAndroid Build Coastguard Worker  %cond = icmp ult i32 %val1, %val2;
74*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Workera:
77*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
78*9880d681SAndroid Build Coastguard Worker  ret void
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerb:
81*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
82*9880d681SAndroid Build Coastguard Worker  ret void
83*9880d681SAndroid Build Coastguard Worker}
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - 64-bit compare.
86*9880d681SAndroid Build Coastguard Workerdefine void @f5(i64 %val1, i64 %val2) {
87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5:
88*9880d681SAndroid Build Coastguard Worker; CHECK: cgrbl %r2, %r3, 0(%r1)
89*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
90*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
91*9880d681SAndroid Build Coastguard Worker  %cond = icmp slt i64 %val1, %val2;
92*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workera:
95*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
96*9880d681SAndroid Build Coastguard Worker  ret void
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerb:
99*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
100*9880d681SAndroid Build Coastguard Worker  ret void
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - unsigned 64-bit compare.
104*9880d681SAndroid Build Coastguard Workerdefine void @f6(i64 %val1, i64 %val2) {
105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6:
106*9880d681SAndroid Build Coastguard Worker; CHECK: clgrbl %r2, %r3, 0(%r1)
107*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
108*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
109*9880d681SAndroid Build Coastguard Worker  %cond = icmp ult i64 %val1, %val2;
110*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Workera:
113*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
114*9880d681SAndroid Build Coastguard Worker  ret void
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Workerb:
117*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
118*9880d681SAndroid Build Coastguard Worker  ret void
119*9880d681SAndroid Build Coastguard Worker}
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - less-equal compare.
122*9880d681SAndroid Build Coastguard Workerdefine void @f7(i32 %val1, i32 %val2) {
123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7:
124*9880d681SAndroid Build Coastguard Worker; CHECK: crble %r2, %r3, 0(%r1)
125*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
126*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
127*9880d681SAndroid Build Coastguard Worker  %cond = icmp sle i32 %val1, %val2;
128*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Workera:
131*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
132*9880d681SAndroid Build Coastguard Worker  ret void
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerb:
135*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
136*9880d681SAndroid Build Coastguard Worker  ret void
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - high compare.
140*9880d681SAndroid Build Coastguard Workerdefine void @f8(i32 %val1, i32 %val2) {
141*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8:
142*9880d681SAndroid Build Coastguard Worker; CHECK: crbh %r2, %r3, 0(%r1)
143*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
144*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
145*9880d681SAndroid Build Coastguard Worker  %cond = icmp sgt i32 %val1, %val2;
146*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Workera:
149*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
150*9880d681SAndroid Build Coastguard Worker  ret void
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Workerb:
153*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
154*9880d681SAndroid Build Coastguard Worker  ret void
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - high-equal compare.
158*9880d681SAndroid Build Coastguard Workerdefine void @f9(i32 %val1, i32 %val2) {
159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9:
160*9880d681SAndroid Build Coastguard Worker; CHECK: crbhe %r2, %r3, 0(%r1)
161*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
162*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
163*9880d681SAndroid Build Coastguard Worker  %cond = icmp sge i32 %val1, %val2;
164*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Workera:
167*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
168*9880d681SAndroid Build Coastguard Worker  ret void
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Workerb:
171*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
172*9880d681SAndroid Build Coastguard Worker  ret void
173*9880d681SAndroid Build Coastguard Worker}
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - equal compare.
176*9880d681SAndroid Build Coastguard Workerdefine void @f10(i32 %val1, i32 %val2) {
177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10:
178*9880d681SAndroid Build Coastguard Worker; CHECK: crbe %r2, %r3, 0(%r1)
179*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
180*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
181*9880d681SAndroid Build Coastguard Worker  %cond = icmp eq i32 %val1, %val2;
182*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Workera:
185*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
186*9880d681SAndroid Build Coastguard Worker  ret void
187*9880d681SAndroid Build Coastguard Worker
188*9880d681SAndroid Build Coastguard Workerb:
189*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
190*9880d681SAndroid Build Coastguard Worker  ret void
191*9880d681SAndroid Build Coastguard Worker}
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - unequal compare.
194*9880d681SAndroid Build Coastguard Workerdefine void @f11(i32 %val1, i32 %val2) {
195*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11:
196*9880d681SAndroid Build Coastguard Worker; CHECK: crblh %r2, %r3, 0(%r1)
197*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
198*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
199*9880d681SAndroid Build Coastguard Worker  %cond = icmp ne i32 %val1, %val2;
200*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Workera:
203*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
204*9880d681SAndroid Build Coastguard Worker  ret void
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Workerb:
207*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
208*9880d681SAndroid Build Coastguard Worker  ret void
209*9880d681SAndroid Build Coastguard Worker}
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate slt.
212*9880d681SAndroid Build Coastguard Workerdefine void @f12(i32 %val1) {
213*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12:
214*9880d681SAndroid Build Coastguard Worker; CHECK: cible %r2, 4, 0(%r1)
215*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
216*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
217*9880d681SAndroid Build Coastguard Worker  %cond = icmp slt i32 %val1, 5;
218*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workera:
221*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
222*9880d681SAndroid Build Coastguard Worker  ret void
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Workerb:
225*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
226*9880d681SAndroid Build Coastguard Worker  ret void
227*9880d681SAndroid Build Coastguard Worker}
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate sle.
230*9880d681SAndroid Build Coastguard Workerdefine void @f13(i32 %val1) {
231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13:
232*9880d681SAndroid Build Coastguard Worker; CHECK: cible %r2, 5, 0(%r1)
233*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
234*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
235*9880d681SAndroid Build Coastguard Worker  %cond = icmp sle i32 %val1, 5;
236*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workera:
239*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
240*9880d681SAndroid Build Coastguard Worker  ret void
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Workerb:
243*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
244*9880d681SAndroid Build Coastguard Worker  ret void
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate sgt.
248*9880d681SAndroid Build Coastguard Workerdefine void @f14(i32 %val1) {
249*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14:
250*9880d681SAndroid Build Coastguard Worker; CHECK: cibhe %r2, 6, 0(%r1)
251*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
252*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
253*9880d681SAndroid Build Coastguard Worker  %cond = icmp sgt i32 %val1, 5;
254*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Workera:
257*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
258*9880d681SAndroid Build Coastguard Worker  ret void
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Workerb:
261*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
262*9880d681SAndroid Build Coastguard Worker  ret void
263*9880d681SAndroid Build Coastguard Worker}
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate sge.
266*9880d681SAndroid Build Coastguard Workerdefine void @f15(i32 %val1) {
267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f15:
268*9880d681SAndroid Build Coastguard Worker; CHECK: cibhe %r2, 5, 0(%r1)
269*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
270*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
271*9880d681SAndroid Build Coastguard Worker  %cond = icmp sge i32 %val1, 5;
272*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Workera:
275*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
276*9880d681SAndroid Build Coastguard Worker  ret void
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerb:
279*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
280*9880d681SAndroid Build Coastguard Worker  ret void
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate eq.
284*9880d681SAndroid Build Coastguard Workerdefine void @f16(i32 %val1) {
285*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16:
286*9880d681SAndroid Build Coastguard Worker; CHECK: cibe %r2, 5, 0(%r1)
287*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
288*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
289*9880d681SAndroid Build Coastguard Worker  %cond = icmp eq i32 %val1, 5;
290*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Workera:
293*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
294*9880d681SAndroid Build Coastguard Worker  ret void
295*9880d681SAndroid Build Coastguard Worker
296*9880d681SAndroid Build Coastguard Workerb:
297*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
298*9880d681SAndroid Build Coastguard Worker  ret void
299*9880d681SAndroid Build Coastguard Worker}
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate ne.
302*9880d681SAndroid Build Coastguard Workerdefine void @f17(i32 %val1) {
303*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17:
304*9880d681SAndroid Build Coastguard Worker; CHECK: ciblh %r2, 5, 0(%r1)
305*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
306*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
307*9880d681SAndroid Build Coastguard Worker  %cond = icmp ne i32 %val1, 5;
308*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Workera:
311*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
312*9880d681SAndroid Build Coastguard Worker  ret void
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Workerb:
315*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
316*9880d681SAndroid Build Coastguard Worker  ret void
317*9880d681SAndroid Build Coastguard Worker}
318*9880d681SAndroid Build Coastguard Worker
319*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate ult.
320*9880d681SAndroid Build Coastguard Workerdefine void @f18(i32 %val1) {
321*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f18:
322*9880d681SAndroid Build Coastguard Worker; CHECK: clible %r2, 4, 0(%r1)
323*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
324*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
325*9880d681SAndroid Build Coastguard Worker  %cond = icmp ult i32 %val1, 5;
326*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
327*9880d681SAndroid Build Coastguard Worker
328*9880d681SAndroid Build Coastguard Workera:
329*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
330*9880d681SAndroid Build Coastguard Worker  ret void
331*9880d681SAndroid Build Coastguard Worker
332*9880d681SAndroid Build Coastguard Workerb:
333*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
334*9880d681SAndroid Build Coastguard Worker  ret void
335*9880d681SAndroid Build Coastguard Worker}
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate 64-bit slt.
338*9880d681SAndroid Build Coastguard Workerdefine void @f19(i64 %val1) {
339*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f19:
340*9880d681SAndroid Build Coastguard Worker; CHECK: cgible %r2, 4, 0(%r1)
341*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
342*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
343*9880d681SAndroid Build Coastguard Worker  %cond = icmp slt i64 %val1, 5;
344*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
345*9880d681SAndroid Build Coastguard Worker
346*9880d681SAndroid Build Coastguard Workera:
347*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
348*9880d681SAndroid Build Coastguard Worker  ret void
349*9880d681SAndroid Build Coastguard Worker
350*9880d681SAndroid Build Coastguard Workerb:
351*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
352*9880d681SAndroid Build Coastguard Worker  ret void
353*9880d681SAndroid Build Coastguard Worker}
354*9880d681SAndroid Build Coastguard Worker
355*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate 64-bit ult.
356*9880d681SAndroid Build Coastguard Workerdefine void @f20(i64 %val1) {
357*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f20:
358*9880d681SAndroid Build Coastguard Worker; CHECK: clgible %r2, 4, 0(%r1)
359*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
360*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
361*9880d681SAndroid Build Coastguard Worker  %cond = icmp ult i64 %val1, 5;
362*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Workera:
365*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
366*9880d681SAndroid Build Coastguard Worker  ret void
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Workerb:
369*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
370*9880d681SAndroid Build Coastguard Worker  ret void
371*9880d681SAndroid Build Coastguard Worker}
372*9880d681SAndroid Build Coastguard Worker
373*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call to an argument - will fail due to
374*9880d681SAndroid Build Coastguard Worker; intervening lgr.
375*9880d681SAndroid Build Coastguard Workerdefine void @f21(i32 %val1, i32 %val2, void()* %fun) {
376*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f21:
377*9880d681SAndroid Build Coastguard Worker; CHECK: crjhe %r2, %r3
378*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r1, %r4
379*9880d681SAndroid Build Coastguard Worker; CHECK: br %r1
380*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
381*9880d681SAndroid Build Coastguard Worker  %cond = icmp slt i32 %val1, %val2;
382*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
383*9880d681SAndroid Build Coastguard Worker
384*9880d681SAndroid Build Coastguard Workera:
385*9880d681SAndroid Build Coastguard Worker  tail call void %fun()
386*9880d681SAndroid Build Coastguard Worker  ret void
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Workerb:
389*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
390*9880d681SAndroid Build Coastguard Worker  ret void
391*9880d681SAndroid Build Coastguard Worker}
392*9880d681SAndroid Build Coastguard Worker
393*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - float olt compare.
394*9880d681SAndroid Build Coastguard Workerdefine void @f22(float %val1, float %val2) {
395*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f22:
396*9880d681SAndroid Build Coastguard Worker; CHECK: cebr %f0, %f2
397*9880d681SAndroid Build Coastguard Worker; CHECK: blr %r1
398*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
399*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
400*9880d681SAndroid Build Coastguard Worker  %cond = fcmp olt float %val1, %val2;
401*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
402*9880d681SAndroid Build Coastguard Worker
403*9880d681SAndroid Build Coastguard Workera:
404*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
405*9880d681SAndroid Build Coastguard Worker  ret void
406*9880d681SAndroid Build Coastguard Worker
407*9880d681SAndroid Build Coastguard Workerb:
408*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
409*9880d681SAndroid Build Coastguard Worker  ret void
410*9880d681SAndroid Build Coastguard Worker}
411*9880d681SAndroid Build Coastguard Worker
412*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - float ult compare.
413*9880d681SAndroid Build Coastguard Workerdefine void @f23(float %val1, float %val2) {
414*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f23:
415*9880d681SAndroid Build Coastguard Worker; CHECK: cebr %f0, %f2
416*9880d681SAndroid Build Coastguard Worker; CHECK: bnher %r1
417*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
418*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
419*9880d681SAndroid Build Coastguard Worker  %cond = fcmp ult float %val1, %val2;
420*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workera:
423*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
424*9880d681SAndroid Build Coastguard Worker  ret void
425*9880d681SAndroid Build Coastguard Worker
426*9880d681SAndroid Build Coastguard Workerb:
427*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
428*9880d681SAndroid Build Coastguard Worker  ret void
429*9880d681SAndroid Build Coastguard Worker}
430*9880d681SAndroid Build Coastguard Worker
431*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - float ord compare.
432*9880d681SAndroid Build Coastguard Workerdefine void @f24(float %val1, float %val2) {
433*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f24:
434*9880d681SAndroid Build Coastguard Worker; CHECK: cebr %f0, %f2
435*9880d681SAndroid Build Coastguard Worker; CHECK: bnor %r1
436*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
437*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
438*9880d681SAndroid Build Coastguard Worker  %cond = fcmp ord float %val1, %val2;
439*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
440*9880d681SAndroid Build Coastguard Worker
441*9880d681SAndroid Build Coastguard Workera:
442*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
443*9880d681SAndroid Build Coastguard Worker  ret void
444*9880d681SAndroid Build Coastguard Worker
445*9880d681SAndroid Build Coastguard Workerb:
446*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
447*9880d681SAndroid Build Coastguard Worker  ret void
448*9880d681SAndroid Build Coastguard Worker}
449*9880d681SAndroid Build Coastguard Worker
450*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - float uno compare.
451*9880d681SAndroid Build Coastguard Workerdefine void @f25(float %val1, float %val2) {
452*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f25:
453*9880d681SAndroid Build Coastguard Worker; CHECK: cebr %f0, %f2
454*9880d681SAndroid Build Coastguard Worker; CHECK: bor %r1
455*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
456*9880d681SAndroid Build Coastguard Worker  %fun_a = load volatile void() *, void()** @fun_a;
457*9880d681SAndroid Build Coastguard Worker  %cond = fcmp uno float %val1, %val2;
458*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a, label %b;
459*9880d681SAndroid Build Coastguard Worker
460*9880d681SAndroid Build Coastguard Workera:
461*9880d681SAndroid Build Coastguard Worker  tail call void %fun_a()
462*9880d681SAndroid Build Coastguard Worker  ret void
463*9880d681SAndroid Build Coastguard Worker
464*9880d681SAndroid Build Coastguard Workerb:
465*9880d681SAndroid Build Coastguard Worker  store i32 1, i32 *@var;
466*9880d681SAndroid Build Coastguard Worker  ret void
467*9880d681SAndroid Build Coastguard Worker}
468