Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / X86 / isel-and.ll
blob32dbbf6091b707fd1250ccb90b9a9f92b5a3bd48
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 i8 @and_i8(i8 %a, i8 %b) {
10 ; SDAG-X86-LABEL: and_i8:
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_i8:
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_i8:
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_i8:
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_i8:
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_i8:
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 i8 %a, %b
51   ret i8 %c
54 define i16 @and_i16(i16 %a, i16 %b) {
55 ; SDAG-X86-LABEL: and_i16:
56 ; SDAG-X86:       # %bb.0:
57 ; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
58 ; SDAG-X86-NEXT:    andw {{[0-9]+}}(%esp), %ax
59 ; SDAG-X86-NEXT:    retl
61 ; FASTISEL-X86-LABEL: and_i16:
62 ; FASTISEL-X86:       # %bb.0:
63 ; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
64 ; FASTISEL-X86-NEXT:    andw {{[0-9]+}}(%esp), %ax
65 ; FASTISEL-X86-NEXT:    retl
67 ; GISEL-X86-LABEL: and_i16:
68 ; GISEL-X86:       # %bb.0:
69 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
70 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
71 ; GISEL-X86-NEXT:    andw %cx, %ax
72 ; GISEL-X86-NEXT:    # kill: def $ax killed $ax killed $eax
73 ; GISEL-X86-NEXT:    retl
75 ; SDAG-X64-LABEL: and_i16:
76 ; SDAG-X64:       # %bb.0:
77 ; SDAG-X64-NEXT:    movl %edi, %eax
78 ; SDAG-X64-NEXT:    andl %esi, %eax
79 ; SDAG-X64-NEXT:    # kill: def $ax killed $ax killed $eax
80 ; SDAG-X64-NEXT:    retq
82 ; FASTISEL-X64-LABEL: and_i16:
83 ; FASTISEL-X64:       # %bb.0:
84 ; FASTISEL-X64-NEXT:    movl %edi, %eax
85 ; FASTISEL-X64-NEXT:    andw %si, %ax
86 ; FASTISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
87 ; FASTISEL-X64-NEXT:    retq
89 ; GISEL-X64-LABEL: and_i16:
90 ; GISEL-X64:       # %bb.0:
91 ; GISEL-X64-NEXT:    movl %esi, %eax
92 ; GISEL-X64-NEXT:    andw %di, %ax
93 ; GISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
94 ; GISEL-X64-NEXT:    retq
95   %c = and i16 %a, %b
96   ret i16 %c
99 define i32 @and_i32(i32 %a, i32 %b) {
100 ; X86-LABEL: and_i32:
101 ; X86:       # %bb.0:
102 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
103 ; X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
104 ; X86-NEXT:    retl
106 ; SDAG-X64-LABEL: and_i32:
107 ; SDAG-X64:       # %bb.0:
108 ; SDAG-X64-NEXT:    movl %edi, %eax
109 ; SDAG-X64-NEXT:    andl %esi, %eax
110 ; SDAG-X64-NEXT:    retq
112 ; FASTISEL-X64-LABEL: and_i32:
113 ; FASTISEL-X64:       # %bb.0:
114 ; FASTISEL-X64-NEXT:    movl %edi, %eax
115 ; FASTISEL-X64-NEXT:    andl %esi, %eax
116 ; FASTISEL-X64-NEXT:    retq
118 ; GISEL-X64-LABEL: and_i32:
119 ; GISEL-X64:       # %bb.0:
120 ; GISEL-X64-NEXT:    movl %esi, %eax
121 ; GISEL-X64-NEXT:    andl %edi, %eax
122 ; GISEL-X64-NEXT:    retq
123   %c = and i32 %a, %b
124   ret i32 %c
127 define i64 @and_i64(i64 %a, i64 %b) nounwind {
128 ; SDAG-X86-LABEL: and_i64:
129 ; SDAG-X86:       # %bb.0:
130 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
131 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
132 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
133 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %edx
134 ; SDAG-X86-NEXT:    retl
136 ; FASTISEL-X86-LABEL: and_i64:
137 ; FASTISEL-X86:       # %bb.0:
138 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
139 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
140 ; FASTISEL-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
141 ; FASTISEL-X86-NEXT:    andl {{[0-9]+}}(%esp), %edx
142 ; FASTISEL-X86-NEXT:    retl
144 ; GISEL-X86-LABEL: and_i64:
145 ; GISEL-X86:       # %bb.0:
146 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
147 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
148 ; GISEL-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
149 ; GISEL-X86-NEXT:    andl {{[0-9]+}}(%esp), %edx
150 ; GISEL-X86-NEXT:    retl
152 ; SDAG-X64-LABEL: and_i64:
153 ; SDAG-X64:       # %bb.0:
154 ; SDAG-X64-NEXT:    movq %rdi, %rax
155 ; SDAG-X64-NEXT:    andq %rsi, %rax
156 ; SDAG-X64-NEXT:    retq
158 ; FASTISEL-X64-LABEL: and_i64:
159 ; FASTISEL-X64:       # %bb.0:
160 ; FASTISEL-X64-NEXT:    movq %rdi, %rax
161 ; FASTISEL-X64-NEXT:    andq %rsi, %rax
162 ; FASTISEL-X64-NEXT:    retq
164 ; GISEL-X64-LABEL: and_i64:
165 ; GISEL-X64:       # %bb.0:
166 ; GISEL-X64-NEXT:    movq %rsi, %rax
167 ; GISEL-X64-NEXT:    andq %rdi, %rax
168 ; GISEL-X64-NEXT:    retq
169   %c = and i64 %a, %b
170   ret i64 %c
173 define i8 @and_imm8_i8(i8 %a) {
174 ; SDAG-X86-LABEL: and_imm8_i8:
175 ; SDAG-X86:       # %bb.0:
176 ; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
177 ; SDAG-X86-NEXT:    andb $1, %al
178 ; SDAG-X86-NEXT:    retl
180 ; FASTISEL-X86-LABEL: and_imm8_i8:
181 ; FASTISEL-X86:       # %bb.0:
182 ; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
183 ; FASTISEL-X86-NEXT:    andb $1, %al
184 ; FASTISEL-X86-NEXT:    retl
186 ; GISEL-X86-LABEL: and_imm8_i8:
187 ; GISEL-X86:       # %bb.0:
188 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
189 ; GISEL-X86-NEXT:    andb $1, %al
190 ; GISEL-X86-NEXT:    # kill: def $al killed $al killed $eax
191 ; GISEL-X86-NEXT:    retl
193 ; X64-LABEL: and_imm8_i8:
194 ; X64:       # %bb.0:
195 ; X64-NEXT:    movl %edi, %eax
196 ; X64-NEXT:    andb $1, %al
197 ; X64-NEXT:    # kill: def $al killed $al killed $eax
198 ; X64-NEXT:    retq
199   %c = and i8 %a, 1
200   ret i8 %c
203 define i16 @and_imm8_i16(i16 %a) {
204 ; SDAG-X86-LABEL: and_imm8_i16:
205 ; SDAG-X86:       # %bb.0:
206 ; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
207 ; SDAG-X86-NEXT:    andl $6, %eax
208 ; SDAG-X86-NEXT:    # kill: def $ax killed $ax killed $eax
209 ; SDAG-X86-NEXT:    retl
211 ; FASTISEL-X86-LABEL: and_imm8_i16:
212 ; FASTISEL-X86:       # %bb.0:
213 ; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
214 ; FASTISEL-X86-NEXT:    andw $6, %ax
215 ; FASTISEL-X86-NEXT:    retl
217 ; GISEL-X86-LABEL: and_imm8_i16:
218 ; GISEL-X86:       # %bb.0:
219 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
220 ; GISEL-X86-NEXT:    andw $6, %ax
221 ; GISEL-X86-NEXT:    # kill: def $ax killed $ax killed $eax
222 ; GISEL-X86-NEXT:    retl
224 ; SDAG-X64-LABEL: and_imm8_i16:
225 ; SDAG-X64:       # %bb.0:
226 ; SDAG-X64-NEXT:    movl %edi, %eax
227 ; SDAG-X64-NEXT:    andl $6, %eax
228 ; SDAG-X64-NEXT:    # kill: def $ax killed $ax killed $eax
229 ; SDAG-X64-NEXT:    retq
231 ; FASTISEL-X64-LABEL: and_imm8_i16:
232 ; FASTISEL-X64:       # %bb.0:
233 ; FASTISEL-X64-NEXT:    movl %edi, %eax
234 ; FASTISEL-X64-NEXT:    andw $6, %ax
235 ; FASTISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
236 ; FASTISEL-X64-NEXT:    retq
238 ; GISEL-X64-LABEL: and_imm8_i16:
239 ; GISEL-X64:       # %bb.0:
240 ; GISEL-X64-NEXT:    movl %edi, %eax
241 ; GISEL-X64-NEXT:    andw $6, %ax
242 ; GISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
243 ; GISEL-X64-NEXT:    retq
244   %c = and i16 %a, 6
245   ret i16 %c
248 define i32 @and_imm8_i32(i32 %a) {
249 ; X86-LABEL: and_imm8_i32:
250 ; X86:       # %bb.0:
251 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
252 ; X86-NEXT:    andl $-5, %eax
253 ; X86-NEXT:    retl
255 ; X64-LABEL: and_imm8_i32:
256 ; X64:       # %bb.0:
257 ; X64-NEXT:    movl %edi, %eax
258 ; X64-NEXT:    andl $-5, %eax
259 ; X64-NEXT:    retq
260   %c = and i32 %a, -5
261   ret i32 %c
264 define i64 @and_imm8_i64(i64 %a) {
265 ; SDAG-X86-LABEL: and_imm8_i64:
266 ; SDAG-X86:       # %bb.0:
267 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
268 ; SDAG-X86-NEXT:    andl $1, %eax
269 ; SDAG-X86-NEXT:    xorl %edx, %edx
270 ; SDAG-X86-NEXT:    retl
272 ; FASTISEL-X86-LABEL: and_imm8_i64:
273 ; FASTISEL-X86:       # %bb.0:
274 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
275 ; FASTISEL-X86-NEXT:    andl $1, %eax
276 ; FASTISEL-X86-NEXT:    xorl %edx, %edx
277 ; FASTISEL-X86-NEXT:    retl
279 ; GISEL-X86-LABEL: and_imm8_i64:
280 ; GISEL-X86:       # %bb.0:
281 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
282 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
283 ; GISEL-X86-NEXT:    andl $1, %eax
284 ; GISEL-X86-NEXT:    andl $0, %edx
285 ; GISEL-X86-NEXT:    retl
287 ; SDAG-X64-LABEL: and_imm8_i64:
288 ; SDAG-X64:       # %bb.0:
289 ; SDAG-X64-NEXT:    movq %rdi, %rax
290 ; SDAG-X64-NEXT:    andl $1, %eax
291 ; SDAG-X64-NEXT:    retq
293 ; FASTISEL-X64-LABEL: and_imm8_i64:
294 ; FASTISEL-X64:       # %bb.0:
295 ; FASTISEL-X64-NEXT:    movq %rdi, %rax
296 ; FASTISEL-X64-NEXT:    andq $1, %rax
297 ; FASTISEL-X64-NEXT:    retq
299 ; GISEL-X64-LABEL: and_imm8_i64:
300 ; GISEL-X64:       # %bb.0:
301 ; GISEL-X64-NEXT:    movq %rdi, %rax
302 ; GISEL-X64-NEXT:    andq $1, %rax
303 ; GISEL-X64-NEXT:    retq
304   %c = and i64 %a, 1
305   ret i64 %c
308 define i16 @and_imm16_i16(i16 %a) {
309 ; SDAG-X86-LABEL: and_imm16_i16:
310 ; SDAG-X86:       # %bb.0:
311 ; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
312 ; SDAG-X86-NEXT:    andl $1023, %eax # imm = 0x3FF
313 ; SDAG-X86-NEXT:    # kill: def $ax killed $ax killed $eax
314 ; SDAG-X86-NEXT:    retl
316 ; FASTISEL-X86-LABEL: and_imm16_i16:
317 ; FASTISEL-X86:       # %bb.0:
318 ; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
319 ; FASTISEL-X86-NEXT:    andw $1023, %ax # imm = 0x3FF
320 ; FASTISEL-X86-NEXT:    retl
322 ; GISEL-X86-LABEL: and_imm16_i16:
323 ; GISEL-X86:       # %bb.0:
324 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
325 ; GISEL-X86-NEXT:    andw $1023, %ax # imm = 0x3FF
326 ; GISEL-X86-NEXT:    # kill: def $ax killed $ax killed $eax
327 ; GISEL-X86-NEXT:    retl
329 ; SDAG-X64-LABEL: and_imm16_i16:
330 ; SDAG-X64:       # %bb.0:
331 ; SDAG-X64-NEXT:    movl %edi, %eax
332 ; SDAG-X64-NEXT:    andl $1023, %eax # imm = 0x3FF
333 ; SDAG-X64-NEXT:    # kill: def $ax killed $ax killed $eax
334 ; SDAG-X64-NEXT:    retq
336 ; FASTISEL-X64-LABEL: and_imm16_i16:
337 ; FASTISEL-X64:       # %bb.0:
338 ; FASTISEL-X64-NEXT:    movl %edi, %eax
339 ; FASTISEL-X64-NEXT:    andw $1023, %ax # imm = 0x3FF
340 ; FASTISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
341 ; FASTISEL-X64-NEXT:    retq
343 ; GISEL-X64-LABEL: and_imm16_i16:
344 ; GISEL-X64:       # %bb.0:
345 ; GISEL-X64-NEXT:    movl %edi, %eax
346 ; GISEL-X64-NEXT:    andw $1023, %ax # imm = 0x3FF
347 ; GISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
348 ; GISEL-X64-NEXT:    retq
349   %c = and i16 %a, 1023
350   ret i16 %c
353 define i32 @and_imm16_i32(i32 %a) {
354 ; SDAG-X86-LABEL: and_imm16_i32:
355 ; SDAG-X86:       # %bb.0:
356 ; SDAG-X86-NEXT:    movl $2044, %eax # imm = 0x7FC
357 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
358 ; SDAG-X86-NEXT:    retl
360 ; FASTISEL-X86-LABEL: and_imm16_i32:
361 ; FASTISEL-X86:       # %bb.0:
362 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
363 ; FASTISEL-X86-NEXT:    andl $2044, %eax # imm = 0x7FC
364 ; FASTISEL-X86-NEXT:    retl
366 ; GISEL-X86-LABEL: and_imm16_i32:
367 ; GISEL-X86:       # %bb.0:
368 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
369 ; GISEL-X86-NEXT:    andl $2044, %eax # imm = 0x7FC
370 ; GISEL-X86-NEXT:    retl
372 ; X64-LABEL: and_imm16_i32:
373 ; X64:       # %bb.0:
374 ; X64-NEXT:    movl %edi, %eax
375 ; X64-NEXT:    andl $2044, %eax # imm = 0x7FC
376 ; X64-NEXT:    retq
377   %c = and i32 %a, 2044
378   ret i32 %c
381 define i64 @and_imm16_i64(i64 %a) {
382 ; SDAG-X86-LABEL: and_imm16_i64:
383 ; SDAG-X86:       # %bb.0:
384 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
385 ; SDAG-X86-NEXT:    movl $-5022, %eax # imm = 0xEC62
386 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
387 ; SDAG-X86-NEXT:    retl
389 ; FASTISEL-X86-LABEL: and_imm16_i64:
390 ; FASTISEL-X86:       # %bb.0:
391 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
392 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
393 ; FASTISEL-X86-NEXT:    andl $-5022, %eax # imm = 0xEC62
394 ; FASTISEL-X86-NEXT:    retl
396 ; GISEL-X86-LABEL: and_imm16_i64:
397 ; GISEL-X86:       # %bb.0:
398 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
399 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
400 ; GISEL-X86-NEXT:    andl $-5022, %eax # imm = 0xEC62
401 ; GISEL-X86-NEXT:    andl $-1, %edx
402 ; GISEL-X86-NEXT:    retl
404 ; X64-LABEL: and_imm16_i64:
405 ; X64:       # %bb.0:
406 ; X64-NEXT:    movq %rdi, %rax
407 ; X64-NEXT:    andq $-5022, %rax # imm = 0xEC62
408 ; X64-NEXT:    retq
409   %c = and i64 %a, -5022
410   ret i64 %c
413 define i32 @and_imm32_i32(i32 %a) {
414 ; SDAG-X86-LABEL: and_imm32_i32:
415 ; SDAG-X86:       # %bb.0:
416 ; SDAG-X86-NEXT:    movl $85538, %eax # imm = 0x14E22
417 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
418 ; SDAG-X86-NEXT:    retl
420 ; FASTISEL-X86-LABEL: and_imm32_i32:
421 ; FASTISEL-X86:       # %bb.0:
422 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
423 ; FASTISEL-X86-NEXT:    andl $85538, %eax # imm = 0x14E22
424 ; FASTISEL-X86-NEXT:    retl
426 ; GISEL-X86-LABEL: and_imm32_i32:
427 ; GISEL-X86:       # %bb.0:
428 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
429 ; GISEL-X86-NEXT:    andl $85538, %eax # imm = 0x14E22
430 ; GISEL-X86-NEXT:    retl
432 ; X64-LABEL: and_imm32_i32:
433 ; X64:       # %bb.0:
434 ; X64-NEXT:    movl %edi, %eax
435 ; X64-NEXT:    andl $85538, %eax # imm = 0x14E22
436 ; X64-NEXT:    retq
437   %c = and i32 %a, 85538
438   ret i32 %c
441 define i64 @and_imm32_i64(i64 %a) {
442 ; SDAG-X86-LABEL: and_imm32_i64:
443 ; SDAG-X86:       # %bb.0:
444 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
445 ; SDAG-X86-NEXT:    movl $-125778, %eax # imm = 0xFFFE14AE
446 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
447 ; SDAG-X86-NEXT:    retl
449 ; FASTISEL-X86-LABEL: and_imm32_i64:
450 ; FASTISEL-X86:       # %bb.0:
451 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
452 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
453 ; FASTISEL-X86-NEXT:    andl $-125778, %eax # imm = 0xFFFE14AE
454 ; FASTISEL-X86-NEXT:    retl
456 ; GISEL-X86-LABEL: and_imm32_i64:
457 ; GISEL-X86:       # %bb.0:
458 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
459 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
460 ; GISEL-X86-NEXT:    andl $-125778, %eax # imm = 0xFFFE14AE
461 ; GISEL-X86-NEXT:    andl $-1, %edx
462 ; GISEL-X86-NEXT:    retl
464 ; X64-LABEL: and_imm32_i64:
465 ; X64:       # %bb.0:
466 ; X64-NEXT:    movq %rdi, %rax
467 ; X64-NEXT:    andq $-125778, %rax # imm = 0xFFFE14AE
468 ; X64-NEXT:    retq
469   %c = and i64 %a, -125778
470   ret i64 %c
473 define i64 @and_imm64_i64(i64 %a) {
474 ; SDAG-X86-LABEL: and_imm64_i64:
475 ; SDAG-X86:       # %bb.0:
476 ; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
477 ; SDAG-X86-NEXT:    movl $-1850691612, %eax # imm = 0x91B0AFE4
478 ; SDAG-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax
479 ; SDAG-X86-NEXT:    andl $-2, %edx
480 ; SDAG-X86-NEXT:    retl
482 ; FASTISEL-X86-LABEL: and_imm64_i64:
483 ; FASTISEL-X86:       # %bb.0:
484 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
485 ; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
486 ; FASTISEL-X86-NEXT:    andl $-1850691612, %eax # imm = 0x91B0AFE4
487 ; FASTISEL-X86-NEXT:    andl $-2, %edx
488 ; FASTISEL-X86-NEXT:    retl
490 ; GISEL-X86-LABEL: and_imm64_i64:
491 ; GISEL-X86:       # %bb.0:
492 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
493 ; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
494 ; GISEL-X86-NEXT:    andl $-1850691612, %eax # imm = 0x91B0AFE4
495 ; GISEL-X86-NEXT:    andl $-2, %edx
496 ; GISEL-X86-NEXT:    retl
498 ; X64-LABEL: and_imm64_i64:
499 ; X64:       # %bb.0:
500 ; X64-NEXT:    movabsq $-6145658908, %rax # imm = 0xFFFFFFFE91B0AFE4
501 ; X64-NEXT:    andq %rdi, %rax
502 ; X64-NEXT:    retq
503   %c = and i64 %a, -6145658908
504   ret i64 %c