xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/tbz-tbnz.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -O1 -march=aarch64 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdeclare void @t()
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine void @test1(i32 %a) {
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i32 %a, -12
9*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %sub, 0
10*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker; CHECK: sub [[CMP:w[0-9]+]], w0, #12
13*9880d681SAndroid Build Coastguard Worker; CHECK: tbz [[CMP]], #31
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerif.then:
16*9880d681SAndroid Build Coastguard Worker  call void @t()
17*9880d681SAndroid Build Coastguard Worker  br label %if.end
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerif.end:
20*9880d681SAndroid Build Coastguard Worker  ret void
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine void @test2(i64 %a) {
24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2
25*9880d681SAndroid Build Coastguard Workerentry:
26*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i64 %a, -12
27*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i64 %sub, 0
28*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; CHECK: sub [[CMP:x[0-9]+]], x0, #12
31*9880d681SAndroid Build Coastguard Worker; CHECK: tbz [[CMP]], #63
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerif.then:
34*9880d681SAndroid Build Coastguard Worker  call void @t()
35*9880d681SAndroid Build Coastguard Worker  br label %if.end
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerif.end:
38*9880d681SAndroid Build Coastguard Worker  ret void
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine void @test3(i32 %a) {
42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3
43*9880d681SAndroid Build Coastguard Workerentry:
44*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i32 %a, -12
45*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %sub, -1
46*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker; CHECK: sub [[CMP:w[0-9]+]], w0, #12
49*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz [[CMP]], #31
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerif.then:
52*9880d681SAndroid Build Coastguard Worker  call void @t()
53*9880d681SAndroid Build Coastguard Worker  br label %if.end
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerif.end:
56*9880d681SAndroid Build Coastguard Worker  ret void
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdefine void @test4(i64 %a) {
60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4
61*9880d681SAndroid Build Coastguard Workerentry:
62*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i64 %a, -12
63*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i64 %sub, -1
64*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker; CHECK: sub [[CMP:x[0-9]+]], x0, #12
67*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz [[CMP]], #63
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerif.then:
70*9880d681SAndroid Build Coastguard Worker  call void @t()
71*9880d681SAndroid Build Coastguard Worker  br label %if.end
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerif.end:
74*9880d681SAndroid Build Coastguard Worker  ret void
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine void @test5(i32 %a) {
78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5
79*9880d681SAndroid Build Coastguard Workerentry:
80*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i32 %a, -12
81*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i32 %sub, 0
82*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker; CHECK: sub [[CMP:w[0-9]+]], w0, #12
85*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz [[CMP]], #31
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerif.then:
88*9880d681SAndroid Build Coastguard Worker  call void @t()
89*9880d681SAndroid Build Coastguard Worker  br label %if.end
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Workerif.end:
92*9880d681SAndroid Build Coastguard Worker  ret void
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerdefine void @test6(i64 %a) {
96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test6
97*9880d681SAndroid Build Coastguard Workerentry:
98*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i64 %a, -12
99*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i64 %sub, 0
100*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker; CHECK: sub [[CMP:x[0-9]+]], x0, #12
103*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz [[CMP]], #63
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Workerif.then:
106*9880d681SAndroid Build Coastguard Worker  call void @t()
107*9880d681SAndroid Build Coastguard Worker  br label %if.end
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerif.end:
110*9880d681SAndroid Build Coastguard Worker  ret void
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine void @test7(i32 %a) {
114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test7
115*9880d681SAndroid Build Coastguard Workerentry:
116*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %a, 12
117*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %sub, 0
118*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.end
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; CHECK: sub [[CMP:w[0-9]+]], w0, #12
121*9880d681SAndroid Build Coastguard Worker; CHECK: tbz [[CMP]], #31
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerif.then:
124*9880d681SAndroid Build Coastguard Worker  call void @t()
125*9880d681SAndroid Build Coastguard Worker  br label %if.end
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Workerif.end:
128*9880d681SAndroid Build Coastguard Worker  ret void
129*9880d681SAndroid Build Coastguard Worker}
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Workerdefine void @test8(i64 %val1, i64 %val2, i64 %val3) {
132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test8
133*9880d681SAndroid Build Coastguard Worker  %and1 = and i64 %val1, %val2
134*9880d681SAndroid Build Coastguard Worker  %tst1 = icmp slt i64 %and1, 0
135*9880d681SAndroid Build Coastguard Worker  br i1 %tst1, label %if.then1, label %if.end
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker; CHECK: tst x0, x1
138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: b.ge
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Workerif.then1:
141*9880d681SAndroid Build Coastguard Worker  %and2 = and i64 %val2, %val3
142*9880d681SAndroid Build Coastguard Worker  %tst2 = icmp sge i64 %and2, 0
143*9880d681SAndroid Build Coastguard Worker  br i1 %tst2, label %if.then2, label %if.end
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Worker; CHECK: and [[CMP:x[0-9]+]], x1, x2
146*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
147*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz [[CMP]], #63
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerif.then2:
150*9880d681SAndroid Build Coastguard Worker  %shifted_op1 = shl i64 %val2, 63
151*9880d681SAndroid Build Coastguard Worker  %shifted_and1 = and i64 %val1, %shifted_op1
152*9880d681SAndroid Build Coastguard Worker  %tst3 = icmp slt i64 %shifted_and1, 0
153*9880d681SAndroid Build Coastguard Worker  br i1 %tst3, label %if.then3, label %if.end
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Worker; CHECK: tst x0, x1, lsl #63
156*9880d681SAndroid Build Coastguard Worker; CHECK: b.ge
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Workerif.then3:
159*9880d681SAndroid Build Coastguard Worker  %shifted_op2 = shl i64 %val2, 62
160*9880d681SAndroid Build Coastguard Worker  %shifted_and2 = and i64 %val1, %shifted_op2
161*9880d681SAndroid Build Coastguard Worker  %tst4 = icmp sge i64 %shifted_and2, 0
162*9880d681SAndroid Build Coastguard Worker  br i1 %tst4, label %if.then4, label %if.end
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Worker; CHECK: tst x0, x1, lsl #62
165*9880d681SAndroid Build Coastguard Worker; CHECK: b.lt
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Workerif.then4:
168*9880d681SAndroid Build Coastguard Worker  call void @t()
169*9880d681SAndroid Build Coastguard Worker  br label %if.end
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Workerif.end:
172*9880d681SAndroid Build Coastguard Worker  ret void
173*9880d681SAndroid Build Coastguard Worker}
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Workerdefine void @test9(i64 %val1) {
176*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test9
177*9880d681SAndroid Build Coastguard Worker  %tst = icmp slt i64 %val1, 0
178*9880d681SAndroid Build Coastguard Worker  br i1 %tst, label %if.then, label %if.end
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
181*9880d681SAndroid Build Coastguard Worker; CHECK: tbz x0, #63
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Workerif.then:
184*9880d681SAndroid Build Coastguard Worker  call void @t()
185*9880d681SAndroid Build Coastguard Worker  br label %if.end
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Workerif.end:
188*9880d681SAndroid Build Coastguard Worker  ret void
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Workerdefine void @test10(i64 %val1) {
192*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10
193*9880d681SAndroid Build Coastguard Worker  %tst = icmp slt i64 %val1, 0
194*9880d681SAndroid Build Coastguard Worker  br i1 %tst, label %if.then, label %if.end
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
197*9880d681SAndroid Build Coastguard Worker; CHECK: tbz x0, #63
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Workerif.then:
200*9880d681SAndroid Build Coastguard Worker  call void @t()
201*9880d681SAndroid Build Coastguard Worker  br label %if.end
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Workerif.end:
204*9880d681SAndroid Build Coastguard Worker  ret void
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerdefine void @test11(i64 %val1, i64* %ptr) {
208*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test11
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Worker; CHECK: ldr [[CMP:x[0-9]+]], [x1]
211*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
212*9880d681SAndroid Build Coastguard Worker; CHECK: tbz [[CMP]], #63
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Worker  %val = load i64, i64* %ptr
215*9880d681SAndroid Build Coastguard Worker  %tst = icmp slt i64 %val, 0
216*9880d681SAndroid Build Coastguard Worker  br i1 %tst, label %if.then, label %if.end
217*9880d681SAndroid Build Coastguard Worker
218*9880d681SAndroid Build Coastguard Workerif.then:
219*9880d681SAndroid Build Coastguard Worker  call void @t()
220*9880d681SAndroid Build Coastguard Worker  br label %if.end
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Workerif.end:
223*9880d681SAndroid Build Coastguard Worker  ret void
224*9880d681SAndroid Build Coastguard Worker}
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Workerdefine void @test12(i64 %val1) {
227*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test12
228*9880d681SAndroid Build Coastguard Worker  %tst = icmp slt i64 %val1, 0
229*9880d681SAndroid Build Coastguard Worker  br i1 %tst, label %if.then, label %if.end
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
232*9880d681SAndroid Build Coastguard Worker; CHECK: tbz x0, #63
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Workerif.then:
235*9880d681SAndroid Build Coastguard Worker  call void @t()
236*9880d681SAndroid Build Coastguard Worker  br label %if.end
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workerif.end:
239*9880d681SAndroid Build Coastguard Worker  ret void
240*9880d681SAndroid Build Coastguard Worker}
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Workerdefine void @test13(i64 %val1, i64 %val2) {
243*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test13
244*9880d681SAndroid Build Coastguard Worker  %or = or i64 %val1, %val2
245*9880d681SAndroid Build Coastguard Worker  %tst = icmp slt i64 %or, 0
246*9880d681SAndroid Build Coastguard Worker  br i1 %tst, label %if.then, label %if.end
247*9880d681SAndroid Build Coastguard Worker
248*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[CMP:x[0-9]+]], x0, x1
249*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
250*9880d681SAndroid Build Coastguard Worker; CHECK: tbz [[CMP]], #63
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Workerif.then:
253*9880d681SAndroid Build Coastguard Worker  call void @t()
254*9880d681SAndroid Build Coastguard Worker  br label %if.end
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Workerif.end:
257*9880d681SAndroid Build Coastguard Worker  ret void
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Workerdefine void @test14(i1 %cond) {
261*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test14
262*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %if.end, label %if.then
263*9880d681SAndroid Build Coastguard Worker
264*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
265*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz w0, #0
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerif.then:
268*9880d681SAndroid Build Coastguard Worker  call void @t()
269*9880d681SAndroid Build Coastguard Worker  br label %if.end
270*9880d681SAndroid Build Coastguard Worker
271*9880d681SAndroid Build Coastguard Workerif.end:
272*9880d681SAndroid Build Coastguard Worker  ret void
273*9880d681SAndroid Build Coastguard Worker}
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Workerdefine void @test15(i1 %cond) {
276*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test15
277*9880d681SAndroid Build Coastguard Worker  %cond1 = xor i1 %cond, -1
278*9880d681SAndroid Build Coastguard Worker  br i1 %cond1, label %if.then, label %if.end
279*9880d681SAndroid Build Coastguard Worker
280*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movn
281*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz w0, #0
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Workerif.then:
284*9880d681SAndroid Build Coastguard Worker  call void @t()
285*9880d681SAndroid Build Coastguard Worker  br label %if.end
286*9880d681SAndroid Build Coastguard Worker
287*9880d681SAndroid Build Coastguard Workerif.end:
288*9880d681SAndroid Build Coastguard Worker  ret void
289*9880d681SAndroid Build Coastguard Worker}
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Workerdefine void @test16(i64 %in) {
292*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test16
293*9880d681SAndroid Build Coastguard Worker  %shl = shl i64 %in, 3
294*9880d681SAndroid Build Coastguard Worker  %and = and i64 %shl, 32
295*9880d681SAndroid Build Coastguard Worker  %cond = icmp eq i64 %and, 0
296*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %then, label %end
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: lsl
299*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz w0, #2
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Workerthen:
302*9880d681SAndroid Build Coastguard Worker  call void @t()
303*9880d681SAndroid Build Coastguard Worker  br label %end
304*9880d681SAndroid Build Coastguard Worker
305*9880d681SAndroid Build Coastguard Workerend:
306*9880d681SAndroid Build Coastguard Worker  ret void
307*9880d681SAndroid Build Coastguard Worker}
308*9880d681SAndroid Build Coastguard Worker
309*9880d681SAndroid Build Coastguard Workerdefine void @test17(i64 %in) {
310*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test17
311*9880d681SAndroid Build Coastguard Worker  %shr = ashr i64 %in, 3
312*9880d681SAndroid Build Coastguard Worker  %and = and i64 %shr, 1
313*9880d681SAndroid Build Coastguard Worker  %cond = icmp eq i64 %and, 0
314*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %then, label %end
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: lsr
317*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz w0, #3
318*9880d681SAndroid Build Coastguard Worker
319*9880d681SAndroid Build Coastguard Workerthen:
320*9880d681SAndroid Build Coastguard Worker  call void @t()
321*9880d681SAndroid Build Coastguard Worker  br label %end
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Workerend:
324*9880d681SAndroid Build Coastguard Worker  ret void
325*9880d681SAndroid Build Coastguard Worker}
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Workerdefine void @test18(i32 %in) {
328*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test18
329*9880d681SAndroid Build Coastguard Worker  %shr = ashr i32 %in, 2
330*9880d681SAndroid Build Coastguard Worker  %cond = icmp sge i32 %shr, 0
331*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %then, label %end
332*9880d681SAndroid Build Coastguard Worker
333*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: asr
334*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz w0, #31
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Workerthen:
337*9880d681SAndroid Build Coastguard Worker  call void @t()
338*9880d681SAndroid Build Coastguard Worker  br label %end
339*9880d681SAndroid Build Coastguard Worker
340*9880d681SAndroid Build Coastguard Workerend:
341*9880d681SAndroid Build Coastguard Worker  ret void
342*9880d681SAndroid Build Coastguard Worker}
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Workerdefine void @test19(i64 %in) {
345*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test19
346*9880d681SAndroid Build Coastguard Worker  %shl = lshr i64 %in, 3
347*9880d681SAndroid Build Coastguard Worker  %trunc = trunc i64 %shl to i32
348*9880d681SAndroid Build Coastguard Worker  %and = and i32 %trunc, 1
349*9880d681SAndroid Build Coastguard Worker  %cond = icmp eq i32 %and, 0
350*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %then, label %end
351*9880d681SAndroid Build Coastguard Worker
352*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ubfx
353*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz w0, #3
354*9880d681SAndroid Build Coastguard Worker
355*9880d681SAndroid Build Coastguard Workerthen:
356*9880d681SAndroid Build Coastguard Worker  call void @t()
357*9880d681SAndroid Build Coastguard Worker  br label %end
358*9880d681SAndroid Build Coastguard Worker
359*9880d681SAndroid Build Coastguard Workerend:
360*9880d681SAndroid Build Coastguard Worker  ret void
361*9880d681SAndroid Build Coastguard Worker}
362