Skip to content

Commit 1f96aea

Browse files
committed
[X86] Add test coverage for #135917
1 parent 51b8c66 commit 1f96aea

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

llvm/test/CodeGen/X86/pr135917.ll

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 | FileCheck %s --check-prefix=SSE2
3+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v2 | FileCheck %s --check-prefix=SSE4
4+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v3 | FileCheck %s --check-prefix=AVX2
5+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v4 | FileCheck %s --check-prefix=AVX512
6+
7+
define i32 @PR135917(i1 %a0) {
8+
; SSE2-LABEL: PR135917:
9+
; SSE2: # %bb.0:
10+
; SSE2-NEXT: movd %edi, %xmm0
11+
; SSE2-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12+
; SSE2-NEXT: movd %xmm0, %ecx
13+
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]
14+
; SSE2-NEXT: movd %xmm0, %eax
15+
; SSE2-NEXT: addl %ecx, %eax
16+
; SSE2-NEXT: retq
17+
;
18+
; SSE4-LABEL: PR135917:
19+
; SSE4: # %bb.0:
20+
; SSE4-NEXT: movd %edi, %xmm0
21+
; SSE4-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22+
; SSE4-NEXT: movd %xmm0, %ecx
23+
; SSE4-NEXT: pextrd $1, %xmm0, %eax
24+
; SSE4-NEXT: addl %ecx, %eax
25+
; SSE4-NEXT: retq
26+
;
27+
; AVX2-LABEL: PR135917:
28+
; AVX2: # %bb.0:
29+
; AVX2-NEXT: vmovd %edi, %xmm0
30+
; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]
31+
; AVX2-NEXT: vpandn %xmm1, %xmm0, %xmm0
32+
; AVX2-NEXT: vmovd %xmm0, %ecx
33+
; AVX2-NEXT: vpextrd $1, %xmm0, %eax
34+
; AVX2-NEXT: addl %ecx, %eax
35+
; AVX2-NEXT: retq
36+
;
37+
; AVX512-LABEL: PR135917:
38+
; AVX512: # %bb.0:
39+
; AVX512-NEXT: andb $1, %dil
40+
; AVX512-NEXT: negb %dil
41+
; AVX512-NEXT: kmovd %edi, %k0
42+
; AVX512-NEXT: knotw %k0, %k0
43+
; AVX512-NEXT: vpmovm2d %k0, %xmm0
44+
; AVX512-NEXT: vpsrld $31, %xmm0, %xmm0
45+
; AVX512-NEXT: vmovd %xmm0, %ecx
46+
; AVX512-NEXT: vpextrd $1, %xmm0, %eax
47+
; AVX512-NEXT: addl %ecx, %eax
48+
; AVX512-NEXT: retq
49+
%splat = insertelement <4 x i1> poison, i1 %a0, i64 0
50+
%xor = xor <4 x i1> %splat, splat (i1 true)
51+
%not = shufflevector <4 x i1> %xor, <4 x i1> poison, <4 x i32> zeroinitializer
52+
%zext = zext <4 x i1> %not to <4 x i32>
53+
%elt0 = extractelement <4 x i32> %zext, i64 0
54+
%elt1 = extractelement <4 x i32> %zext, i64 1
55+
%res = add i32 %elt0, %elt1
56+
ret i32 %res
57+
}
58+

0 commit comments

Comments
 (0)