xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/bt.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker; PR3253
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; The register+memory form of the BT instruction should be usable on
6*9880d681SAndroid Build Coastguard Worker; pentium4, however it is currently disabled due to the register+memory
7*9880d681SAndroid Build Coastguard Worker; form having different semantics than the register+register form.
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker; Test these patterns:
10*9880d681SAndroid Build Coastguard Worker;    (X & (1 << N))  != 0  -->  BT(X, N).
11*9880d681SAndroid Build Coastguard Worker;    ((X >>u N) & 1) != 0  -->  BT(X, N).
12*9880d681SAndroid Build Coastguard Worker; as well as several variations:
13*9880d681SAndroid Build Coastguard Worker;    - The second form can use an arithmetic shift.
14*9880d681SAndroid Build Coastguard Worker;    - Either form can use == instead of !=.
15*9880d681SAndroid Build Coastguard Worker;    - Either form can compare with an operand of the &
16*9880d681SAndroid Build Coastguard Worker;      instead of with 0.
17*9880d681SAndroid Build Coastguard Worker;    - The comparison can be commuted (only cases where neither
18*9880d681SAndroid Build Coastguard Worker;      operand is constant are included).
19*9880d681SAndroid Build Coastguard Worker;    - The and can be commuted.
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerdefine void @test2(i32 %x, i32 %n) nounwind {
22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2:
23*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB0_2
26*9880d681SAndroid Build Coastguard Worker;
27*9880d681SAndroid Build Coastguard Workerentry:
28*9880d681SAndroid Build Coastguard Worker  %tmp29 = lshr i32 %x, %n
29*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, 1
30*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, 0
31*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerbb:
34*9880d681SAndroid Build Coastguard Worker  call void @foo()
35*9880d681SAndroid Build Coastguard Worker  ret void
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
38*9880d681SAndroid Build Coastguard Worker  ret void
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine void @test2b(i32 %x, i32 %n) nounwind {
42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2b:
43*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB1_2
46*9880d681SAndroid Build Coastguard Worker;
47*9880d681SAndroid Build Coastguard Workerentry:
48*9880d681SAndroid Build Coastguard Worker  %tmp29 = lshr i32 %x, %n
49*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 1, %tmp29
50*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, 0
51*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerbb:
54*9880d681SAndroid Build Coastguard Worker  call void @foo()
55*9880d681SAndroid Build Coastguard Worker  ret void
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
58*9880d681SAndroid Build Coastguard Worker  ret void
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine void @atest2(i32 %x, i32 %n) nounwind {
62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: atest2:
63*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB2_2
66*9880d681SAndroid Build Coastguard Worker;
67*9880d681SAndroid Build Coastguard Workerentry:
68*9880d681SAndroid Build Coastguard Worker  %tmp29 = ashr i32 %x, %n
69*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, 1
70*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, 0
71*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerbb:
74*9880d681SAndroid Build Coastguard Worker  call void @foo()
75*9880d681SAndroid Build Coastguard Worker  ret void
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
78*9880d681SAndroid Build Coastguard Worker  ret void
79*9880d681SAndroid Build Coastguard Worker}
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Workerdefine void @atest2b(i32 %x, i32 %n) nounwind {
82*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: atest2b:
83*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB3_2
86*9880d681SAndroid Build Coastguard Worker;
87*9880d681SAndroid Build Coastguard Workerentry:
88*9880d681SAndroid Build Coastguard Worker  %tmp29 = ashr i32 %x, %n
89*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 1, %tmp29
90*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, 0
91*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerbb:
94*9880d681SAndroid Build Coastguard Worker  call void @foo()
95*9880d681SAndroid Build Coastguard Worker  ret void
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
98*9880d681SAndroid Build Coastguard Worker  ret void
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerdefine void @test3(i32 %x, i32 %n) nounwind {
102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3:
103*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB4_2
106*9880d681SAndroid Build Coastguard Worker;
107*9880d681SAndroid Build Coastguard Workerentry:
108*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
109*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, %x
110*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, 0
111*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerbb:
114*9880d681SAndroid Build Coastguard Worker  call void @foo()
115*9880d681SAndroid Build Coastguard Worker  ret void
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
118*9880d681SAndroid Build Coastguard Worker  ret void
119*9880d681SAndroid Build Coastguard Worker}
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerdefine void @test3b(i32 %x, i32 %n) nounwind {
122*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3b:
123*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB5_2
126*9880d681SAndroid Build Coastguard Worker;
127*9880d681SAndroid Build Coastguard Workerentry:
128*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
129*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %x, %tmp29
130*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, 0
131*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerbb:
134*9880d681SAndroid Build Coastguard Worker  call void @foo()
135*9880d681SAndroid Build Coastguard Worker  ret void
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
138*9880d681SAndroid Build Coastguard Worker  ret void
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerdefine void @testne2(i32 %x, i32 %n) nounwind {
142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testne2:
143*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB6_2
146*9880d681SAndroid Build Coastguard Worker;
147*9880d681SAndroid Build Coastguard Workerentry:
148*9880d681SAndroid Build Coastguard Worker  %tmp29 = lshr i32 %x, %n
149*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, 1
150*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, 0
151*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Workerbb:
154*9880d681SAndroid Build Coastguard Worker  call void @foo()
155*9880d681SAndroid Build Coastguard Worker  ret void
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
158*9880d681SAndroid Build Coastguard Worker  ret void
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Workerdefine void @testne2b(i32 %x, i32 %n) nounwind {
162*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testne2b:
163*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
164*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB7_2
166*9880d681SAndroid Build Coastguard Worker;
167*9880d681SAndroid Build Coastguard Workerentry:
168*9880d681SAndroid Build Coastguard Worker  %tmp29 = lshr i32 %x, %n
169*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 1, %tmp29
170*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, 0
171*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Workerbb:
174*9880d681SAndroid Build Coastguard Worker  call void @foo()
175*9880d681SAndroid Build Coastguard Worker  ret void
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
178*9880d681SAndroid Build Coastguard Worker  ret void
179*9880d681SAndroid Build Coastguard Worker}
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Workerdefine void @atestne2(i32 %x, i32 %n) nounwind {
182*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: atestne2:
183*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB8_2
186*9880d681SAndroid Build Coastguard Worker;
187*9880d681SAndroid Build Coastguard Workerentry:
188*9880d681SAndroid Build Coastguard Worker  %tmp29 = ashr i32 %x, %n
189*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, 1
190*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, 0
191*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Workerbb:
194*9880d681SAndroid Build Coastguard Worker  call void @foo()
195*9880d681SAndroid Build Coastguard Worker  ret void
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
198*9880d681SAndroid Build Coastguard Worker  ret void
199*9880d681SAndroid Build Coastguard Worker}
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Workerdefine void @atestne2b(i32 %x, i32 %n) nounwind {
202*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: atestne2b:
203*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
204*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
205*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB9_2
206*9880d681SAndroid Build Coastguard Worker;
207*9880d681SAndroid Build Coastguard Workerentry:
208*9880d681SAndroid Build Coastguard Worker  %tmp29 = ashr i32 %x, %n
209*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 1, %tmp29
210*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, 0
211*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Workerbb:
214*9880d681SAndroid Build Coastguard Worker  call void @foo()
215*9880d681SAndroid Build Coastguard Worker  ret void
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
218*9880d681SAndroid Build Coastguard Worker  ret void
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Workerdefine void @testne3(i32 %x, i32 %n) nounwind {
222*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testne3:
223*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
224*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB10_2
226*9880d681SAndroid Build Coastguard Worker;
227*9880d681SAndroid Build Coastguard Workerentry:
228*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
229*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, %x
230*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, 0
231*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
232*9880d681SAndroid Build Coastguard Worker
233*9880d681SAndroid Build Coastguard Workerbb:
234*9880d681SAndroid Build Coastguard Worker  call void @foo()
235*9880d681SAndroid Build Coastguard Worker  ret void
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
238*9880d681SAndroid Build Coastguard Worker  ret void
239*9880d681SAndroid Build Coastguard Worker}
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Workerdefine void @testne3b(i32 %x, i32 %n) nounwind {
242*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testne3b:
243*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB11_2
246*9880d681SAndroid Build Coastguard Worker;
247*9880d681SAndroid Build Coastguard Workerentry:
248*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
249*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %x, %tmp29
250*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, 0
251*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Workerbb:
254*9880d681SAndroid Build Coastguard Worker  call void @foo()
255*9880d681SAndroid Build Coastguard Worker  ret void
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
258*9880d681SAndroid Build Coastguard Worker  ret void
259*9880d681SAndroid Build Coastguard Worker}
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerdefine void @query2(i32 %x, i32 %n) nounwind {
262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: query2:
263*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB12_2
266*9880d681SAndroid Build Coastguard Worker;
267*9880d681SAndroid Build Coastguard Workerentry:
268*9880d681SAndroid Build Coastguard Worker  %tmp29 = lshr i32 %x, %n
269*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, 1
270*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, 1
271*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Workerbb:
274*9880d681SAndroid Build Coastguard Worker  call void @foo()
275*9880d681SAndroid Build Coastguard Worker  ret void
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
278*9880d681SAndroid Build Coastguard Worker  ret void
279*9880d681SAndroid Build Coastguard Worker}
280*9880d681SAndroid Build Coastguard Worker
281*9880d681SAndroid Build Coastguard Workerdefine void @query2b(i32 %x, i32 %n) nounwind {
282*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: query2b:
283*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
284*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
285*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB13_2
286*9880d681SAndroid Build Coastguard Worker;
287*9880d681SAndroid Build Coastguard Workerentry:
288*9880d681SAndroid Build Coastguard Worker  %tmp29 = lshr i32 %x, %n
289*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 1, %tmp29
290*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, 1
291*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
292*9880d681SAndroid Build Coastguard Worker
293*9880d681SAndroid Build Coastguard Workerbb:
294*9880d681SAndroid Build Coastguard Worker  call void @foo()
295*9880d681SAndroid Build Coastguard Worker  ret void
296*9880d681SAndroid Build Coastguard Worker
297*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
298*9880d681SAndroid Build Coastguard Worker  ret void
299*9880d681SAndroid Build Coastguard Worker}
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Workerdefine void @aquery2(i32 %x, i32 %n) nounwind {
302*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: aquery2:
303*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
304*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
305*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB14_2
306*9880d681SAndroid Build Coastguard Worker;
307*9880d681SAndroid Build Coastguard Workerentry:
308*9880d681SAndroid Build Coastguard Worker  %tmp29 = ashr i32 %x, %n
309*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, 1
310*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, 1
311*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Workerbb:
314*9880d681SAndroid Build Coastguard Worker  call void @foo()
315*9880d681SAndroid Build Coastguard Worker  ret void
316*9880d681SAndroid Build Coastguard Worker
317*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
318*9880d681SAndroid Build Coastguard Worker  ret void
319*9880d681SAndroid Build Coastguard Worker}
320*9880d681SAndroid Build Coastguard Worker
321*9880d681SAndroid Build Coastguard Workerdefine void @aquery2b(i32 %x, i32 %n) nounwind {
322*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: aquery2b:
323*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
324*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
325*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB15_2
326*9880d681SAndroid Build Coastguard Worker;
327*9880d681SAndroid Build Coastguard Workerentry:
328*9880d681SAndroid Build Coastguard Worker  %tmp29 = ashr i32 %x, %n
329*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 1, %tmp29
330*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, 1
331*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
332*9880d681SAndroid Build Coastguard Worker
333*9880d681SAndroid Build Coastguard Workerbb:
334*9880d681SAndroid Build Coastguard Worker  call void @foo()
335*9880d681SAndroid Build Coastguard Worker  ret void
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
338*9880d681SAndroid Build Coastguard Worker  ret void
339*9880d681SAndroid Build Coastguard Worker}
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Workerdefine void @query3(i32 %x, i32 %n) nounwind {
342*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: query3:
343*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
344*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
345*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB16_2
346*9880d681SAndroid Build Coastguard Worker;
347*9880d681SAndroid Build Coastguard Workerentry:
348*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
349*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, %x
350*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, %tmp29
351*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
352*9880d681SAndroid Build Coastguard Worker
353*9880d681SAndroid Build Coastguard Workerbb:
354*9880d681SAndroid Build Coastguard Worker  call void @foo()
355*9880d681SAndroid Build Coastguard Worker  ret void
356*9880d681SAndroid Build Coastguard Worker
357*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
358*9880d681SAndroid Build Coastguard Worker  ret void
359*9880d681SAndroid Build Coastguard Worker}
360*9880d681SAndroid Build Coastguard Worker
361*9880d681SAndroid Build Coastguard Workerdefine void @query3b(i32 %x, i32 %n) nounwind {
362*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: query3b:
363*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
364*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
365*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB17_2
366*9880d681SAndroid Build Coastguard Worker;
367*9880d681SAndroid Build Coastguard Workerentry:
368*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
369*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %x, %tmp29
370*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp3, %tmp29
371*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
372*9880d681SAndroid Build Coastguard Worker
373*9880d681SAndroid Build Coastguard Workerbb:
374*9880d681SAndroid Build Coastguard Worker  call void @foo()
375*9880d681SAndroid Build Coastguard Worker  ret void
376*9880d681SAndroid Build Coastguard Worker
377*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
378*9880d681SAndroid Build Coastguard Worker  ret void
379*9880d681SAndroid Build Coastguard Worker}
380*9880d681SAndroid Build Coastguard Worker
381*9880d681SAndroid Build Coastguard Workerdefine void @query3x(i32 %x, i32 %n) nounwind {
382*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: query3x:
383*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
384*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
385*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB18_2
386*9880d681SAndroid Build Coastguard Worker;
387*9880d681SAndroid Build Coastguard Workerentry:
388*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
389*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, %x
390*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp29, %tmp3
391*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
392*9880d681SAndroid Build Coastguard Worker
393*9880d681SAndroid Build Coastguard Workerbb:
394*9880d681SAndroid Build Coastguard Worker  call void @foo()
395*9880d681SAndroid Build Coastguard Worker  ret void
396*9880d681SAndroid Build Coastguard Worker
397*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
398*9880d681SAndroid Build Coastguard Worker  ret void
399*9880d681SAndroid Build Coastguard Worker}
400*9880d681SAndroid Build Coastguard Worker
401*9880d681SAndroid Build Coastguard Workerdefine void @query3bx(i32 %x, i32 %n) nounwind {
402*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: query3bx:
403*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
404*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
405*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jae .LBB19_2
406*9880d681SAndroid Build Coastguard Worker;
407*9880d681SAndroid Build Coastguard Workerentry:
408*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
409*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %x, %tmp29
410*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp eq i32 %tmp29, %tmp3
411*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
412*9880d681SAndroid Build Coastguard Worker
413*9880d681SAndroid Build Coastguard Workerbb:
414*9880d681SAndroid Build Coastguard Worker  call void @foo()
415*9880d681SAndroid Build Coastguard Worker  ret void
416*9880d681SAndroid Build Coastguard Worker
417*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
418*9880d681SAndroid Build Coastguard Worker  ret void
419*9880d681SAndroid Build Coastguard Worker}
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Workerdefine void @queryne2(i32 %x, i32 %n) nounwind {
422*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: queryne2:
423*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
424*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
425*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB20_2
426*9880d681SAndroid Build Coastguard Worker;
427*9880d681SAndroid Build Coastguard Workerentry:
428*9880d681SAndroid Build Coastguard Worker  %tmp29 = lshr i32 %x, %n
429*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, 1
430*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, 1
431*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
432*9880d681SAndroid Build Coastguard Worker
433*9880d681SAndroid Build Coastguard Workerbb:
434*9880d681SAndroid Build Coastguard Worker  call void @foo()
435*9880d681SAndroid Build Coastguard Worker  ret void
436*9880d681SAndroid Build Coastguard Worker
437*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
438*9880d681SAndroid Build Coastguard Worker  ret void
439*9880d681SAndroid Build Coastguard Worker}
440*9880d681SAndroid Build Coastguard Worker
441*9880d681SAndroid Build Coastguard Workerdefine void @queryne2b(i32 %x, i32 %n) nounwind {
442*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: queryne2b:
443*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
444*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
445*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB21_2
446*9880d681SAndroid Build Coastguard Worker;
447*9880d681SAndroid Build Coastguard Workerentry:
448*9880d681SAndroid Build Coastguard Worker  %tmp29 = lshr i32 %x, %n
449*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 1, %tmp29
450*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, 1
451*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Workerbb:
454*9880d681SAndroid Build Coastguard Worker  call void @foo()
455*9880d681SAndroid Build Coastguard Worker  ret void
456*9880d681SAndroid Build Coastguard Worker
457*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
458*9880d681SAndroid Build Coastguard Worker  ret void
459*9880d681SAndroid Build Coastguard Worker}
460*9880d681SAndroid Build Coastguard Worker
461*9880d681SAndroid Build Coastguard Workerdefine void @aqueryne2(i32 %x, i32 %n) nounwind {
462*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: aqueryne2:
463*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
464*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
465*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB22_2
466*9880d681SAndroid Build Coastguard Worker;
467*9880d681SAndroid Build Coastguard Workerentry:
468*9880d681SAndroid Build Coastguard Worker  %tmp29 = ashr i32 %x, %n
469*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, 1
470*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, 1
471*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
472*9880d681SAndroid Build Coastguard Worker
473*9880d681SAndroid Build Coastguard Workerbb:
474*9880d681SAndroid Build Coastguard Worker  call void @foo()
475*9880d681SAndroid Build Coastguard Worker  ret void
476*9880d681SAndroid Build Coastguard Worker
477*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
478*9880d681SAndroid Build Coastguard Worker  ret void
479*9880d681SAndroid Build Coastguard Worker}
480*9880d681SAndroid Build Coastguard Worker
481*9880d681SAndroid Build Coastguard Workerdefine void @aqueryne2b(i32 %x, i32 %n) nounwind {
482*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: aqueryne2b:
483*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
484*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
485*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB23_2
486*9880d681SAndroid Build Coastguard Worker;
487*9880d681SAndroid Build Coastguard Workerentry:
488*9880d681SAndroid Build Coastguard Worker  %tmp29 = ashr i32 %x, %n
489*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 1, %tmp29
490*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, 1
491*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
492*9880d681SAndroid Build Coastguard Worker
493*9880d681SAndroid Build Coastguard Workerbb:
494*9880d681SAndroid Build Coastguard Worker  call void @foo()
495*9880d681SAndroid Build Coastguard Worker  ret void
496*9880d681SAndroid Build Coastguard Worker
497*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
498*9880d681SAndroid Build Coastguard Worker  ret void
499*9880d681SAndroid Build Coastguard Worker}
500*9880d681SAndroid Build Coastguard Worker
501*9880d681SAndroid Build Coastguard Workerdefine void @queryne3(i32 %x, i32 %n) nounwind {
502*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: queryne3:
503*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
504*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
505*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB24_2
506*9880d681SAndroid Build Coastguard Worker;
507*9880d681SAndroid Build Coastguard Workerentry:
508*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
509*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, %x
510*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, %tmp29
511*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
512*9880d681SAndroid Build Coastguard Worker
513*9880d681SAndroid Build Coastguard Workerbb:
514*9880d681SAndroid Build Coastguard Worker  call void @foo()
515*9880d681SAndroid Build Coastguard Worker  ret void
516*9880d681SAndroid Build Coastguard Worker
517*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
518*9880d681SAndroid Build Coastguard Worker  ret void
519*9880d681SAndroid Build Coastguard Worker}
520*9880d681SAndroid Build Coastguard Worker
521*9880d681SAndroid Build Coastguard Workerdefine void @queryne3b(i32 %x, i32 %n) nounwind {
522*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: queryne3b:
523*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
524*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
525*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB25_2
526*9880d681SAndroid Build Coastguard Worker;
527*9880d681SAndroid Build Coastguard Workerentry:
528*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
529*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %x, %tmp29
530*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp3, %tmp29
531*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Workerbb:
534*9880d681SAndroid Build Coastguard Worker  call void @foo()
535*9880d681SAndroid Build Coastguard Worker  ret void
536*9880d681SAndroid Build Coastguard Worker
537*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
538*9880d681SAndroid Build Coastguard Worker  ret void
539*9880d681SAndroid Build Coastguard Worker}
540*9880d681SAndroid Build Coastguard Worker
541*9880d681SAndroid Build Coastguard Workerdefine void @queryne3x(i32 %x, i32 %n) nounwind {
542*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: queryne3x:
543*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
544*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
545*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB26_2
546*9880d681SAndroid Build Coastguard Worker;
547*9880d681SAndroid Build Coastguard Workerentry:
548*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
549*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %tmp29, %x
550*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp29, %tmp3
551*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
552*9880d681SAndroid Build Coastguard Worker
553*9880d681SAndroid Build Coastguard Workerbb:
554*9880d681SAndroid Build Coastguard Worker  call void @foo()
555*9880d681SAndroid Build Coastguard Worker  ret void
556*9880d681SAndroid Build Coastguard Worker
557*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
558*9880d681SAndroid Build Coastguard Worker  ret void
559*9880d681SAndroid Build Coastguard Worker}
560*9880d681SAndroid Build Coastguard Worker
561*9880d681SAndroid Build Coastguard Workerdefine void @queryne3bx(i32 %x, i32 %n) nounwind {
562*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: queryne3bx:
563*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
564*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
565*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    jb .LBB27_2
566*9880d681SAndroid Build Coastguard Worker;
567*9880d681SAndroid Build Coastguard Workerentry:
568*9880d681SAndroid Build Coastguard Worker  %tmp29 = shl i32 1, %n
569*9880d681SAndroid Build Coastguard Worker  %tmp3 = and i32 %x, %tmp29
570*9880d681SAndroid Build Coastguard Worker  %tmp4 = icmp ne i32 %tmp29, %tmp3
571*9880d681SAndroid Build Coastguard Worker  br i1 %tmp4, label %bb, label %UnifiedReturnBlock
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Workerbb:
574*9880d681SAndroid Build Coastguard Worker  call void @foo()
575*9880d681SAndroid Build Coastguard Worker  ret void
576*9880d681SAndroid Build Coastguard Worker
577*9880d681SAndroid Build Coastguard WorkerUnifiedReturnBlock:
578*9880d681SAndroid Build Coastguard Worker  ret void
579*9880d681SAndroid Build Coastguard Worker}
580*9880d681SAndroid Build Coastguard Worker
581*9880d681SAndroid Build Coastguard Workerdeclare void @foo()
582*9880d681SAndroid Build Coastguard Worker
583*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @invert(i32 %flags, i32 %flag) nounwind {
584*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: invert:
585*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
586*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    notl %edi
587*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    btl %esi, %edi
588*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    setb %al
589*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
590*9880d681SAndroid Build Coastguard Worker;
591*9880d681SAndroid Build Coastguard Worker  %neg = xor i32 %flags, -1
592*9880d681SAndroid Build Coastguard Worker  %shl = shl i32 1, %flag
593*9880d681SAndroid Build Coastguard Worker  %and = and i32 %shl, %neg
594*9880d681SAndroid Build Coastguard Worker  %tobool = icmp ne i32 %and, 0
595*9880d681SAndroid Build Coastguard Worker  ret i1 %tobool
596*9880d681SAndroid Build Coastguard Worker}
597*9880d681SAndroid Build Coastguard Worker
598