xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-popcnt-128.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE3
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @testv2i64(<2 x i64> %in) nounwind {
10*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv2i64:
11*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
12*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
13*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq $1, %xmm1
14*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1
15*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psubq %xmm1, %xmm0
16*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [3689348814741910323,3689348814741910323]
17*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
18*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm2
19*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq $2, %xmm0
20*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
21*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddq %xmm2, %xmm0
22*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
23*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq $4, %xmm1
24*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddq %xmm0, %xmm1
25*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1
26*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm0, %xmm0
27*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psadbw %xmm0, %xmm1
28*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
29*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
30*9880d681SAndroid Build Coastguard Worker;
31*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv2i64:
32*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
33*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm1
34*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrlq $1, %xmm1
35*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand {{.*}}(%rip), %xmm1
36*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psubq %xmm1, %xmm0
37*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [3689348814741910323,3689348814741910323]
38*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm2
39*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm1, %xmm2
40*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrlq $2, %xmm0
41*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm1, %xmm0
42*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    paddq %xmm2, %xmm0
43*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm1
44*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrlq $4, %xmm1
45*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    paddq %xmm0, %xmm1
46*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand {{.*}}(%rip), %xmm1
47*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pxor %xmm0, %xmm0
48*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psadbw %xmm0, %xmm1
49*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm1, %xmm0
50*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
51*9880d681SAndroid Build Coastguard Worker;
52*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv2i64:
53*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
54*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
55*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm2
56*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm2
57*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
58*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm4
59*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm4
60*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
61*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm0
62*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm3
63*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddb %xmm4, %xmm3
64*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pxor %xmm0, %xmm0
65*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psadbw %xmm3, %xmm0
66*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
67*9880d681SAndroid Build Coastguard Worker;
68*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv2i64:
69*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
70*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
71*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
72*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm1, %xmm2
73*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
74*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm4
75*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm2, %xmm4
76*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $4, %xmm0
77*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm1, %xmm0
78*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm0, %xmm3
79*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm4, %xmm3
80*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm0, %xmm0
81*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psadbw %xmm3, %xmm0
82*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
83*9880d681SAndroid Build Coastguard Worker;
84*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv2i64:
85*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
86*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
87*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
88*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
89*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
90*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
91*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
92*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
93*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
94*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
95*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
96*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
97*9880d681SAndroid Build Coastguard Worker  %out = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %in)
98*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %out
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @testv4i32(<4 x i32> %in) nounwind {
102*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv4i32:
103*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
104*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
105*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrld $1, %xmm1
106*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1
107*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psubd %xmm1, %xmm0
108*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [858993459,858993459,858993459,858993459]
109*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
110*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm2
111*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrld $2, %xmm0
112*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
113*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm2, %xmm0
114*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
115*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrld $4, %xmm1
116*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm0, %xmm1
117*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1
118*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm0, %xmm0
119*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
120*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
121*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psadbw %xmm0, %xmm2
122*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
123*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psadbw %xmm0, %xmm1
124*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm2, %xmm1
125*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
126*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
127*9880d681SAndroid Build Coastguard Worker;
128*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv4i32:
129*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
130*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm1
131*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrld $1, %xmm1
132*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand {{.*}}(%rip), %xmm1
133*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psubd %xmm1, %xmm0
134*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [858993459,858993459,858993459,858993459]
135*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm2
136*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm1, %xmm2
137*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrld $2, %xmm0
138*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm1, %xmm0
139*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    paddd %xmm2, %xmm0
140*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm1
141*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrld $4, %xmm1
142*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    paddd %xmm0, %xmm1
143*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand {{.*}}(%rip), %xmm1
144*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pxor %xmm0, %xmm0
145*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm1, %xmm2
146*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
147*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psadbw %xmm0, %xmm2
148*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
149*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psadbw %xmm0, %xmm1
150*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    packuswb %xmm2, %xmm1
151*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm1, %xmm0
152*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
153*9880d681SAndroid Build Coastguard Worker;
154*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv4i32:
155*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
156*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
157*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm3
158*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm3
159*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
160*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm4
161*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm3, %xmm4
162*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
163*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm0
164*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm1
165*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddb %xmm4, %xmm1
166*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pxor %xmm0, %xmm0
167*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm2
168*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
169*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psadbw %xmm0, %xmm2
170*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
171*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psadbw %xmm0, %xmm1
172*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    packuswb %xmm2, %xmm1
173*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
174*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
175*9880d681SAndroid Build Coastguard Worker;
176*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv4i32:
177*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
178*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
179*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm3
180*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm3
181*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
182*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm4
183*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm3, %xmm4
184*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $4, %xmm0
185*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm0
186*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm0, %xmm1
187*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm4, %xmm1
188*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm0, %xmm0
189*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
190*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
191*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psadbw %xmm0, %xmm2
192*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
193*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psadbw %xmm0, %xmm1
194*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    packuswb %xmm2, %xmm1
195*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
196*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
197*9880d681SAndroid Build Coastguard Worker;
198*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv4i32:
199*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
200*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
201*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
202*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
203*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
204*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
205*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
206*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
207*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
208*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
209*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
210*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
211*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
212*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
213*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
214*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
215*9880d681SAndroid Build Coastguard Worker  %out = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %in)
216*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %out
217*9880d681SAndroid Build Coastguard Worker}
218*9880d681SAndroid Build Coastguard Worker
219*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @testv8i16(<8 x i16> %in) nounwind {
220*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv8i16:
221*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
222*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
223*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm1
224*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1
225*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psubw %xmm1, %xmm0
226*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [13107,13107,13107,13107,13107,13107,13107,13107]
227*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
228*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm2
229*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $2, %xmm0
230*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
231*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm2, %xmm0
232*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
233*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $4, %xmm1
234*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm0, %xmm1
235*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1
236*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
237*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $8, %xmm0
238*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm1, %xmm0
239*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $8, %xmm0
240*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
241*9880d681SAndroid Build Coastguard Worker;
242*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv8i16:
243*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
244*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm1
245*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrlw $1, %xmm1
246*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand {{.*}}(%rip), %xmm1
247*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psubw %xmm1, %xmm0
248*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [13107,13107,13107,13107,13107,13107,13107,13107]
249*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm2
250*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm1, %xmm2
251*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrlw $2, %xmm0
252*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm1, %xmm0
253*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    paddw %xmm2, %xmm0
254*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm1
255*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrlw $4, %xmm1
256*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    paddw %xmm0, %xmm1
257*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand {{.*}}(%rip), %xmm1
258*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm1, %xmm0
259*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psllw $8, %xmm0
260*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    paddb %xmm1, %xmm0
261*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrlw $8, %xmm0
262*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
263*9880d681SAndroid Build Coastguard Worker;
264*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv8i16:
265*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
266*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
267*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm2
268*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm2
269*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
270*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm4
271*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm4
272*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
273*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm0
274*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm3
275*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddb %xmm4, %xmm3
276*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm0
277*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psllw $8, %xmm0
278*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddb %xmm3, %xmm0
279*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $8, %xmm0
280*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
281*9880d681SAndroid Build Coastguard Worker;
282*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv8i16:
283*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
284*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
285*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
286*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm1, %xmm2
287*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
288*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm4
289*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm2, %xmm4
290*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $4, %xmm0
291*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm1, %xmm0
292*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm0, %xmm3
293*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm4, %xmm3
294*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm0
295*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $8, %xmm0
296*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm3, %xmm0
297*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm0
298*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
299*9880d681SAndroid Build Coastguard Worker;
300*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv8i16:
301*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
302*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
303*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
304*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
305*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
306*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
307*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
308*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
309*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
310*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $8, %xmm0, %xmm1
311*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
312*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm0
313*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
314*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %in)
315*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %out
316*9880d681SAndroid Build Coastguard Worker}
317*9880d681SAndroid Build Coastguard Worker
318*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @testv16i8(<16 x i8> %in) nounwind {
319*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv16i8:
320*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
321*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
322*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm1
323*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1
324*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psubb %xmm1, %xmm0
325*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
326*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
327*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm2
328*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $2, %xmm0
329*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
330*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm2, %xmm0
331*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
332*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $4, %xmm1
333*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm0, %xmm1
334*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1
335*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
336*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
337*9880d681SAndroid Build Coastguard Worker;
338*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv16i8:
339*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
340*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm1
341*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrlw $1, %xmm1
342*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand {{.*}}(%rip), %xmm1
343*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psubb %xmm1, %xmm0
344*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
345*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm2
346*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm1, %xmm2
347*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrlw $2, %xmm0
348*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm1, %xmm0
349*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    paddb %xmm2, %xmm0
350*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm0, %xmm1
351*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    psrlw $4, %xmm1
352*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    paddb %xmm0, %xmm1
353*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand {{.*}}(%rip), %xmm1
354*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm1, %xmm0
355*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
356*9880d681SAndroid Build Coastguard Worker;
357*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv16i8:
358*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
359*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
360*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm3
361*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm3
362*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
363*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm4
364*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm3, %xmm4
365*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
366*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm0
367*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm1
368*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddb %xmm4, %xmm1
369*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
370*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
371*9880d681SAndroid Build Coastguard Worker;
372*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv16i8:
373*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
374*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
375*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm3
376*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm3
377*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
378*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm4
379*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm3, %xmm4
380*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $4, %xmm0
381*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm0
382*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm0, %xmm1
383*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm4, %xmm1
384*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
385*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
386*9880d681SAndroid Build Coastguard Worker;
387*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv16i8:
388*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
389*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
390*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
391*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
392*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
393*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
394*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
395*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
396*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
397*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
398*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %in)
399*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %out
400*9880d681SAndroid Build Coastguard Worker}
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @foldv2i64() nounwind {
403*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv2i64:
404*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
405*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,64]
406*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
407*9880d681SAndroid Build Coastguard Worker;
408*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv2i64:
409*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
410*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [1,64]
411*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
412*9880d681SAndroid Build Coastguard Worker  %out = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> <i64 256, i64 -1>)
413*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %out
414*9880d681SAndroid Build Coastguard Worker}
415*9880d681SAndroid Build Coastguard Worker
416*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @foldv4i32() nounwind {
417*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv4i32:
418*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
419*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,32,0,8]
420*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
421*9880d681SAndroid Build Coastguard Worker;
422*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv4i32:
423*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
424*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [1,32,0,8]
425*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
426*9880d681SAndroid Build Coastguard Worker  %out = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> <i32 256, i32 -1, i32 0, i32 255>)
427*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %out
428*9880d681SAndroid Build Coastguard Worker}
429*9880d681SAndroid Build Coastguard Worker
430*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @foldv8i16() nounwind {
431*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv8i16:
432*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
433*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,16,0,8,0,3,2,3]
434*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
435*9880d681SAndroid Build Coastguard Worker;
436*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv8i16:
437*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
438*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [1,16,0,8,0,3,2,3]
439*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
440*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> <i16 256, i16 -1, i16 0, i16 255, i16 -65536, i16 7, i16 24, i16 88>)
441*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %out
442*9880d681SAndroid Build Coastguard Worker}
443*9880d681SAndroid Build Coastguard Worker
444*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @foldv16i8() nounwind {
445*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv16i8:
446*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
447*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps {{.*#+}} xmm0 = [0,8,0,8,0,3,2,3,7,7,1,1,1,1,1,1]
448*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
449*9880d681SAndroid Build Coastguard Worker;
450*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv16i8:
451*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
452*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [0,8,0,8,0,3,2,3,7,7,1,1,1,1,1,1]
453*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
454*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> <i8 256, i8 -1, i8 0, i8 255, i8 -65536, i8 7, i8 24, i8 88, i8 -2, i8 254, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32>)
455*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %out
456*9880d681SAndroid Build Coastguard Worker}
457*9880d681SAndroid Build Coastguard Worker
458*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)
459*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>)
460*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>)
461*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>)
462