xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/jump_sign.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 -mcpu=pentiumpro -verify-machineinstrs | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine i32 @func_f(i32 %X) {
4*9880d681SAndroid Build Coastguard Workerentry:
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_f:
6*9880d681SAndroid Build Coastguard Worker; CHECK: jns
7*9880d681SAndroid Build Coastguard Worker	%tmp1 = add i32 %X, 1		; <i32> [#uses=1]
8*9880d681SAndroid Build Coastguard Worker	%tmp = icmp slt i32 %tmp1, 0		; <i1> [#uses=1]
9*9880d681SAndroid Build Coastguard Worker	br i1 %tmp, label %cond_true, label %cond_next
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workercond_true:		; preds = %entry
12*9880d681SAndroid Build Coastguard Worker	%tmp2 = tail call i32 (...) @bar( )		; <i32> [#uses=0]
13*9880d681SAndroid Build Coastguard Worker	br label %cond_next
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workercond_next:		; preds = %cond_true, %entry
16*9880d681SAndroid Build Coastguard Worker	%tmp3 = tail call i32 (...) @baz( )		; <i32> [#uses=0]
17*9880d681SAndroid Build Coastguard Worker	ret i32 undef
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerdeclare i32 @bar(...)
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerdeclare i32 @baz(...)
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker; rdar://10633221
25*9880d681SAndroid Build Coastguard Worker; rdar://11355268
26*9880d681SAndroid Build Coastguard Workerdefine i32 @func_g(i32 %a, i32 %b) nounwind {
27*9880d681SAndroid Build Coastguard Workerentry:
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_g:
29*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test
30*9880d681SAndroid Build Coastguard Worker; CHECK: cmovs
31*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %a, %b
32*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %sub, 0
33*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %sub, i32 0
34*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; rdar://10734411
38*9880d681SAndroid Build Coastguard Workerdefine i32 @func_h(i32 %a, i32 %b) nounwind {
39*9880d681SAndroid Build Coastguard Workerentry:
40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_h:
41*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
42*9880d681SAndroid Build Coastguard Worker; CHECK: cmov
43*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movl
44*9880d681SAndroid Build Coastguard Worker; CHECK: ret
45*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %b, %a
46*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %a, %b
47*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %sub, i32 0
48*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Workerdefine i32 @func_i(i32 %a, i32 %b) nounwind {
51*9880d681SAndroid Build Coastguard Workerentry:
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_i:
53*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
54*9880d681SAndroid Build Coastguard Worker; CHECK: cmov
55*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movl
56*9880d681SAndroid Build Coastguard Worker; CHECK: ret
57*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %a, %b
58*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %a, %b
59*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %sub, i32 0
60*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Workerdefine i32 @func_j(i32 %a, i32 %b) nounwind {
63*9880d681SAndroid Build Coastguard Workerentry:
64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_j:
65*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
66*9880d681SAndroid Build Coastguard Worker; CHECK: cmov
67*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movl
68*9880d681SAndroid Build Coastguard Worker; CHECK: ret
69*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt i32 %a, %b
70*9880d681SAndroid Build Coastguard Worker  %sub = sub i32 %a, %b
71*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %sub, i32 0
72*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Workerdefine i32 @func_k(i32 %a, i32 %b) nounwind {
75*9880d681SAndroid Build Coastguard Workerentry:
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_k:
77*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
78*9880d681SAndroid Build Coastguard Worker; CHECK: cmov
79*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movl
80*9880d681SAndroid Build Coastguard Worker; CHECK: ret
81*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult i32 %b, %a
82*9880d681SAndroid Build Coastguard Worker  %sub = sub i32 %a, %b
83*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %sub, i32 0
84*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker; redundant cmp instruction
87*9880d681SAndroid Build Coastguard Workerdefine i32 @func_l(i32 %a, i32 %b) nounwind {
88*9880d681SAndroid Build Coastguard Workerentry:
89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_l:
90*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
91*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %b, %a
92*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %a, %b
93*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %sub, i32 %a
94*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
95*9880d681SAndroid Build Coastguard Worker}
96*9880d681SAndroid Build Coastguard Workerdefine i32 @func_m(i32 %a, i32 %b) nounwind {
97*9880d681SAndroid Build Coastguard Workerentry:
98*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_m:
99*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
100*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %a, %b
101*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %a, %b
102*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %b, i32 %sub
103*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
104*9880d681SAndroid Build Coastguard Worker}
105*9880d681SAndroid Build Coastguard Worker; If EFLAGS is live-out, we can't remove cmp if there exists
106*9880d681SAndroid Build Coastguard Worker; a swapped sub.
107*9880d681SAndroid Build Coastguard Workerdefine i32 @func_l2(i32 %a, i32 %b) nounwind {
108*9880d681SAndroid Build Coastguard Workerentry:
109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_l2:
110*9880d681SAndroid Build Coastguard Worker; CHECK: cmp
111*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %b, %a
112*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %a, %b
113*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.else
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Workerif.then:
116*9880d681SAndroid Build Coastguard Worker  %cmp2 = icmp sgt i32 %b, %a
117*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp2, i32 %sub, i32 %a
118*9880d681SAndroid Build Coastguard Worker  ret i32 %sel
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Workerif.else:
121*9880d681SAndroid Build Coastguard Worker  ret i32 %sub
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Workerdefine i32 @func_l3(i32 %a, i32 %b) nounwind {
124*9880d681SAndroid Build Coastguard Workerentry:
125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_l3:
126*9880d681SAndroid Build Coastguard Worker; CHECK: sub
127*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
128*9880d681SAndroid Build Coastguard Worker; CHECK: jge
129*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %b, %a
130*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %a, %b
131*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.else
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerif.then:
134*9880d681SAndroid Build Coastguard Worker  ret i32 %sub
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Workerif.else:
137*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %sub, 1
138*9880d681SAndroid Build Coastguard Worker  ret i32 %add
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker; rdar://11830760
141*9880d681SAndroid Build Coastguard Worker; When Movr0 is between sub and cmp, we need to move "Movr0" before sub.
142*9880d681SAndroid Build Coastguard Workerdefine i32 @func_l4(i32 %a, i32 %b) nounwind {
143*9880d681SAndroid Build Coastguard Workerentry:
144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_l4:
145*9880d681SAndroid Build Coastguard Worker; CHECK: xor
146*9880d681SAndroid Build Coastguard Worker; CHECK: sub
147*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
148*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %b, %a
149*9880d681SAndroid Build Coastguard Worker  %sub = sub i32 %a, %b
150*9880d681SAndroid Build Coastguard Worker  %.sub = select i1 %cmp, i32 0, i32 %sub
151*9880d681SAndroid Build Coastguard Worker  ret i32 %.sub
152*9880d681SAndroid Build Coastguard Worker}
153*9880d681SAndroid Build Coastguard Worker; rdar://11540023
154*9880d681SAndroid Build Coastguard Workerdefine i32 @func_n(i32 %x, i32 %y) nounwind {
155*9880d681SAndroid Build Coastguard Workerentry:
156*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_n:
157*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sub
158*9880d681SAndroid Build Coastguard Worker; CHECK: cmp
159*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %x, %y
160*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %sub, 0
161*9880d681SAndroid Build Coastguard Worker  %y.x = select i1 %cmp, i32 %y, i32 %x
162*9880d681SAndroid Build Coastguard Worker  ret i32 %y.x
163*9880d681SAndroid Build Coastguard Worker}
164*9880d681SAndroid Build Coastguard Worker; PR://13046
165*9880d681SAndroid Build Coastguard Workerdefine void @func_o() nounwind uwtable {
166*9880d681SAndroid Build Coastguard Workerentry:
167*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* undef, align 2
168*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then.i, label %if.end.i
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Workerif.then.i:                                        ; preds = %entry
171*9880d681SAndroid Build Coastguard Worker  unreachable
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Workerif.end.i:                                         ; preds = %entry
174*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %sw.bb, label %sw.default
175*9880d681SAndroid Build Coastguard Worker
176*9880d681SAndroid Build Coastguard Workersw.bb:                                            ; preds = %if.end.i
177*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then44, label %if.end29
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Workerif.end29:                                         ; preds = %sw.bb
180*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_o:
181*9880d681SAndroid Build Coastguard Worker; CHECK: cmp
182*9880d681SAndroid Build Coastguard Worker  %1 = urem i16 %0, 10
183*9880d681SAndroid Build Coastguard Worker  %cmp25 = icmp eq i16 %1, 0
184*9880d681SAndroid Build Coastguard Worker  %. = select i1 %cmp25, i16 2, i16 0
185*9880d681SAndroid Build Coastguard Worker  br i1 %cmp25, label %if.then44, label %sw.default
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Workersw.default:                                       ; preds = %if.end29, %if.end.i
188*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then.i96, label %if.else.i97
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Workerif.then.i96:                                      ; preds = %sw.default
191*9880d681SAndroid Build Coastguard Worker  unreachable
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Workerif.else.i97:                                      ; preds = %sw.default
194*9880d681SAndroid Build Coastguard Worker  unreachable
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Workerif.then44:                                        ; preds = %if.end29, %sw.bb
197*9880d681SAndroid Build Coastguard Worker  %aModeRefSel.1.ph = phi i16 [ %., %if.end29 ], [ 3, %sw.bb ]
198*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then.i103, label %if.else.i104
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Workerif.then.i103:                                     ; preds = %if.then44
201*9880d681SAndroid Build Coastguard Worker  unreachable
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Workerif.else.i104:                                     ; preds = %if.then44
204*9880d681SAndroid Build Coastguard Worker  ret void
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker; rdar://11855129
207*9880d681SAndroid Build Coastguard Workerdefine i32 @func_p(i32 %a, i32 %b) nounwind {
208*9880d681SAndroid Build Coastguard Workerentry:
209*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_p:
210*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test
211*9880d681SAndroid Build Coastguard Worker; CHECK: cmovs
212*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %b, %a
213*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %add, 0
214*9880d681SAndroid Build Coastguard Worker  %add. = select i1 %cmp, i32 %add, i32 0
215*9880d681SAndroid Build Coastguard Worker  ret i32 %add.
216*9880d681SAndroid Build Coastguard Worker}
217*9880d681SAndroid Build Coastguard Worker; PR13475
218*9880d681SAndroid Build Coastguard Worker; If we have sub a, b and cmp b, a and the result of cmp is used
219*9880d681SAndroid Build Coastguard Worker; by sbb, we should not optimize cmp away.
220*9880d681SAndroid Build Coastguard Workerdefine i32 @func_q(i32 %a0, i32 %a1, i32 %a2) {
221*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_q:
222*9880d681SAndroid Build Coastguard Worker; CHECK: cmp
223*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sbb
224*9880d681SAndroid Build Coastguard Worker  %1 = icmp ult i32 %a0, %a1
225*9880d681SAndroid Build Coastguard Worker  %2 = sub i32 %a1, %a0
226*9880d681SAndroid Build Coastguard Worker  %3 = select i1 %1, i32 -1, i32 0
227*9880d681SAndroid Build Coastguard Worker  %4 = xor i32 %2, %3
228*9880d681SAndroid Build Coastguard Worker  ret i32 %4
229*9880d681SAndroid Build Coastguard Worker}
230*9880d681SAndroid Build Coastguard Worker; rdar://11873276
231*9880d681SAndroid Build Coastguard Workerdefine i8* @func_r(i8* %base, i32* nocapture %offset, i32 %size) nounwind {
232*9880d681SAndroid Build Coastguard Workerentry:
233*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_r:
234*9880d681SAndroid Build Coastguard Worker; CHECK: sub
235*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
236*9880d681SAndroid Build Coastguard Worker; CHECK: j
237*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sub
238*9880d681SAndroid Build Coastguard Worker; CHECK: ret
239*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %offset, align 8
240*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %0, %size
241*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %return, label %if.end
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Workerif.end:
244*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %0, %size
245*9880d681SAndroid Build Coastguard Worker  store i32 %sub, i32* %offset, align 8
246*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i8, i8* %base, i32 %sub
247*9880d681SAndroid Build Coastguard Worker  br label %return
248*9880d681SAndroid Build Coastguard Worker
249*9880d681SAndroid Build Coastguard Workerreturn:
250*9880d681SAndroid Build Coastguard Worker  %retval.0 = phi i8* [ %add.ptr, %if.end ], [ null, %entry ]
251*9880d681SAndroid Build Coastguard Worker  ret i8* %retval.0
252*9880d681SAndroid Build Coastguard Worker}
253*9880d681SAndroid Build Coastguard Worker
254*9880d681SAndroid Build Coastguard Worker; Test optimizations of dec/inc.
255*9880d681SAndroid Build Coastguard Workerdefine i32 @func_dec(i32 %a) nounwind {
256*9880d681SAndroid Build Coastguard Workerentry:
257*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_dec:
258*9880d681SAndroid Build Coastguard Worker; CHECK: decl
259*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test
260*9880d681SAndroid Build Coastguard Worker; CHECK: cmovsl
261*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i32 %a, 1
262*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %sub, 0
263*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %sub, i32 0
264*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerdefine i32 @func_inc(i32 %a) nounwind {
268*9880d681SAndroid Build Coastguard Workerentry:
269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_inc:
270*9880d681SAndroid Build Coastguard Worker; CHECK: incl
271*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test
272*9880d681SAndroid Build Coastguard Worker; CHECK: cmovsl
273*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %a, 1
274*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %add, 0
275*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %add, i32 0
276*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
277*9880d681SAndroid Build Coastguard Worker}
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Worker; PR13966
280*9880d681SAndroid Build Coastguard Worker@b = common global i32 0, align 4
281*9880d681SAndroid Build Coastguard Worker@a = common global i32 0, align 4
282*9880d681SAndroid Build Coastguard Workerdefine i32 @func_test1(i32 %p1) nounwind uwtable {
283*9880d681SAndroid Build Coastguard Workerentry:
284*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_test1:
285*9880d681SAndroid Build Coastguard Worker; CHECK: andb
286*9880d681SAndroid Build Coastguard Worker; CHECK: j
287*9880d681SAndroid Build Coastguard Worker; CHECK: ret
288*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* @b, align 4
289*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult i32 %0, %p1
290*9880d681SAndroid Build Coastguard Worker  %conv = zext i1 %cmp to i32
291*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* @a, align 4
292*9880d681SAndroid Build Coastguard Worker  %and = and i32 %conv, %1
293*9880d681SAndroid Build Coastguard Worker  %conv1 = trunc i32 %and to i8
294*9880d681SAndroid Build Coastguard Worker  %2 = urem i8 %conv1, 3
295*9880d681SAndroid Build Coastguard Worker  %tobool = icmp eq i8 %2, 0
296*9880d681SAndroid Build Coastguard Worker  br i1 %tobool, label %if.end, label %if.then
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Workerif.then:
299*9880d681SAndroid Build Coastguard Worker  %dec = add nsw i32 %1, -1
300*9880d681SAndroid Build Coastguard Worker  store i32 %dec, i32* @a, align 4
301*9880d681SAndroid Build Coastguard Worker  br label %if.end
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Workerif.end:
304*9880d681SAndroid Build Coastguard Worker  ret i32 undef
305*9880d681SAndroid Build Coastguard Worker}
306