[Frontend] Remove unused includes (NFC) (#116927)
[llvm-project.git] / llvm / test / CodeGen / X86 / isel-and.ll
blob8db8060a0b9c713ccebd29e0d08890484546f002
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-- | FileCheck %s --check-prefixes=X86,SDAG-X86
3 ; RUN: llc < %s -mtriple=i686-- -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X86,FASTISEL-X86
4 ; RUN: llc < %s -mtriple=i686-- -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=X86,GISEL-X86
5 ; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefixes=X64,SDAG-X64
6 ; RUN: llc < %s -mtriple=x86_64-- -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X64,FASTISEL-X64
7 ; RUN: llc < %s -mtriple=x86_64-- -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=X64,GISEL-X64
9 define i1 @and_i1(i1 %a, i1 %b) {
10 ; SDAG-X86-LABEL: and_i1:
11 ; SDAG-X86:       # %bb.0:
12 ; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
13 ; SDAG-X86-NEXT:    andb {{[0-9]+}}(%esp), %al
14 ; SDAG-X86-NEXT:    retl
16 ; FASTISEL-X86-LABEL: and_i1:
17 ; FASTISEL-X86:       # %bb.0:
18 ; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
19 ; FASTISEL-X86-NEXT:    andb {{[0-9]+}}(%esp), %al
20 ; FASTISEL-X86-NEXT:    retl
22 ; GISEL-X86-LABEL: and_i1:
23 ; GISEL-X86:       # %bb.0:
24 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
25 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
26 ; GISEL-X86-NEXT:    andb %cl, %al
27 ; GISEL-X86-NEXT:    # kill: def $al killed $al killed $eax
28 ; GISEL-X86-NEXT:    retl
30 ; SDAG-X64-LABEL: and_i1:
31 ; SDAG-X64:       # %bb.0:
32 ; SDAG-X64-NEXT:    movl %edi, %eax
33 ; SDAG-X64-NEXT:    andl %esi, %eax
34 ; SDAG-X64-NEXT:    # kill: def $al killed $al killed $eax
35 ; SDAG-X64-NEXT:    retq
37 ; FASTISEL-X64-LABEL: and_i1:
38 ; FASTISEL-X64:       # %bb.0:
39 ; FASTISEL-X64-NEXT:    movl %edi, %eax
40 ; FASTISEL-X64-NEXT:    andb %sil, %al
41 ; FASTISEL-X64-NEXT:    # kill: def $al killed $al killed $eax
42 ; FASTISEL-X64-NEXT:    retq
44 ; GISEL-X64-LABEL: and_i1:
45 ; GISEL-X64:       # %bb.0:
46 ; GISEL-X64-NEXT:    movl %esi, %eax
47 ; GISEL-X64-NEXT:    andb %dil, %al
48 ; GISEL-X64-NEXT:    # kill: def $al killed $al killed $eax
49 ; GISEL-X64-NEXT:    retq
50   %c = and i1 %a, %b
51   ret i1 %c
53 define i8 @and_i8(i8 %a, i8 %b) {
54 ; SDAG-X86-LABEL: and_i8:
55 ; SDAG-X86:       # %bb.0:
56 ; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
57 ; SDAG-X86-NEXT:    andb {{[0-9]+}}(%esp), %al
58 ; SDAG-X86-NEXT:    retl
60 ; FASTISEL-X86-LABEL: and_i8:
61 ; FASTISEL-X86:       # %bb.0:
62 ; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
63 ; FASTISEL-X86-NEXT:    andb {{[0-9]+}}(%esp), %al
64 ; FASTISEL-X86-NEXT:    retl
66 ; GISEL-X86-LABEL: and_i8:
67 ; GISEL-X86:       # %bb.0:
68 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
69 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
70 ; GISEL-X86-NEXT:    andb %cl, %al
71 ; GISEL-X86-NEXT:    # kill: def $al killed $al killed $eax
72 ; GISEL-X86-NEXT:    retl
74 ; SDAG-X64-LABEL: and_i8:
75 ; SDAG-X64:       # %bb.0:
76 ; SDAG-X64-NEXT:    movl %edi, %eax
77 ; SDAG-X64-NEXT:    andl %esi, %eax
78 ; SDAG-X64-NEXT:    # kill: def $al killed $al killed $eax
79 ; SDAG-X64-NEXT:    retq
81 ; FASTISEL-X64-LABEL: and_i8:
82 ; FASTISEL-X64:       # %bb.0:
83 ; FASTISEL-X64-NEXT:    movl %edi, %eax
84 ; FASTISEL-X64-NEXT:    andb %sil, %al
85 ; FASTISEL-X64-NEXT:    # kill: def $al killed $al killed $eax
86 ; FASTISEL-X64-NEXT:    retq
88 ; GISEL-X64-LABEL: and_i8:
89 ; GISEL-X64:       # %bb.0:
90 ; GISEL-X64-NEXT:    movl %esi, %eax
91 ; GISEL-X64-NEXT:    andb %dil, %al
92 ; GISEL-X64-NEXT:    # kill: def $al killed $al killed $eax
93 ; GISEL-X64-NEXT:    retq
94   %c = and i8 %a, %b
95   ret i8 %c
98 define i16 @and_i16(i16 %a, i16 %b) {
99 ; SDAG-X86-LABEL: and_i16:
100 ; SDAG-X86:       # %bb.0:
101 ; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
102 ; SDAG-X86-NEXT:    andw {{[0-9]+}}(%esp), %ax
103 ; SDAG-X86-NEXT:    retl
105 ; FASTISEL-X86-LABEL: and_i16:
106 ; FASTISEL-X86:       # %bb.0:
107 ; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
108 ; FASTISEL-X86-NEXT:    andw {{[0-9]+}}(%esp), %ax
109 ; FASTISEL-X86-NEXT:    retl
111 ; GISEL-X86-LABEL: and_i16:
112 ; GISEL-X86:       # %bb.0:
113 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
114 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
115 ; GISEL-X86-NEXT:    andw %cx, %ax
116 ; GISEL-X86-NEXT:    # kill: def $ax killed $ax killed $eax
117 ; GISEL-X86-NEXT:    retl
119 ; SDAG-X64-LABEL: and_i16:
120 ; SDAG-X64:       # %bb.0:
121 ; SDAG-X64-NEXT:    movl %edi, %eax
122 ; SDAG-X64-NEXT:    andl %esi, %eax
123 ; SDAG-X64-NEXT:    # kill: def $ax killed $ax killed $eax
124 ; SDAG-X64-NEXT:    retq
126 ; FASTISEL-X64-LABEL: and_i16:
127 ; FASTISEL-X64:       # %bb.0:
128 ; FASTISEL-X64-NEXT:    movl %edi, %eax
129 ; FASTISEL-X64-NEXT:    andw %si, %ax
130 ; FASTISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
131 ; FASTISEL-X64-NEXT:    retq
133 ; GISEL-X64-LABEL: and_i16:
134 ; GISEL-X64:       # %bb.0:
135 ; GISEL-X64-NEXT:    movl %esi, %eax
136 ; GISEL-X64-NEXT:    andw %di, %ax
137 ; GISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
138 ; GISEL-X64-NEXT:    retq
139   %c = and i16 %a, %b
140   ret i16 %c
143 define i32 @and_i32(i32 %a, i32 %b) {
144 ; X86-LABEL: and_i32:
145 ; X86:       # %bb.0:
146 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
147 ; X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
148 ; X86-NEXT:    retl
150 ; SDAG-X64-LABEL: and_i32:
151 ; SDAG-X64:       # %bb.0:
152 ; SDAG-X64-NEXT:    movl %edi, %eax
153 ; SDAG-X64-NEXT:    andl %esi, %eax
154 ; SDAG-X64-NEXT:    retq
156 ; FASTISEL-X64-LABEL: and_i32:
157 ; FASTISEL-X64:       # %bb.0:
158 ; FASTISEL-X64-NEXT:    movl %edi, %eax
159 ; FASTISEL-X64-NEXT:    andl %esi, %eax
160 ; FASTISEL-X64-NEXT:    retq
162 ; GISEL-X64-LABEL: and_i32:
163 ; GISEL-X64:       # %bb.0:
164 ; GISEL-X64-NEXT:    movl %esi, %eax
165 ; GISEL-X64-NEXT:    andl %edi, %eax
166 ; GISEL-X64-NEXT:    retq
167   %c = and i32 %a, %b
168   ret i32 %c
171 define i64 @and_i64(i64 %a, i64 %b) nounwind {
172 ; SDAG-X86-LABEL: and_i64:
173 ; SDAG-X86:       # %bb.0:
174 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
175 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
176 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
177 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %edx
178 ; SDAG-X86-NEXT:    retl
180 ; FASTISEL-X86-LABEL: and_i64:
181 ; FASTISEL-X86:       # %bb.0:
182 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
183 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
184 ; FASTISEL-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
185 ; FASTISEL-X86-NEXT:    andl {{[0-9]+}}(%esp), %edx
186 ; FASTISEL-X86-NEXT:    retl
188 ; GISEL-X86-LABEL: and_i64:
189 ; GISEL-X86:       # %bb.0:
190 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
191 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
192 ; GISEL-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
193 ; GISEL-X86-NEXT:    andl {{[0-9]+}}(%esp), %edx
194 ; GISEL-X86-NEXT:    retl
196 ; SDAG-X64-LABEL: and_i64:
197 ; SDAG-X64:       # %bb.0:
198 ; SDAG-X64-NEXT:    movq %rdi, %rax
199 ; SDAG-X64-NEXT:    andq %rsi, %rax
200 ; SDAG-X64-NEXT:    retq
202 ; FASTISEL-X64-LABEL: and_i64:
203 ; FASTISEL-X64:       # %bb.0:
204 ; FASTISEL-X64-NEXT:    movq %rdi, %rax
205 ; FASTISEL-X64-NEXT:    andq %rsi, %rax
206 ; FASTISEL-X64-NEXT:    retq
208 ; GISEL-X64-LABEL: and_i64:
209 ; GISEL-X64:       # %bb.0:
210 ; GISEL-X64-NEXT:    movq %rsi, %rax
211 ; GISEL-X64-NEXT:    andq %rdi, %rax
212 ; GISEL-X64-NEXT:    retq
213   %c = and i64 %a, %b
214   ret i64 %c
217 define i8 @and_imm8_i8(i8 %a) {
218 ; SDAG-X86-LABEL: and_imm8_i8:
219 ; SDAG-X86:       # %bb.0:
220 ; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
221 ; SDAG-X86-NEXT:    andb $1, %al
222 ; SDAG-X86-NEXT:    retl
224 ; FASTISEL-X86-LABEL: and_imm8_i8:
225 ; FASTISEL-X86:       # %bb.0:
226 ; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
227 ; FASTISEL-X86-NEXT:    andb $1, %al
228 ; FASTISEL-X86-NEXT:    retl
230 ; GISEL-X86-LABEL: and_imm8_i8:
231 ; GISEL-X86:       # %bb.0:
232 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
233 ; GISEL-X86-NEXT:    andb $1, %al
234 ; GISEL-X86-NEXT:    # kill: def $al killed $al killed $eax
235 ; GISEL-X86-NEXT:    retl
237 ; X64-LABEL: and_imm8_i8:
238 ; X64:       # %bb.0:
239 ; X64-NEXT:    movl %edi, %eax
240 ; X64-NEXT:    andb $1, %al
241 ; X64-NEXT:    # kill: def $al killed $al killed $eax
242 ; X64-NEXT:    retq
243   %c = and i8 %a, 1
244   ret i8 %c
247 define i16 @and_imm8_i16(i16 %a) {
248 ; SDAG-X86-LABEL: and_imm8_i16:
249 ; SDAG-X86:       # %bb.0:
250 ; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
251 ; SDAG-X86-NEXT:    andl $6, %eax
252 ; SDAG-X86-NEXT:    # kill: def $ax killed $ax killed $eax
253 ; SDAG-X86-NEXT:    retl
255 ; FASTISEL-X86-LABEL: and_imm8_i16:
256 ; FASTISEL-X86:       # %bb.0:
257 ; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
258 ; FASTISEL-X86-NEXT:    andw $6, %ax
259 ; FASTISEL-X86-NEXT:    retl
261 ; GISEL-X86-LABEL: and_imm8_i16:
262 ; GISEL-X86:       # %bb.0:
263 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
264 ; GISEL-X86-NEXT:    andw $6, %ax
265 ; GISEL-X86-NEXT:    # kill: def $ax killed $ax killed $eax
266 ; GISEL-X86-NEXT:    retl
268 ; SDAG-X64-LABEL: and_imm8_i16:
269 ; SDAG-X64:       # %bb.0:
270 ; SDAG-X64-NEXT:    movl %edi, %eax
271 ; SDAG-X64-NEXT:    andl $6, %eax
272 ; SDAG-X64-NEXT:    # kill: def $ax killed $ax killed $eax
273 ; SDAG-X64-NEXT:    retq
275 ; FASTISEL-X64-LABEL: and_imm8_i16:
276 ; FASTISEL-X64:       # %bb.0:
277 ; FASTISEL-X64-NEXT:    movl %edi, %eax
278 ; FASTISEL-X64-NEXT:    andw $6, %ax
279 ; FASTISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
280 ; FASTISEL-X64-NEXT:    retq
282 ; GISEL-X64-LABEL: and_imm8_i16:
283 ; GISEL-X64:       # %bb.0:
284 ; GISEL-X64-NEXT:    movl %edi, %eax
285 ; GISEL-X64-NEXT:    andw $6, %ax
286 ; GISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
287 ; GISEL-X64-NEXT:    retq
288   %c = and i16 %a, 6
289   ret i16 %c
292 define i32 @and_imm8_i32(i32 %a) {
293 ; X86-LABEL: and_imm8_i32:
294 ; X86:       # %bb.0:
295 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
296 ; X86-NEXT:    andl $-5, %eax
297 ; X86-NEXT:    retl
299 ; X64-LABEL: and_imm8_i32:
300 ; X64:       # %bb.0:
301 ; X64-NEXT:    movl %edi, %eax
302 ; X64-NEXT:    andl $-5, %eax
303 ; X64-NEXT:    retq
304   %c = and i32 %a, -5
305   ret i32 %c
308 define i64 @and_imm8_i64(i64 %a) {
309 ; SDAG-X86-LABEL: and_imm8_i64:
310 ; SDAG-X86:       # %bb.0:
311 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
312 ; SDAG-X86-NEXT:    andl $1, %eax
313 ; SDAG-X86-NEXT:    xorl %edx, %edx
314 ; SDAG-X86-NEXT:    retl
316 ; FASTISEL-X86-LABEL: and_imm8_i64:
317 ; FASTISEL-X86:       # %bb.0:
318 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
319 ; FASTISEL-X86-NEXT:    andl $1, %eax
320 ; FASTISEL-X86-NEXT:    xorl %edx, %edx
321 ; FASTISEL-X86-NEXT:    retl
323 ; GISEL-X86-LABEL: and_imm8_i64:
324 ; GISEL-X86:       # %bb.0:
325 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
326 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
327 ; GISEL-X86-NEXT:    andl $1, %eax
328 ; GISEL-X86-NEXT:    andl $0, %edx
329 ; GISEL-X86-NEXT:    retl
331 ; SDAG-X64-LABEL: and_imm8_i64:
332 ; SDAG-X64:       # %bb.0:
333 ; SDAG-X64-NEXT:    movq %rdi, %rax
334 ; SDAG-X64-NEXT:    andl $1, %eax
335 ; SDAG-X64-NEXT:    retq
337 ; FASTISEL-X64-LABEL: and_imm8_i64:
338 ; FASTISEL-X64:       # %bb.0:
339 ; FASTISEL-X64-NEXT:    movq %rdi, %rax
340 ; FASTISEL-X64-NEXT:    andq $1, %rax
341 ; FASTISEL-X64-NEXT:    retq
343 ; GISEL-X64-LABEL: and_imm8_i64:
344 ; GISEL-X64:       # %bb.0:
345 ; GISEL-X64-NEXT:    movq %rdi, %rax
346 ; GISEL-X64-NEXT:    andq $1, %rax
347 ; GISEL-X64-NEXT:    retq
348   %c = and i64 %a, 1
349   ret i64 %c
352 define i16 @and_imm16_i16(i16 %a) {
353 ; SDAG-X86-LABEL: and_imm16_i16:
354 ; SDAG-X86:       # %bb.0:
355 ; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
356 ; SDAG-X86-NEXT:    andl $1023, %eax # imm = 0x3FF
357 ; SDAG-X86-NEXT:    # kill: def $ax killed $ax killed $eax
358 ; SDAG-X86-NEXT:    retl
360 ; FASTISEL-X86-LABEL: and_imm16_i16:
361 ; FASTISEL-X86:       # %bb.0:
362 ; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
363 ; FASTISEL-X86-NEXT:    andw $1023, %ax # imm = 0x3FF
364 ; FASTISEL-X86-NEXT:    retl
366 ; GISEL-X86-LABEL: and_imm16_i16:
367 ; GISEL-X86:       # %bb.0:
368 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
369 ; GISEL-X86-NEXT:    andw $1023, %ax # imm = 0x3FF
370 ; GISEL-X86-NEXT:    # kill: def $ax killed $ax killed $eax
371 ; GISEL-X86-NEXT:    retl
373 ; SDAG-X64-LABEL: and_imm16_i16:
374 ; SDAG-X64:       # %bb.0:
375 ; SDAG-X64-NEXT:    movl %edi, %eax
376 ; SDAG-X64-NEXT:    andl $1023, %eax # imm = 0x3FF
377 ; SDAG-X64-NEXT:    # kill: def $ax killed $ax killed $eax
378 ; SDAG-X64-NEXT:    retq
380 ; FASTISEL-X64-LABEL: and_imm16_i16:
381 ; FASTISEL-X64:       # %bb.0:
382 ; FASTISEL-X64-NEXT:    movl %edi, %eax
383 ; FASTISEL-X64-NEXT:    andw $1023, %ax # imm = 0x3FF
384 ; FASTISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
385 ; FASTISEL-X64-NEXT:    retq
387 ; GISEL-X64-LABEL: and_imm16_i16:
388 ; GISEL-X64:       # %bb.0:
389 ; GISEL-X64-NEXT:    movl %edi, %eax
390 ; GISEL-X64-NEXT:    andw $1023, %ax # imm = 0x3FF
391 ; GISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
392 ; GISEL-X64-NEXT:    retq
393   %c = and i16 %a, 1023
394   ret i16 %c
397 define i32 @and_imm16_i32(i32 %a) {
398 ; SDAG-X86-LABEL: and_imm16_i32:
399 ; SDAG-X86:       # %bb.0:
400 ; SDAG-X86-NEXT:    movl $2044, %eax # imm = 0x7FC
401 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
402 ; SDAG-X86-NEXT:    retl
404 ; FASTISEL-X86-LABEL: and_imm16_i32:
405 ; FASTISEL-X86:       # %bb.0:
406 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
407 ; FASTISEL-X86-NEXT:    andl $2044, %eax # imm = 0x7FC
408 ; FASTISEL-X86-NEXT:    retl
410 ; GISEL-X86-LABEL: and_imm16_i32:
411 ; GISEL-X86:       # %bb.0:
412 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
413 ; GISEL-X86-NEXT:    andl $2044, %eax # imm = 0x7FC
414 ; GISEL-X86-NEXT:    retl
416 ; X64-LABEL: and_imm16_i32:
417 ; X64:       # %bb.0:
418 ; X64-NEXT:    movl %edi, %eax
419 ; X64-NEXT:    andl $2044, %eax # imm = 0x7FC
420 ; X64-NEXT:    retq
421   %c = and i32 %a, 2044
422   ret i32 %c
425 define i64 @and_imm16_i64(i64 %a) {
426 ; SDAG-X86-LABEL: and_imm16_i64:
427 ; SDAG-X86:       # %bb.0:
428 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
429 ; SDAG-X86-NEXT:    movl $-5022, %eax # imm = 0xEC62
430 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
431 ; SDAG-X86-NEXT:    retl
433 ; FASTISEL-X86-LABEL: and_imm16_i64:
434 ; FASTISEL-X86:       # %bb.0:
435 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
436 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
437 ; FASTISEL-X86-NEXT:    andl $-5022, %eax # imm = 0xEC62
438 ; FASTISEL-X86-NEXT:    retl
440 ; GISEL-X86-LABEL: and_imm16_i64:
441 ; GISEL-X86:       # %bb.0:
442 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
443 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
444 ; GISEL-X86-NEXT:    andl $-5022, %eax # imm = 0xEC62
445 ; GISEL-X86-NEXT:    andl $-1, %edx
446 ; GISEL-X86-NEXT:    retl
448 ; X64-LABEL: and_imm16_i64:
449 ; X64:       # %bb.0:
450 ; X64-NEXT:    movq %rdi, %rax
451 ; X64-NEXT:    andq $-5022, %rax # imm = 0xEC62
452 ; X64-NEXT:    retq
453   %c = and i64 %a, -5022
454   ret i64 %c
457 define i32 @and_imm32_i32(i32 %a) {
458 ; SDAG-X86-LABEL: and_imm32_i32:
459 ; SDAG-X86:       # %bb.0:
460 ; SDAG-X86-NEXT:    movl $85538, %eax # imm = 0x14E22
461 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
462 ; SDAG-X86-NEXT:    retl
464 ; FASTISEL-X86-LABEL: and_imm32_i32:
465 ; FASTISEL-X86:       # %bb.0:
466 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
467 ; FASTISEL-X86-NEXT:    andl $85538, %eax # imm = 0x14E22
468 ; FASTISEL-X86-NEXT:    retl
470 ; GISEL-X86-LABEL: and_imm32_i32:
471 ; GISEL-X86:       # %bb.0:
472 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
473 ; GISEL-X86-NEXT:    andl $85538, %eax # imm = 0x14E22
474 ; GISEL-X86-NEXT:    retl
476 ; X64-LABEL: and_imm32_i32:
477 ; X64:       # %bb.0:
478 ; X64-NEXT:    movl %edi, %eax
479 ; X64-NEXT:    andl $85538, %eax # imm = 0x14E22
480 ; X64-NEXT:    retq
481   %c = and i32 %a, 85538
482   ret i32 %c
485 define i64 @and_imm32_i64(i64 %a) {
486 ; SDAG-X86-LABEL: and_imm32_i64:
487 ; SDAG-X86:       # %bb.0:
488 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
489 ; SDAG-X86-NEXT:    movl $-125778, %eax # imm = 0xFFFE14AE
490 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
491 ; SDAG-X86-NEXT:    retl
493 ; FASTISEL-X86-LABEL: and_imm32_i64:
494 ; FASTISEL-X86:       # %bb.0:
495 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
496 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
497 ; FASTISEL-X86-NEXT:    andl $-125778, %eax # imm = 0xFFFE14AE
498 ; FASTISEL-X86-NEXT:    retl
500 ; GISEL-X86-LABEL: and_imm32_i64:
501 ; GISEL-X86:       # %bb.0:
502 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
503 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
504 ; GISEL-X86-NEXT:    andl $-125778, %eax # imm = 0xFFFE14AE
505 ; GISEL-X86-NEXT:    andl $-1, %edx
506 ; GISEL-X86-NEXT:    retl
508 ; X64-LABEL: and_imm32_i64:
509 ; X64:       # %bb.0:
510 ; X64-NEXT:    movq %rdi, %rax
511 ; X64-NEXT:    andq $-125778, %rax # imm = 0xFFFE14AE
512 ; X64-NEXT:    retq
513   %c = and i64 %a, -125778
514   ret i64 %c
517 define i64 @and_imm64_i64(i64 %a) {
518 ; SDAG-X86-LABEL: and_imm64_i64:
519 ; SDAG-X86:       # %bb.0:
520 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
521 ; SDAG-X86-NEXT:    movl $-1850691612, %eax # imm = 0x91B0AFE4
522 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
523 ; SDAG-X86-NEXT:    andl $-2, %edx
524 ; SDAG-X86-NEXT:    retl
526 ; FASTISEL-X86-LABEL: and_imm64_i64:
527 ; FASTISEL-X86:       # %bb.0:
528 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
529 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
530 ; FASTISEL-X86-NEXT:    andl $-1850691612, %eax # imm = 0x91B0AFE4
531 ; FASTISEL-X86-NEXT:    andl $-2, %edx
532 ; FASTISEL-X86-NEXT:    retl
534 ; GISEL-X86-LABEL: and_imm64_i64:
535 ; GISEL-X86:       # %bb.0:
536 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
537 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
538 ; GISEL-X86-NEXT:    andl $-1850691612, %eax # imm = 0x91B0AFE4
539 ; GISEL-X86-NEXT:    andl $-2, %edx
540 ; GISEL-X86-NEXT:    retl
542 ; X64-LABEL: and_imm64_i64:
543 ; X64:       # %bb.0:
544 ; X64-NEXT:    movabsq $-6145658908, %rax # imm = 0xFFFFFFFE91B0AFE4
545 ; X64-NEXT:    andq %rdi, %rax
546 ; X64-NEXT:    retq
547   %c = and i64 %a, -6145658908
548   ret i64 %c