Skip to content

Commit 9216419

Browse files
committed
[X86] Add basic xor+cmp test coverage for #6146
1 parent 0c70a26 commit 9216419

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

llvm/test/CodeGen/X86/cmp-xor.ll

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc < %s -mtriple=i686--| FileCheck %s --check-prefixes=X86
3+
; RUN: llc < %s -mtriple=x86_64--| FileCheck %s --check-prefixes=X64
4+
5+
;
6+
; PR6146
7+
;
8+
9+
define i32 @cmp_xor_i32(i32 %a, i32 %b, i32 %c)
10+
; X86-LABEL: cmp_xor_i32:
11+
; X86: # %bb.0:
12+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
13+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
14+
; X86-NEXT: cmpl %ecx, %eax
15+
; X86-NEXT: je .LBB0_1
16+
; X86-NEXT: # %bb.2:
17+
; X86-NEXT: xorl %ecx, %eax
18+
; X86-NEXT: retl
19+
; X86-NEXT: .LBB0_1:
20+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
21+
; X86-NEXT: retl
22+
;
23+
; X64-LABEL: cmp_xor_i32:
24+
; X64: # %bb.0:
25+
; X64-NEXT: movl %edi, %eax
26+
; X64-NEXT: xorl %esi, %eax
27+
; X64-NEXT: cmpl %esi, %edi
28+
; X64-NEXT: cmovel %edx, %eax
29+
; X64-NEXT: retq
30+
{
31+
%xor = xor i32 %a, %b
32+
%cmp = icmp eq i32 %a, %b
33+
%sel = select i1 %cmp, i32 %c, i32 %xor
34+
ret i32 %sel
35+
}
36+
37+
define i32 @cmp_xor_i32_commute(i32 %a, i32 %b, i32 %c)
38+
; X86-LABEL: cmp_xor_i32_commute:
39+
; X86: # %bb.0:
40+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
41+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
42+
; X86-NEXT: cmpl %eax, %ecx
43+
; X86-NEXT: je .LBB1_1
44+
; X86-NEXT: # %bb.2:
45+
; X86-NEXT: xorl %ecx, %eax
46+
; X86-NEXT: retl
47+
; X86-NEXT: .LBB1_1:
48+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
49+
; X86-NEXT: retl
50+
;
51+
; X64-LABEL: cmp_xor_i32_commute:
52+
; X64: # %bb.0:
53+
; X64-NEXT: movl %esi, %eax
54+
; X64-NEXT: xorl %edi, %eax
55+
; X64-NEXT: cmpl %esi, %edi
56+
; X64-NEXT: cmovel %edx, %eax
57+
; X64-NEXT: retq
58+
{
59+
%xor = xor i32 %b, %a
60+
%cmp = icmp eq i32 %a, %b
61+
%sel = select i1 %cmp, i32 %c, i32 %xor
62+
ret i32 %sel
63+
}
64+

0 commit comments

Comments
 (0)