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