xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/and-mask-removal.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -O0 -fast-isel=false -mtriple=arm64-apple-darwin  < %s  | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@board = common global [400 x i8] zeroinitializer, align 1
4*9880d681SAndroid Build Coastguard Worker@next_string = common global i32 0, align 4
5*9880d681SAndroid Build Coastguard Worker@string_number = common global [400 x i32] zeroinitializer, align 4
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind ssp
8*9880d681SAndroid Build Coastguard Workerdefine void @new_position(i32 %pos) {
9*9880d681SAndroid Build Coastguard Workerentry:
10*9880d681SAndroid Build Coastguard Worker  %idxprom = sext i32 %pos to i64
11*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [400 x i8], [400 x i8]* @board, i64 0, i64 %idxprom
12*9880d681SAndroid Build Coastguard Worker  %tmp = load i8, i8* %arrayidx, align 1
13*9880d681SAndroid Build Coastguard Worker  %.off = add i8 %tmp, -1
14*9880d681SAndroid Build Coastguard Worker  %switch = icmp ult i8 %.off, 2
15*9880d681SAndroid Build Coastguard Worker  br i1 %switch, label %if.then, label %if.end
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry
18*9880d681SAndroid Build Coastguard Worker  %tmp1 = load i32, i32* @next_string, align 4
19*9880d681SAndroid Build Coastguard Worker  %arrayidx8 = getelementptr inbounds [400 x i32], [400 x i32]* @string_number, i64 0, i64 %idxprom
20*9880d681SAndroid Build Coastguard Worker  store i32 %tmp1, i32* %arrayidx8, align 4
21*9880d681SAndroid Build Coastguard Worker  br label %if.end
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.then, %entry
24*9880d681SAndroid Build Coastguard Worker  ret void
25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: new_position
26*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
27*9880d681SAndroid Build Coastguard Worker; CHECK: ret
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test8_0(i8 zeroext %x)  align 2 {
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker  %0 = add i8 %x, 74
33*9880d681SAndroid Build Coastguard Worker  %1 = icmp ult i8 %0, -20
34*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
35*9880d681SAndroid Build Coastguard Workerret_false:
36*9880d681SAndroid Build Coastguard Worker  ret i1 false
37*9880d681SAndroid Build Coastguard Workerret_true:
38*9880d681SAndroid Build Coastguard Worker  ret i1 true
39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8_0
40*9880d681SAndroid Build Coastguard Worker; CHECK: and
41*9880d681SAndroid Build Coastguard Worker; CHECK: ret
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test8_1(i8 zeroext %x)  align 2 {
45*9880d681SAndroid Build Coastguard Workerentry:
46*9880d681SAndroid Build Coastguard Worker  %0 = add i8 %x, 246
47*9880d681SAndroid Build Coastguard Worker  %1 = icmp uge i8 %0, 90
48*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
49*9880d681SAndroid Build Coastguard Workerret_false:
50*9880d681SAndroid Build Coastguard Worker  ret i1 false
51*9880d681SAndroid Build Coastguard Workerret_true:
52*9880d681SAndroid Build Coastguard Worker  ret i1 true
53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8_1
54*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
55*9880d681SAndroid Build Coastguard Worker; CHECK: ret
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test8_2(i8 zeroext %x)  align 2 {
59*9880d681SAndroid Build Coastguard Workerentry:
60*9880d681SAndroid Build Coastguard Worker  %0 = add i8 %x, 227
61*9880d681SAndroid Build Coastguard Worker  %1 = icmp ne i8 %0, 179
62*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
63*9880d681SAndroid Build Coastguard Workerret_false:
64*9880d681SAndroid Build Coastguard Worker  ret i1 false
65*9880d681SAndroid Build Coastguard Workerret_true:
66*9880d681SAndroid Build Coastguard Worker  ret i1 true
67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8_2
68*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
69*9880d681SAndroid Build Coastguard Worker; CHECK: ret
70*9880d681SAndroid Build Coastguard Worker}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test8_3(i8 zeroext %x)  align 2 {
73*9880d681SAndroid Build Coastguard Workerentry:
74*9880d681SAndroid Build Coastguard Worker  %0 = add i8 %x, 201
75*9880d681SAndroid Build Coastguard Worker  %1 = icmp eq i8 %0, 154
76*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
77*9880d681SAndroid Build Coastguard Workerret_false:
78*9880d681SAndroid Build Coastguard Worker  ret i1 false
79*9880d681SAndroid Build Coastguard Workerret_true:
80*9880d681SAndroid Build Coastguard Worker  ret i1 true
81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8_3
82*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
83*9880d681SAndroid Build Coastguard Worker; CHECK: ret
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test8_4(i8 zeroext %x)  align 2 {
87*9880d681SAndroid Build Coastguard Workerentry:
88*9880d681SAndroid Build Coastguard Worker  %0 = add i8 %x, -79
89*9880d681SAndroid Build Coastguard Worker  %1 = icmp ne i8 %0, -40
90*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
91*9880d681SAndroid Build Coastguard Workerret_false:
92*9880d681SAndroid Build Coastguard Worker  ret i1 false
93*9880d681SAndroid Build Coastguard Workerret_true:
94*9880d681SAndroid Build Coastguard Worker  ret i1 true
95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8_4
96*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
97*9880d681SAndroid Build Coastguard Worker; CHECK: ret
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test8_5(i8 zeroext %x)  align 2 {
101*9880d681SAndroid Build Coastguard Workerentry:
102*9880d681SAndroid Build Coastguard Worker  %0 = add i8 %x, 133
103*9880d681SAndroid Build Coastguard Worker  %1 = icmp uge i8 %0, -105
104*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
105*9880d681SAndroid Build Coastguard Workerret_false:
106*9880d681SAndroid Build Coastguard Worker  ret i1 false
107*9880d681SAndroid Build Coastguard Workerret_true:
108*9880d681SAndroid Build Coastguard Worker  ret i1 true
109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8_5
110*9880d681SAndroid Build Coastguard Worker; CHECK: and
111*9880d681SAndroid Build Coastguard Worker; CHECK: ret
112*9880d681SAndroid Build Coastguard Worker}
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test8_6(i8 zeroext %x)  align 2 {
115*9880d681SAndroid Build Coastguard Workerentry:
116*9880d681SAndroid Build Coastguard Worker  %0 = add i8 %x, -58
117*9880d681SAndroid Build Coastguard Worker  %1 = icmp uge i8 %0, 155
118*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
119*9880d681SAndroid Build Coastguard Workerret_false:
120*9880d681SAndroid Build Coastguard Worker  ret i1 false
121*9880d681SAndroid Build Coastguard Workerret_true:
122*9880d681SAndroid Build Coastguard Worker  ret i1 true
123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8_6
124*9880d681SAndroid Build Coastguard Worker; CHECK: and
125*9880d681SAndroid Build Coastguard Worker; CHECK: ret
126*9880d681SAndroid Build Coastguard Worker}
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test8_7(i8 zeroext %x)  align 2 {
129*9880d681SAndroid Build Coastguard Workerentry:
130*9880d681SAndroid Build Coastguard Worker  %0 = add i8 %x, 225
131*9880d681SAndroid Build Coastguard Worker  %1 = icmp ult i8 %0, 124
132*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
133*9880d681SAndroid Build Coastguard Workerret_false:
134*9880d681SAndroid Build Coastguard Worker  ret i1 false
135*9880d681SAndroid Build Coastguard Workerret_true:
136*9880d681SAndroid Build Coastguard Worker  ret i1 true
137*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8_7
138*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
139*9880d681SAndroid Build Coastguard Worker; CHECK: ret
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test8_8(i8 zeroext %x)  align 2 {
145*9880d681SAndroid Build Coastguard Workerentry:
146*9880d681SAndroid Build Coastguard Worker  %0 = add i8 %x, 190
147*9880d681SAndroid Build Coastguard Worker  %1 = icmp uge i8 %0, 1
148*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
149*9880d681SAndroid Build Coastguard Workerret_false:
150*9880d681SAndroid Build Coastguard Worker  ret i1 false
151*9880d681SAndroid Build Coastguard Workerret_true:
152*9880d681SAndroid Build Coastguard Worker  ret i1 true
153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8_8
154*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
155*9880d681SAndroid Build Coastguard Worker; CHECK: ret
156*9880d681SAndroid Build Coastguard Worker}
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test16_0(i16 zeroext %x)  align 2 {
159*9880d681SAndroid Build Coastguard Workerentry:
160*9880d681SAndroid Build Coastguard Worker  %0 = add i16 %x, -46989
161*9880d681SAndroid Build Coastguard Worker  %1 = icmp ne i16 %0, -41903
162*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
163*9880d681SAndroid Build Coastguard Workerret_false:
164*9880d681SAndroid Build Coastguard Worker  ret i1 false
165*9880d681SAndroid Build Coastguard Workerret_true:
166*9880d681SAndroid Build Coastguard Worker  ret i1 true
167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test16_0
168*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
169*9880d681SAndroid Build Coastguard Worker; CHECK: ret
170*9880d681SAndroid Build Coastguard Worker}
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test16_2(i16 zeroext %x)  align 2 {
173*9880d681SAndroid Build Coastguard Workerentry:
174*9880d681SAndroid Build Coastguard Worker  %0 = add i16 %x, 16882
175*9880d681SAndroid Build Coastguard Worker  %1 = icmp ule i16 %0, -24837
176*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
177*9880d681SAndroid Build Coastguard Workerret_false:
178*9880d681SAndroid Build Coastguard Worker  ret i1 false
179*9880d681SAndroid Build Coastguard Workerret_true:
180*9880d681SAndroid Build Coastguard Worker  ret i1 true
181*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test16_2
182*9880d681SAndroid Build Coastguard Worker; CHECK: and
183*9880d681SAndroid Build Coastguard Worker; CHECK: ret
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test16_3(i16 zeroext %x)  align 2 {
187*9880d681SAndroid Build Coastguard Workerentry:
188*9880d681SAndroid Build Coastguard Worker  %0 = add i16 %x, 29283
189*9880d681SAndroid Build Coastguard Worker  %1 = icmp ne i16 %0, 16947
190*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
191*9880d681SAndroid Build Coastguard Workerret_false:
192*9880d681SAndroid Build Coastguard Worker  ret i1 false
193*9880d681SAndroid Build Coastguard Workerret_true:
194*9880d681SAndroid Build Coastguard Worker  ret i1 true
195*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test16_3
196*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
197*9880d681SAndroid Build Coastguard Worker; CHECK: ret
198*9880d681SAndroid Build Coastguard Worker}
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test16_4(i16 zeroext %x)  align 2 {
201*9880d681SAndroid Build Coastguard Workerentry:
202*9880d681SAndroid Build Coastguard Worker  %0 = add i16 %x, -35551
203*9880d681SAndroid Build Coastguard Worker  %1 = icmp uge i16 %0, 15677
204*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
205*9880d681SAndroid Build Coastguard Workerret_false:
206*9880d681SAndroid Build Coastguard Worker  ret i1 false
207*9880d681SAndroid Build Coastguard Workerret_true:
208*9880d681SAndroid Build Coastguard Worker  ret i1 true
209*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test16_4
210*9880d681SAndroid Build Coastguard Worker; CHECK: and
211*9880d681SAndroid Build Coastguard Worker; CHECK: ret
212*9880d681SAndroid Build Coastguard Worker}
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test16_5(i16 zeroext %x)  align 2 {
215*9880d681SAndroid Build Coastguard Workerentry:
216*9880d681SAndroid Build Coastguard Worker  %0 = add i16 %x, -25214
217*9880d681SAndroid Build Coastguard Worker  %1 = icmp ne i16 %0, -1932
218*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
219*9880d681SAndroid Build Coastguard Workerret_false:
220*9880d681SAndroid Build Coastguard Worker  ret i1 false
221*9880d681SAndroid Build Coastguard Workerret_true:
222*9880d681SAndroid Build Coastguard Worker  ret i1 true
223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test16_5
224*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
225*9880d681SAndroid Build Coastguard Worker; CHECK: ret
226*9880d681SAndroid Build Coastguard Worker}
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test16_6(i16 zeroext %x)  align 2 {
229*9880d681SAndroid Build Coastguard Workerentry:
230*9880d681SAndroid Build Coastguard Worker  %0 = add i16 %x, -32194
231*9880d681SAndroid Build Coastguard Worker  %1 = icmp uge i16 %0, -41215
232*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
233*9880d681SAndroid Build Coastguard Workerret_false:
234*9880d681SAndroid Build Coastguard Worker  ret i1 false
235*9880d681SAndroid Build Coastguard Workerret_true:
236*9880d681SAndroid Build Coastguard Worker  ret i1 true
237*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test16_6
238*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
239*9880d681SAndroid Build Coastguard Worker; CHECK: ret
240*9880d681SAndroid Build Coastguard Worker}
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test16_7(i16 zeroext %x)  align 2 {
243*9880d681SAndroid Build Coastguard Workerentry:
244*9880d681SAndroid Build Coastguard Worker  %0 = add i16 %x, 9272
245*9880d681SAndroid Build Coastguard Worker  %1 = icmp uge i16 %0, -42916
246*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
247*9880d681SAndroid Build Coastguard Workerret_false:
248*9880d681SAndroid Build Coastguard Worker  ret i1 false
249*9880d681SAndroid Build Coastguard Workerret_true:
250*9880d681SAndroid Build Coastguard Worker  ret i1 true
251*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test16_7
252*9880d681SAndroid Build Coastguard Worker; CHECK: and
253*9880d681SAndroid Build Coastguard Worker; CHECK: ret
254*9880d681SAndroid Build Coastguard Worker}
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test16_8(i16 zeroext %x)  align 2 {
257*9880d681SAndroid Build Coastguard Workerentry:
258*9880d681SAndroid Build Coastguard Worker  %0 = add i16 %x, -63749
259*9880d681SAndroid Build Coastguard Worker  %1 = icmp ne i16 %0, 6706
260*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %ret_true, label %ret_false
261*9880d681SAndroid Build Coastguard Workerret_false:
262*9880d681SAndroid Build Coastguard Worker  ret i1 false
263*9880d681SAndroid Build Coastguard Workerret_true:
264*9880d681SAndroid Build Coastguard Worker  ret i1 true
265*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test16_8
266*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
267*9880d681SAndroid Build Coastguard Worker; CHECK: ret
268*9880d681SAndroid Build Coastguard Worker}
269*9880d681SAndroid Build Coastguard Worker
270