xref: /aosp_15_r20/external/llvm/test/Transforms/InstSimplify/implies.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by update_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: opt -S %s -instsimplify | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; A ==> A -> true
5*9880d681SAndroid Build Coastguard Workerdefine i1 @test(i32 %length.i, i32 %i) {
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test(
7*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
8*9880d681SAndroid Build Coastguard Worker;
9*9880d681SAndroid Build Coastguard Worker  %var29 = icmp slt i32 %i, %length.i
10*9880d681SAndroid Build Coastguard Worker  %res = icmp uge i1 %var29, %var29
11*9880d681SAndroid Build Coastguard Worker  ret i1 %res
12*9880d681SAndroid Build Coastguard Worker}
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker; i +_{nsw} C_{>0} <s L ==> i <s L -> true
15*9880d681SAndroid Build Coastguard Workerdefine i1 @test2(i32 %length.i, i32 %i) {
16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2(
17*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
18*9880d681SAndroid Build Coastguard Worker;
19*9880d681SAndroid Build Coastguard Worker  %iplus1 = add nsw i32 %i, 1
20*9880d681SAndroid Build Coastguard Worker  %var29 = icmp slt i32 %i, %length.i
21*9880d681SAndroid Build Coastguard Worker  %var30 = icmp slt i32 %iplus1, %length.i
22*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %var30, %var29
23*9880d681SAndroid Build Coastguard Worker  ret i1 %res
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Worker; i + C_{>0} <s L ==> i <s L -> unknown without the nsw
27*9880d681SAndroid Build Coastguard Workerdefine i1 @test2_neg(i32 %length.i, i32 %i) {
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2_neg(
29*9880d681SAndroid Build Coastguard Worker; CHECK:         [[IPLUS1:%.*]] = add i32 %i, 1
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[VAR29:%.*]] = icmp slt i32 %i, %length.i
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[VAR30:%.*]] = icmp slt i32 [[IPLUS1]], %length.i
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[RES:%.*]] = icmp ule i1 [[VAR30]], [[VAR29]]
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[RES]]
34*9880d681SAndroid Build Coastguard Worker;
35*9880d681SAndroid Build Coastguard Worker  %iplus1 = add i32 %i, 1
36*9880d681SAndroid Build Coastguard Worker  %var29 = icmp slt i32 %i, %length.i
37*9880d681SAndroid Build Coastguard Worker  %var30 = icmp slt i32 %iplus1, %length.i
38*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %var30, %var29
39*9880d681SAndroid Build Coastguard Worker  ret i1 %res
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; sle is not implication
43*9880d681SAndroid Build Coastguard Workerdefine i1 @test2_neg2(i32 %length.i, i32 %i) {
44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2_neg2(
45*9880d681SAndroid Build Coastguard Worker; CHECK:         [[IPLUS1:%.*]] = add i32 %i, 1
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[VAR29:%.*]] = icmp slt i32 %i, %length.i
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[VAR30:%.*]] = icmp slt i32 [[IPLUS1]], %length.i
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[RES:%.*]] = icmp sle i1 [[VAR30]], [[VAR29]]
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[RES]]
50*9880d681SAndroid Build Coastguard Worker;
51*9880d681SAndroid Build Coastguard Worker  %iplus1 = add i32 %i, 1
52*9880d681SAndroid Build Coastguard Worker  %var29 = icmp slt i32 %i, %length.i
53*9880d681SAndroid Build Coastguard Worker  %var30 = icmp slt i32 %iplus1, %length.i
54*9880d681SAndroid Build Coastguard Worker  %res = icmp sle i1 %var30, %var29
55*9880d681SAndroid Build Coastguard Worker  ret i1 %res
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; The binary operator has to be an add
59*9880d681SAndroid Build Coastguard Workerdefine i1 @test2_neg3(i32 %length.i, i32 %i) {
60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2_neg3(
61*9880d681SAndroid Build Coastguard Worker; CHECK:         [[IPLUS1:%.*]] = sub nsw i32 %i, 1
62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[VAR29:%.*]] = icmp slt i32 %i, %length.i
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[VAR30:%.*]] = icmp slt i32 [[IPLUS1]], %length.i
64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[RES:%.*]] = icmp ule i1 [[VAR30]], [[VAR29]]
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[RES]]
66*9880d681SAndroid Build Coastguard Worker;
67*9880d681SAndroid Build Coastguard Worker  %iplus1 = sub nsw i32 %i, 1
68*9880d681SAndroid Build Coastguard Worker  %var29 = icmp slt i32 %i, %length.i
69*9880d681SAndroid Build Coastguard Worker  %var30 = icmp slt i32 %iplus1, %length.i
70*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %var30, %var29
71*9880d681SAndroid Build Coastguard Worker  ret i1 %res
72*9880d681SAndroid Build Coastguard Worker}
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Worker; i +_{nsw} C_{>0} <s L ==> i <s L -> true
75*9880d681SAndroid Build Coastguard Worker; With an inverted conditional (ule B A rather than canonical ugt A B
76*9880d681SAndroid Build Coastguard Workerdefine i1 @test3(i32 %length.i, i32 %i) {
77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3(
78*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
79*9880d681SAndroid Build Coastguard Worker;
80*9880d681SAndroid Build Coastguard Worker  %iplus1 = add nsw i32 %i, 1
81*9880d681SAndroid Build Coastguard Worker  %var29 = icmp slt i32 %i, %length.i
82*9880d681SAndroid Build Coastguard Worker  %var30 = icmp slt i32 %iplus1, %length.i
83*9880d681SAndroid Build Coastguard Worker  %res = icmp uge i1 %var29, %var30
84*9880d681SAndroid Build Coastguard Worker  ret i1 %res
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker; i +_{nuw} C <u L ==> i <u L
88*9880d681SAndroid Build Coastguard Workerdefine i1 @test4(i32 %length.i, i32 %i) {
89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4(
90*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
91*9880d681SAndroid Build Coastguard Worker;
92*9880d681SAndroid Build Coastguard Worker  %iplus1 = add nuw i32 %i, 1
93*9880d681SAndroid Build Coastguard Worker  %var29 = icmp ult i32 %i, %length.i
94*9880d681SAndroid Build Coastguard Worker  %var30 = icmp ult i32 %iplus1, %length.i
95*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %var30, %var29
96*9880d681SAndroid Build Coastguard Worker  ret i1 %res
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker; A ==> A for vectors
100*9880d681SAndroid Build Coastguard Workerdefine <4 x i1> @test5(<4 x i1> %vec) {
101*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5(
102*9880d681SAndroid Build Coastguard Worker; CHECK:         ret <4 x i1> <i1 true, i1 true, i1 true, i1 true>
103*9880d681SAndroid Build Coastguard Worker;
104*9880d681SAndroid Build Coastguard Worker  %res = icmp ule <4 x i1> %vec, %vec
105*9880d681SAndroid Build Coastguard Worker  ret <4 x i1> %res
106*9880d681SAndroid Build Coastguard Worker}
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Worker; Don't crash on vector inputs - pr25040
109*9880d681SAndroid Build Coastguard Workerdefine <4 x i1> @test6(<4 x i1> %a, <4 x i1> %b) {
110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test6(
111*9880d681SAndroid Build Coastguard Worker; CHECK:         [[RES:%.*]] = icmp ule <4 x i1> %a, %b
112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret <4 x i1> [[RES]]
113*9880d681SAndroid Build Coastguard Worker;
114*9880d681SAndroid Build Coastguard Worker  %res = icmp ule <4 x i1> %a, %b
115*9880d681SAndroid Build Coastguard Worker  ret <4 x i1> %res
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker; i +_{nsw} 1 <s L  ==> i < L +_{nsw} 1
119*9880d681SAndroid Build Coastguard Workerdefine i1 @test7(i32 %length.i, i32 %i) {
120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test7(
121*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
122*9880d681SAndroid Build Coastguard Worker;
123*9880d681SAndroid Build Coastguard Worker  %iplus1 = add nsw i32 %i, 1
124*9880d681SAndroid Build Coastguard Worker  %len.plus.one = add nsw i32 %length.i, 1
125*9880d681SAndroid Build Coastguard Worker  %var29 = icmp slt i32 %i, %len.plus.one
126*9880d681SAndroid Build Coastguard Worker  %var30 = icmp slt i32 %iplus1, %length.i
127*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %var30, %var29
128*9880d681SAndroid Build Coastguard Worker  ret i1 %res
129*9880d681SAndroid Build Coastguard Worker}
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Worker; i +_{nuw} 1 <u L  ==> i < L +_{nuw} 1
132*9880d681SAndroid Build Coastguard Workerdefine i1 @test8(i32 %length.i, i32 %i) {
133*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test8(
134*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
135*9880d681SAndroid Build Coastguard Worker;
136*9880d681SAndroid Build Coastguard Worker  %iplus1 = add nuw i32 %i, 1
137*9880d681SAndroid Build Coastguard Worker  %len.plus.one = add nuw i32 %length.i, 1
138*9880d681SAndroid Build Coastguard Worker  %var29 = icmp ult i32 %i, %len.plus.one
139*9880d681SAndroid Build Coastguard Worker  %var30 = icmp ult i32 %iplus1, %length.i
140*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %var30, %var29
141*9880d681SAndroid Build Coastguard Worker  ret i1 %res
142*9880d681SAndroid Build Coastguard Worker}
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Worker; i +_{nuw} C <u L ==> i < L, even if C is negative
145*9880d681SAndroid Build Coastguard Workerdefine i1 @test9(i32 %length.i, i32 %i) {
146*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test9(
147*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
148*9880d681SAndroid Build Coastguard Worker;
149*9880d681SAndroid Build Coastguard Worker  %iplus1 = add nuw i32 %i, -100
150*9880d681SAndroid Build Coastguard Worker  %var29 = icmp ult i32 %i, %length.i
151*9880d681SAndroid Build Coastguard Worker  %var30 = icmp ult i32 %iplus1, %length.i
152*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %var30, %var29
153*9880d681SAndroid Build Coastguard Worker  ret i1 %res
154*9880d681SAndroid Build Coastguard Worker}
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerdefine i1 @test10(i32 %length.i, i32 %x.full) {
157*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10(
158*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
159*9880d681SAndroid Build Coastguard Worker;
160*9880d681SAndroid Build Coastguard Worker  %x = and i32 %x.full, 4294901760  ;; 4294901760 == 0xffff0000
161*9880d681SAndroid Build Coastguard Worker  %large = or i32 %x, 100
162*9880d681SAndroid Build Coastguard Worker  %small = or i32 %x, 90
163*9880d681SAndroid Build Coastguard Worker  %known = icmp ult i32 %large, %length.i
164*9880d681SAndroid Build Coastguard Worker  %to.prove = icmp ult i32 %small, %length.i
165*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %known, %to.prove
166*9880d681SAndroid Build Coastguard Worker  ret i1 %res
167*9880d681SAndroid Build Coastguard Worker}
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Workerdefine i1 @test11(i32 %length.i, i32 %x) {
170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test11(
171*9880d681SAndroid Build Coastguard Worker; CHECK:         [[LARGE:%.*]] = or i32 %x, 100
172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[SMALL:%.*]] = or i32 %x, 90
173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[KNOWN:%.*]] = icmp ult i32 [[LARGE]], %length.i
174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TO_PROVE:%.*]] = icmp ult i32 [[SMALL]], %length.i
175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[RES:%.*]] = icmp ule i1 [[KNOWN]], [[TO_PROVE]]
176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[RES]]
177*9880d681SAndroid Build Coastguard Worker;
178*9880d681SAndroid Build Coastguard Worker  %large = or i32 %x, 100
179*9880d681SAndroid Build Coastguard Worker  %small = or i32 %x, 90
180*9880d681SAndroid Build Coastguard Worker  %known = icmp ult i32 %large, %length.i
181*9880d681SAndroid Build Coastguard Worker  %to.prove = icmp ult i32 %small, %length.i
182*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %known, %to.prove
183*9880d681SAndroid Build Coastguard Worker  ret i1 %res
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerdefine i1 @test12(i32 %length.i, i32 %x.full) {
187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test12(
188*9880d681SAndroid Build Coastguard Worker; CHECK:         [[X:%.*]] = and i32 [[X:%.*]].full, -65536
189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[LARGE:%.*]] = or i32 [[X]], 65536
190*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[SMALL:%.*]] = or i32 [[X]], 90
191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[KNOWN:%.*]] = icmp ult i32 [[LARGE]], %length.i
192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TO_PROVE:%.*]] = icmp ult i32 [[SMALL]], %length.i
193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[RES:%.*]] = icmp ule i1 [[KNOWN]], [[TO_PROVE]]
194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[RES]]
195*9880d681SAndroid Build Coastguard Worker;
196*9880d681SAndroid Build Coastguard Worker  %x = and i32 %x.full, 4294901760  ;; 4294901760 == 0xffff0000
197*9880d681SAndroid Build Coastguard Worker  %large = or i32 %x, 65536 ;; 65536 == 0x00010000
198*9880d681SAndroid Build Coastguard Worker  %small = or i32 %x, 90
199*9880d681SAndroid Build Coastguard Worker  %known = icmp ult i32 %large, %length.i
200*9880d681SAndroid Build Coastguard Worker  %to.prove = icmp ult i32 %small, %length.i
201*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %known, %to.prove
202*9880d681SAndroid Build Coastguard Worker  ret i1 %res
203*9880d681SAndroid Build Coastguard Worker}
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Workerdefine i1 @test13(i32 %length.i, i32 %x) {
206*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test13(
207*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
208*9880d681SAndroid Build Coastguard Worker;
209*9880d681SAndroid Build Coastguard Worker  %large = add nuw i32 %x, 100
210*9880d681SAndroid Build Coastguard Worker  %small = add nuw i32 %x, 90
211*9880d681SAndroid Build Coastguard Worker  %known = icmp ult i32 %large, %length.i
212*9880d681SAndroid Build Coastguard Worker  %to.prove = icmp ult i32 %small, %length.i
213*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %known, %to.prove
214*9880d681SAndroid Build Coastguard Worker  ret i1 %res
215*9880d681SAndroid Build Coastguard Worker}
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Workerdefine i1 @test14(i32 %length.i, i32 %x.full) {
218*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test14(
219*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
220*9880d681SAndroid Build Coastguard Worker;
221*9880d681SAndroid Build Coastguard Worker  %x = and i32 %x.full, 4294905615  ;; 4294905615 == 0xffff0f0f
222*9880d681SAndroid Build Coastguard Worker  %large = or i32 %x, 8224 ;; == 0x2020
223*9880d681SAndroid Build Coastguard Worker  %small = or i32 %x, 4112 ;; == 0x1010
224*9880d681SAndroid Build Coastguard Worker  %known = icmp ult i32 %large, %length.i
225*9880d681SAndroid Build Coastguard Worker  %to.prove = icmp ult i32 %small, %length.i
226*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %known, %to.prove
227*9880d681SAndroid Build Coastguard Worker  ret i1 %res
228*9880d681SAndroid Build Coastguard Worker}
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Workerdefine i1 @test15(i32 %length.i, i32 %x) {
231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test15(
232*9880d681SAndroid Build Coastguard Worker; CHECK:         [[LARGE:%.*]] = add nuw i32 %x, 100
233*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[SMALL:%.*]] = add nuw i32 %x, 110
234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[KNOWN:%.*]] = icmp ult i32 [[LARGE]], %length.i
235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TO_PROVE:%.*]] = icmp ult i32 [[SMALL]], %length.i
236*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[RES:%.*]] = icmp ule i1 [[KNOWN]], [[TO_PROVE]]
237*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[RES]]
238*9880d681SAndroid Build Coastguard Worker;
239*9880d681SAndroid Build Coastguard Worker  %large = add nuw i32 %x, 100
240*9880d681SAndroid Build Coastguard Worker  %small = add nuw i32 %x, 110
241*9880d681SAndroid Build Coastguard Worker  %known = icmp ult i32 %large, %length.i
242*9880d681SAndroid Build Coastguard Worker  %to.prove = icmp ult i32 %small, %length.i
243*9880d681SAndroid Build Coastguard Worker  %res = icmp ule i1 %known, %to.prove
244*9880d681SAndroid Build Coastguard Worker  ret i1 %res
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker; X >=(s) Y == X ==> Y (i1 1 becomes -1 for reasoning)
248*9880d681SAndroid Build Coastguard Workerdefine i1 @test_sge(i32 %length.i, i32 %i) {
249*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_sge(
250*9880d681SAndroid Build Coastguard Worker; CHECK:         ret i1 true
251*9880d681SAndroid Build Coastguard Worker;
252*9880d681SAndroid Build Coastguard Worker  %iplus1 = add nsw nuw i32 %i, 1
253*9880d681SAndroid Build Coastguard Worker  %var29 = icmp ult i32 %i, %length.i
254*9880d681SAndroid Build Coastguard Worker  %var30 = icmp ult i32 %iplus1, %length.i
255*9880d681SAndroid Build Coastguard Worker  %res = icmp sge i1 %var30, %var29
256*9880d681SAndroid Build Coastguard Worker  ret i1 %res
257*9880d681SAndroid Build Coastguard Worker}
258