xref: /llvm-project/llvm/test/CodeGen/X86/isel-and.ll (revision a437347562e2f0711ca9f5819831946e06e1ac93)
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
8
9define 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
15;
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
21;
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
29;
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
36;
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
43;
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
52}
53define 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
59;
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
65;
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
73;
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
80;
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
87;
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
96}
97
98define 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
104;
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
110;
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
118;
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
125;
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
132;
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
141}
142
143define 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
149;
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
155;
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
161;
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
169}
170
171define 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
179;
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
187;
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
195;
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
201;
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
207;
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
215}
216
217define 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
223;
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
229;
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
236;
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
245}
246
247define 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
254;
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
260;
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
267;
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
274;
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
281;
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
290}
291
292define 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
298;
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
306}
307
308define 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
315;
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
322;
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
330;
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
336;
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
342;
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
350}
351
352define 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
359;
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
365;
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
372;
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
379;
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
386;
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
395}
396
397define 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
403;
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
409;
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
415;
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
423}
424
425define 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
432;
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
439;
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
447;
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
455}
456
457define 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
463;
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
469;
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
475;
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
483}
484
485define 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
492;
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
499;
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
507;
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
515}
516
517define 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
525;
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
533;
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
541;
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
549}
550