xref: /llvm-project/llvm/test/CodeGen/X86/isel-xor.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 @xor_i1(i1 %a, i1 %b) {
10; SDAG-X86-LABEL: xor_i1:
11; SDAG-X86:       # %bb.0:
12; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
13; SDAG-X86-NEXT:    xorb {{[0-9]+}}(%esp), %al
14; SDAG-X86-NEXT:    retl
15;
16; FASTISEL-X86-LABEL: xor_i1:
17; FASTISEL-X86:       # %bb.0:
18; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
19; FASTISEL-X86-NEXT:    xorb {{[0-9]+}}(%esp), %al
20; FASTISEL-X86-NEXT:    retl
21;
22; GISEL-X86-LABEL: xor_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:    xorb %cl, %al
27; GISEL-X86-NEXT:    # kill: def $al killed $al killed $eax
28; GISEL-X86-NEXT:    retl
29;
30; SDAG-X64-LABEL: xor_i1:
31; SDAG-X64:       # %bb.0:
32; SDAG-X64-NEXT:    movl %edi, %eax
33; SDAG-X64-NEXT:    xorl %esi, %eax
34; SDAG-X64-NEXT:    # kill: def $al killed $al killed $eax
35; SDAG-X64-NEXT:    retq
36;
37; FASTISEL-X64-LABEL: xor_i1:
38; FASTISEL-X64:       # %bb.0:
39; FASTISEL-X64-NEXT:    movl %edi, %eax
40; FASTISEL-X64-NEXT:    xorb %sil, %al
41; FASTISEL-X64-NEXT:    # kill: def $al killed $al killed $eax
42; FASTISEL-X64-NEXT:    retq
43;
44; GISEL-X64-LABEL: xor_i1:
45; GISEL-X64:       # %bb.0:
46; GISEL-X64-NEXT:    movl %esi, %eax
47; GISEL-X64-NEXT:    xorb %dil, %al
48; GISEL-X64-NEXT:    # kill: def $al killed $al killed $eax
49; GISEL-X64-NEXT:    retq
50  %c = xor i1 %a, %b
51  ret i1 %c
52}
53
54define i8 @xor_i8(i8 %a, i8 %b) {
55; SDAG-X86-LABEL: xor_i8:
56; SDAG-X86:       # %bb.0:
57; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
58; SDAG-X86-NEXT:    xorb {{[0-9]+}}(%esp), %al
59; SDAG-X86-NEXT:    retl
60;
61; FASTISEL-X86-LABEL: xor_i8:
62; FASTISEL-X86:       # %bb.0:
63; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
64; FASTISEL-X86-NEXT:    xorb {{[0-9]+}}(%esp), %al
65; FASTISEL-X86-NEXT:    retl
66;
67; GISEL-X86-LABEL: xor_i8:
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:    xorb %cl, %al
72; GISEL-X86-NEXT:    # kill: def $al killed $al killed $eax
73; GISEL-X86-NEXT:    retl
74;
75; SDAG-X64-LABEL: xor_i8:
76; SDAG-X64:       # %bb.0:
77; SDAG-X64-NEXT:    movl %edi, %eax
78; SDAG-X64-NEXT:    xorl %esi, %eax
79; SDAG-X64-NEXT:    # kill: def $al killed $al killed $eax
80; SDAG-X64-NEXT:    retq
81;
82; FASTISEL-X64-LABEL: xor_i8:
83; FASTISEL-X64:       # %bb.0:
84; FASTISEL-X64-NEXT:    movl %edi, %eax
85; FASTISEL-X64-NEXT:    xorb %sil, %al
86; FASTISEL-X64-NEXT:    # kill: def $al killed $al killed $eax
87; FASTISEL-X64-NEXT:    retq
88;
89; GISEL-X64-LABEL: xor_i8:
90; GISEL-X64:       # %bb.0:
91; GISEL-X64-NEXT:    movl %esi, %eax
92; GISEL-X64-NEXT:    xorb %dil, %al
93; GISEL-X64-NEXT:    # kill: def $al killed $al killed $eax
94; GISEL-X64-NEXT:    retq
95  %c = xor i8 %a, %b
96  ret i8 %c
97}
98
99define i16 @xor_i16(i16 %a, i16 %b) {
100; SDAG-X86-LABEL: xor_i16:
101; SDAG-X86:       # %bb.0:
102; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
103; SDAG-X86-NEXT:    xorw {{[0-9]+}}(%esp), %ax
104; SDAG-X86-NEXT:    retl
105;
106; FASTISEL-X86-LABEL: xor_i16:
107; FASTISEL-X86:       # %bb.0:
108; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
109; FASTISEL-X86-NEXT:    xorw {{[0-9]+}}(%esp), %ax
110; FASTISEL-X86-NEXT:    retl
111;
112; GISEL-X86-LABEL: xor_i16:
113; GISEL-X86:       # %bb.0:
114; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
115; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
116; GISEL-X86-NEXT:    xorw %cx, %ax
117; GISEL-X86-NEXT:    # kill: def $ax killed $ax killed $eax
118; GISEL-X86-NEXT:    retl
119;
120; SDAG-X64-LABEL: xor_i16:
121; SDAG-X64:       # %bb.0:
122; SDAG-X64-NEXT:    movl %edi, %eax
123; SDAG-X64-NEXT:    xorl %esi, %eax
124; SDAG-X64-NEXT:    # kill: def $ax killed $ax killed $eax
125; SDAG-X64-NEXT:    retq
126;
127; FASTISEL-X64-LABEL: xor_i16:
128; FASTISEL-X64:       # %bb.0:
129; FASTISEL-X64-NEXT:    movl %edi, %eax
130; FASTISEL-X64-NEXT:    xorw %si, %ax
131; FASTISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
132; FASTISEL-X64-NEXT:    retq
133;
134; GISEL-X64-LABEL: xor_i16:
135; GISEL-X64:       # %bb.0:
136; GISEL-X64-NEXT:    movl %esi, %eax
137; GISEL-X64-NEXT:    xorw %di, %ax
138; GISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
139; GISEL-X64-NEXT:    retq
140  %c = xor i16 %a, %b
141  ret i16 %c
142}
143
144define i32 @xor_i32(i32 %a, i32 %b) {
145; X86-LABEL: xor_i32:
146; X86:       # %bb.0:
147; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
148; X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax
149; X86-NEXT:    retl
150;
151; SDAG-X64-LABEL: xor_i32:
152; SDAG-X64:       # %bb.0:
153; SDAG-X64-NEXT:    movl %edi, %eax
154; SDAG-X64-NEXT:    xorl %esi, %eax
155; SDAG-X64-NEXT:    retq
156;
157; FASTISEL-X64-LABEL: xor_i32:
158; FASTISEL-X64:       # %bb.0:
159; FASTISEL-X64-NEXT:    movl %edi, %eax
160; FASTISEL-X64-NEXT:    xorl %esi, %eax
161; FASTISEL-X64-NEXT:    retq
162;
163; GISEL-X64-LABEL: xor_i32:
164; GISEL-X64:       # %bb.0:
165; GISEL-X64-NEXT:    movl %esi, %eax
166; GISEL-X64-NEXT:    xorl %edi, %eax
167; GISEL-X64-NEXT:    retq
168  %c = xor i32 %a, %b
169  ret i32 %c
170}
171
172define i64 @xor_i64(i64 %a, i64 %b) nounwind {
173; SDAG-X86-LABEL: xor_i64:
174; SDAG-X86:       # %bb.0:
175; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
176; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
177; SDAG-X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax
178; SDAG-X86-NEXT:    xorl {{[0-9]+}}(%esp), %edx
179; SDAG-X86-NEXT:    retl
180;
181; FASTISEL-X86-LABEL: xor_i64:
182; FASTISEL-X86:       # %bb.0:
183; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
184; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
185; FASTISEL-X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax
186; FASTISEL-X86-NEXT:    xorl {{[0-9]+}}(%esp), %edx
187; FASTISEL-X86-NEXT:    retl
188;
189; GISEL-X86-LABEL: xor_i64:
190; GISEL-X86:       # %bb.0:
191; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
192; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
193; GISEL-X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax
194; GISEL-X86-NEXT:    xorl {{[0-9]+}}(%esp), %edx
195; GISEL-X86-NEXT:    retl
196;
197; SDAG-X64-LABEL: xor_i64:
198; SDAG-X64:       # %bb.0:
199; SDAG-X64-NEXT:    movq %rdi, %rax
200; SDAG-X64-NEXT:    xorq %rsi, %rax
201; SDAG-X64-NEXT:    retq
202;
203; FASTISEL-X64-LABEL: xor_i64:
204; FASTISEL-X64:       # %bb.0:
205; FASTISEL-X64-NEXT:    movq %rdi, %rax
206; FASTISEL-X64-NEXT:    xorq %rsi, %rax
207; FASTISEL-X64-NEXT:    retq
208;
209; GISEL-X64-LABEL: xor_i64:
210; GISEL-X64:       # %bb.0:
211; GISEL-X64-NEXT:    movq %rsi, %rax
212; GISEL-X64-NEXT:    xorq %rdi, %rax
213; GISEL-X64-NEXT:    retq
214  %c = xor i64 %a, %b
215  ret i64 %c
216}
217
218define i8 @xor_imm8_i8(i8 %a) {
219; SDAG-X86-LABEL: xor_imm8_i8:
220; SDAG-X86:       # %bb.0:
221; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
222; SDAG-X86-NEXT:    xorb $1, %al
223; SDAG-X86-NEXT:    retl
224;
225; FASTISEL-X86-LABEL: xor_imm8_i8:
226; FASTISEL-X86:       # %bb.0:
227; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
228; FASTISEL-X86-NEXT:    xorb $1, %al
229; FASTISEL-X86-NEXT:    retl
230;
231; GISEL-X86-LABEL: xor_imm8_i8:
232; GISEL-X86:       # %bb.0:
233; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
234; GISEL-X86-NEXT:    xorb $1, %al
235; GISEL-X86-NEXT:    # kill: def $al killed $al killed $eax
236; GISEL-X86-NEXT:    retl
237;
238; X64-LABEL: xor_imm8_i8:
239; X64:       # %bb.0:
240; X64-NEXT:    movl %edi, %eax
241; X64-NEXT:    xorb $1, %al
242; X64-NEXT:    # kill: def $al killed $al killed $eax
243; X64-NEXT:    retq
244  %c = xor i8 %a, 1
245  ret i8 %c
246}
247
248define i16 @xor_imm8_i16(i16 %a) {
249; SDAG-X86-LABEL: xor_imm8_i16:
250; SDAG-X86:       # %bb.0:
251; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
252; SDAG-X86-NEXT:    xorl $6, %eax
253; SDAG-X86-NEXT:    # kill: def $ax killed $ax killed $eax
254; SDAG-X86-NEXT:    retl
255;
256; FASTISEL-X86-LABEL: xor_imm8_i16:
257; FASTISEL-X86:       # %bb.0:
258; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
259; FASTISEL-X86-NEXT:    xorw $6, %ax
260; FASTISEL-X86-NEXT:    retl
261;
262; GISEL-X86-LABEL: xor_imm8_i16:
263; GISEL-X86:       # %bb.0:
264; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
265; GISEL-X86-NEXT:    xorw $6, %ax
266; GISEL-X86-NEXT:    # kill: def $ax killed $ax killed $eax
267; GISEL-X86-NEXT:    retl
268;
269; SDAG-X64-LABEL: xor_imm8_i16:
270; SDAG-X64:       # %bb.0:
271; SDAG-X64-NEXT:    movl %edi, %eax
272; SDAG-X64-NEXT:    xorl $6, %eax
273; SDAG-X64-NEXT:    # kill: def $ax killed $ax killed $eax
274; SDAG-X64-NEXT:    retq
275;
276; FASTISEL-X64-LABEL: xor_imm8_i16:
277; FASTISEL-X64:       # %bb.0:
278; FASTISEL-X64-NEXT:    movl %edi, %eax
279; FASTISEL-X64-NEXT:    xorw $6, %ax
280; FASTISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
281; FASTISEL-X64-NEXT:    retq
282;
283; GISEL-X64-LABEL: xor_imm8_i16:
284; GISEL-X64:       # %bb.0:
285; GISEL-X64-NEXT:    movl %edi, %eax
286; GISEL-X64-NEXT:    xorw $6, %ax
287; GISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
288; GISEL-X64-NEXT:    retq
289  %c = xor i16 %a, 6
290  ret i16 %c
291}
292
293define i32 @xor_imm8_i32(i32 %a) {
294; X86-LABEL: xor_imm8_i32:
295; X86:       # %bb.0:
296; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
297; X86-NEXT:    xorl $-5, %eax
298; X86-NEXT:    retl
299;
300; X64-LABEL: xor_imm8_i32:
301; X64:       # %bb.0:
302; X64-NEXT:    movl %edi, %eax
303; X64-NEXT:    xorl $-5, %eax
304; X64-NEXT:    retq
305  %c = xor i32 %a, -5
306  ret i32 %c
307}
308
309define i64 @xor_imm8_i64(i64 %a) {
310; SDAG-X86-LABEL: xor_imm8_i64:
311; SDAG-X86:       # %bb.0:
312; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
313; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
314; SDAG-X86-NEXT:    xorl $1, %eax
315; SDAG-X86-NEXT:    retl
316;
317; FASTISEL-X86-LABEL: xor_imm8_i64:
318; FASTISEL-X86:       # %bb.0:
319; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
320; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
321; FASTISEL-X86-NEXT:    xorl $1, %eax
322; FASTISEL-X86-NEXT:    retl
323;
324; GISEL-X86-LABEL: xor_imm8_i64:
325; GISEL-X86:       # %bb.0:
326; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
327; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
328; GISEL-X86-NEXT:    xorl $1, %eax
329; GISEL-X86-NEXT:    xorl $0, %edx
330; GISEL-X86-NEXT:    retl
331;
332; X64-LABEL: xor_imm8_i64:
333; X64:       # %bb.0:
334; X64-NEXT:    movq %rdi, %rax
335; X64-NEXT:    xorq $1, %rax
336; X64-NEXT:    retq
337  %c = xor i64 %a, 1
338  ret i64 %c
339}
340
341define i16 @xor_imm16_i16(i16 %a) {
342; SDAG-X86-LABEL: xor_imm16_i16:
343; SDAG-X86:       # %bb.0:
344; SDAG-X86-NEXT:    movl $1023, %eax # imm = 0x3FF
345; SDAG-X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax
346; SDAG-X86-NEXT:    # kill: def $ax killed $ax killed $eax
347; SDAG-X86-NEXT:    retl
348;
349; FASTISEL-X86-LABEL: xor_imm16_i16:
350; FASTISEL-X86:       # %bb.0:
351; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
352; FASTISEL-X86-NEXT:    xorw $1023, %ax # imm = 0x3FF
353; FASTISEL-X86-NEXT:    retl
354;
355; GISEL-X86-LABEL: xor_imm16_i16:
356; GISEL-X86:       # %bb.0:
357; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
358; GISEL-X86-NEXT:    xorw $1023, %ax # imm = 0x3FF
359; GISEL-X86-NEXT:    # kill: def $ax killed $ax killed $eax
360; GISEL-X86-NEXT:    retl
361;
362; SDAG-X64-LABEL: xor_imm16_i16:
363; SDAG-X64:       # %bb.0:
364; SDAG-X64-NEXT:    movl %edi, %eax
365; SDAG-X64-NEXT:    xorl $1023, %eax # imm = 0x3FF
366; SDAG-X64-NEXT:    # kill: def $ax killed $ax killed $eax
367; SDAG-X64-NEXT:    retq
368;
369; FASTISEL-X64-LABEL: xor_imm16_i16:
370; FASTISEL-X64:       # %bb.0:
371; FASTISEL-X64-NEXT:    movl %edi, %eax
372; FASTISEL-X64-NEXT:    xorw $1023, %ax # imm = 0x3FF
373; FASTISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
374; FASTISEL-X64-NEXT:    retq
375;
376; GISEL-X64-LABEL: xor_imm16_i16:
377; GISEL-X64:       # %bb.0:
378; GISEL-X64-NEXT:    movl %edi, %eax
379; GISEL-X64-NEXT:    xorw $1023, %ax # imm = 0x3FF
380; GISEL-X64-NEXT:    # kill: def $ax killed $ax killed $eax
381; GISEL-X64-NEXT:    retq
382  %c = xor i16 %a, 1023
383  ret i16 %c
384}
385
386define i32 @xor_imm16_i32(i32 %a) {
387; SDAG-X86-LABEL: xor_imm16_i32:
388; SDAG-X86:       # %bb.0:
389; SDAG-X86-NEXT:    movl $2044, %eax # imm = 0x7FC
390; SDAG-X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax
391; SDAG-X86-NEXT:    retl
392;
393; FASTISEL-X86-LABEL: xor_imm16_i32:
394; FASTISEL-X86:       # %bb.0:
395; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
396; FASTISEL-X86-NEXT:    xorl $2044, %eax # imm = 0x7FC
397; FASTISEL-X86-NEXT:    retl
398;
399; GISEL-X86-LABEL: xor_imm16_i32:
400; GISEL-X86:       # %bb.0:
401; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
402; GISEL-X86-NEXT:    xorl $2044, %eax # imm = 0x7FC
403; GISEL-X86-NEXT:    retl
404;
405; X64-LABEL: xor_imm16_i32:
406; X64:       # %bb.0:
407; X64-NEXT:    movl %edi, %eax
408; X64-NEXT:    xorl $2044, %eax # imm = 0x7FC
409; X64-NEXT:    retq
410  %c = xor i32 %a, 2044
411  ret i32 %c
412}
413
414define i64 @xor_imm16_i64(i64 %a) {
415; SDAG-X86-LABEL: xor_imm16_i64:
416; SDAG-X86:       # %bb.0:
417; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
418; SDAG-X86-NEXT:    movl $-5022, %eax # imm = 0xEC62
419; SDAG-X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax
420; SDAG-X86-NEXT:    notl %edx
421; SDAG-X86-NEXT:    retl
422;
423; FASTISEL-X86-LABEL: xor_imm16_i64:
424; FASTISEL-X86:       # %bb.0:
425; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
426; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
427; FASTISEL-X86-NEXT:    xorl $-5022, %eax # imm = 0xEC62
428; FASTISEL-X86-NEXT:    notl %edx
429; FASTISEL-X86-NEXT:    retl
430;
431; GISEL-X86-LABEL: xor_imm16_i64:
432; GISEL-X86:       # %bb.0:
433; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
434; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
435; GISEL-X86-NEXT:    xorl $-5022, %eax # imm = 0xEC62
436; GISEL-X86-NEXT:    notl %edx
437; GISEL-X86-NEXT:    retl
438;
439; X64-LABEL: xor_imm16_i64:
440; X64:       # %bb.0:
441; X64-NEXT:    movq %rdi, %rax
442; X64-NEXT:    xorq $-5022, %rax # imm = 0xEC62
443; X64-NEXT:    retq
444  %c = xor i64 %a, -5022
445  ret i64 %c
446}
447
448define i32 @xor_imm32_i32(i32 %a) {
449; SDAG-X86-LABEL: xor_imm32_i32:
450; SDAG-X86:       # %bb.0:
451; SDAG-X86-NEXT:    movl $85538, %eax # imm = 0x14E22
452; SDAG-X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax
453; SDAG-X86-NEXT:    retl
454;
455; FASTISEL-X86-LABEL: xor_imm32_i32:
456; FASTISEL-X86:       # %bb.0:
457; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
458; FASTISEL-X86-NEXT:    xorl $85538, %eax # imm = 0x14E22
459; FASTISEL-X86-NEXT:    retl
460;
461; GISEL-X86-LABEL: xor_imm32_i32:
462; GISEL-X86:       # %bb.0:
463; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
464; GISEL-X86-NEXT:    xorl $85538, %eax # imm = 0x14E22
465; GISEL-X86-NEXT:    retl
466;
467; X64-LABEL: xor_imm32_i32:
468; X64:       # %bb.0:
469; X64-NEXT:    movl %edi, %eax
470; X64-NEXT:    xorl $85538, %eax # imm = 0x14E22
471; X64-NEXT:    retq
472  %c = xor i32 %a, 85538
473  ret i32 %c
474}
475
476define i64 @xor_imm32_i64(i64 %a) {
477; SDAG-X86-LABEL: xor_imm32_i64:
478; SDAG-X86:       # %bb.0:
479; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
480; SDAG-X86-NEXT:    movl $-125778, %eax # imm = 0xFFFE14AE
481; SDAG-X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax
482; SDAG-X86-NEXT:    notl %edx
483; SDAG-X86-NEXT:    retl
484;
485; FASTISEL-X86-LABEL: xor_imm32_i64:
486; FASTISEL-X86:       # %bb.0:
487; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
488; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
489; FASTISEL-X86-NEXT:    xorl $-125778, %eax # imm = 0xFFFE14AE
490; FASTISEL-X86-NEXT:    notl %edx
491; FASTISEL-X86-NEXT:    retl
492;
493; GISEL-X86-LABEL: xor_imm32_i64:
494; GISEL-X86:       # %bb.0:
495; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
496; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
497; GISEL-X86-NEXT:    xorl $-125778, %eax # imm = 0xFFFE14AE
498; GISEL-X86-NEXT:    notl %edx
499; GISEL-X86-NEXT:    retl
500;
501; X64-LABEL: xor_imm32_i64:
502; X64:       # %bb.0:
503; X64-NEXT:    movq %rdi, %rax
504; X64-NEXT:    xorq $-125778, %rax # imm = 0xFFFE14AE
505; X64-NEXT:    retq
506  %c = xor i64 %a, -125778
507  ret i64 %c
508}
509
510define i64 @xor_imm64_i64(i64 %a) {
511; SDAG-X86-LABEL: xor_imm64_i64:
512; SDAG-X86:       # %bb.0:
513; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
514; SDAG-X86-NEXT:    movl $-1850691612, %eax # imm = 0x91B0AFE4
515; SDAG-X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax
516; SDAG-X86-NEXT:    xorl $-2, %edx
517; SDAG-X86-NEXT:    retl
518;
519; FASTISEL-X86-LABEL: xor_imm64_i64:
520; FASTISEL-X86:       # %bb.0:
521; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
522; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
523; FASTISEL-X86-NEXT:    xorl $-1850691612, %eax # imm = 0x91B0AFE4
524; FASTISEL-X86-NEXT:    xorl $-2, %edx
525; FASTISEL-X86-NEXT:    retl
526;
527; GISEL-X86-LABEL: xor_imm64_i64:
528; GISEL-X86:       # %bb.0:
529; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
530; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
531; GISEL-X86-NEXT:    xorl $-1850691612, %eax # imm = 0x91B0AFE4
532; GISEL-X86-NEXT:    xorl $-2, %edx
533; GISEL-X86-NEXT:    retl
534;
535; X64-LABEL: xor_imm64_i64:
536; X64:       # %bb.0:
537; X64-NEXT:    movabsq $-6145658908, %rax # imm = 0xFFFFFFFE91B0AFE4
538; X64-NEXT:    xorq %rdi, %rax
539; X64-NEXT:    retq
540  %c = xor i64 %a, -6145658908
541  ret i64 %c
542}
543