[x86] Move the vector popcount tests into non-ISA files, and instead
[oota-llvm.git] / test / CodeGen / X86 / vector-popcnt-256.ll
1 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
2 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
3
4 target triple = "x86_64-unknown-unknown"
5
6 define <4 x i64> @testv4i64(<4 x i64> %in) {
7 ; AVX1-LABEL: testv4i64:
8 ; AVX1:       # BB#0:
9 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
10 ; AVX1-NEXT:    vpextrq $1, %xmm1, %rdx
11 ; AVX1-NEXT:    movq %rdx, %rax
12 ; AVX1-NEXT:    shrq %rax
13 ; AVX1-NEXT:    movabsq $6148914691236517205, %r8 # imm = 0x5555555555555555
14 ; AVX1-NEXT:    andq %r8, %rax
15 ; AVX1-NEXT:    subq %rax, %rdx
16 ; AVX1-NEXT:    movabsq $3689348814741910323, %rax # imm = 0x3333333333333333
17 ; AVX1-NEXT:    movq %rdx, %rsi
18 ; AVX1-NEXT:    andq %rax, %rsi
19 ; AVX1-NEXT:    shrq $2, %rdx
20 ; AVX1-NEXT:    andq %rax, %rdx
21 ; AVX1-NEXT:    addq %rsi, %rdx
22 ; AVX1-NEXT:    movq %rdx, %rdi
23 ; AVX1-NEXT:    shrq $4, %rdi
24 ; AVX1-NEXT:    addq %rdx, %rdi
25 ; AVX1-NEXT:    movabsq $1085102592571150095, %rdx # imm = 0xF0F0F0F0F0F0F0F
26 ; AVX1-NEXT:    andq %rdx, %rdi
27 ; AVX1-NEXT:    movabsq $72340172838076673, %rsi # imm = 0x101010101010101
28 ; AVX1-NEXT:    imulq %rsi, %rdi
29 ; AVX1-NEXT:    shrq $56, %rdi
30 ; AVX1-NEXT:    vmovq %rdi, %xmm2
31 ; AVX1-NEXT:    vmovq %xmm1, %rcx
32 ; AVX1-NEXT:    movq %rcx, %rdi
33 ; AVX1-NEXT:    shrq %rdi
34 ; AVX1-NEXT:    andq %r8, %rdi
35 ; AVX1-NEXT:    subq %rdi, %rcx
36 ; AVX1-NEXT:    movq %rcx, %rdi
37 ; AVX1-NEXT:    andq %rax, %rdi
38 ; AVX1-NEXT:    shrq $2, %rcx
39 ; AVX1-NEXT:    andq %rax, %rcx
40 ; AVX1-NEXT:    addq %rdi, %rcx
41 ; AVX1-NEXT:    movq %rcx, %rdi
42 ; AVX1-NEXT:    shrq $4, %rdi
43 ; AVX1-NEXT:    addq %rcx, %rdi
44 ; AVX1-NEXT:    andq %rdx, %rdi
45 ; AVX1-NEXT:    imulq %rsi, %rdi
46 ; AVX1-NEXT:    shrq $56, %rdi
47 ; AVX1-NEXT:    vmovq %rdi, %xmm1
48 ; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
49 ; AVX1-NEXT:    vpextrq $1, %xmm0, %rcx
50 ; AVX1-NEXT:    movq %rcx, %rdi
51 ; AVX1-NEXT:    shrq %rdi
52 ; AVX1-NEXT:    andq %r8, %rdi
53 ; AVX1-NEXT:    subq %rdi, %rcx
54 ; AVX1-NEXT:    movq %rcx, %rdi
55 ; AVX1-NEXT:    andq %rax, %rdi
56 ; AVX1-NEXT:    shrq $2, %rcx
57 ; AVX1-NEXT:    andq %rax, %rcx
58 ; AVX1-NEXT:    addq %rdi, %rcx
59 ; AVX1-NEXT:    movq %rcx, %rdi
60 ; AVX1-NEXT:    shrq $4, %rdi
61 ; AVX1-NEXT:    addq %rcx, %rdi
62 ; AVX1-NEXT:    andq %rdx, %rdi
63 ; AVX1-NEXT:    imulq %rsi, %rdi
64 ; AVX1-NEXT:    shrq $56, %rdi
65 ; AVX1-NEXT:    vmovq %rdi, %xmm2
66 ; AVX1-NEXT:    vmovq %xmm0, %rcx
67 ; AVX1-NEXT:    movq %rcx, %rdi
68 ; AVX1-NEXT:    shrq %rdi
69 ; AVX1-NEXT:    andq %r8, %rdi
70 ; AVX1-NEXT:    subq %rdi, %rcx
71 ; AVX1-NEXT:    movq %rcx, %rdi
72 ; AVX1-NEXT:    andq %rax, %rdi
73 ; AVX1-NEXT:    shrq $2, %rcx
74 ; AVX1-NEXT:    andq %rax, %rcx
75 ; AVX1-NEXT:    addq %rdi, %rcx
76 ; AVX1-NEXT:    movq %rcx, %rax
77 ; AVX1-NEXT:    shrq $4, %rax
78 ; AVX1-NEXT:    addq %rcx, %rax
79 ; AVX1-NEXT:    andq %rdx, %rax
80 ; AVX1-NEXT:    imulq %rsi, %rax
81 ; AVX1-NEXT:    shrq $56, %rax
82 ; AVX1-NEXT:    vmovq %rax, %xmm0
83 ; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
84 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
85 ; AVX1-NEXT:    retq
86 ;
87 ; AVX2-LABEL: testv4i64:
88 ; AVX2:       # BB#0:
89 ; AVX2-NEXT:    vpsrlq $1, %ymm0, %ymm1
90 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
91 ; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1
92 ; AVX2-NEXT:    vpsubq %ymm1, %ymm0, %ymm0
93 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm1
94 ; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
95 ; AVX2-NEXT:    vpsrlq $2, %ymm0, %ymm0
96 ; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
97 ; AVX2-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
98 ; AVX2-NEXT:    vpsrlq $4, %ymm0, %ymm1
99 ; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
100 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm1
101 ; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
102 ; AVX2-NEXT:    vpsrlq $8, %ymm0, %ymm1
103 ; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
104 ; AVX2-NEXT:    vpsrlq $16, %ymm0, %ymm1
105 ; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
106 ; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm1
107 ; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
108 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm1
109 ; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
110 ; AVX2-NEXT:    retq
111   %out = call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %in)
112   ret <4 x i64> %out
113 }
114
115 define <8 x i32> @testv8i32(<8 x i32> %in) {
116 ; AVX1-LABEL: testv8i32:
117 ; AVX1:       # BB#0:
118 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
119 ; AVX1-NEXT:    vpextrd $1, %xmm1, %eax
120 ; AVX1-NEXT:    movl %eax, %ecx
121 ; AVX1-NEXT:    shrl %ecx
122 ; AVX1-NEXT:    andl $1431655765, %ecx # imm = 0x55555555
123 ; AVX1-NEXT:    subl %ecx, %eax
124 ; AVX1-NEXT:    movl %eax, %ecx
125 ; AVX1-NEXT:    andl $858993459, %ecx # imm = 0x33333333
126 ; AVX1-NEXT:    shrl $2, %eax
127 ; AVX1-NEXT:    andl $858993459, %eax # imm = 0x33333333
128 ; AVX1-NEXT:    addl %ecx, %eax
129 ; AVX1-NEXT:    movl %eax, %ecx
130 ; AVX1-NEXT:    shrl $4, %ecx
131 ; AVX1-NEXT:    addl %eax, %ecx
132 ; AVX1-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F
133 ; AVX1-NEXT:    imull $16843009, %ecx, %eax # imm = 0x1010101
134 ; AVX1-NEXT:    shrl $24, %eax
135 ; AVX1-NEXT:    vmovd %xmm1, %ecx
136 ; AVX1-NEXT:    movl %ecx, %edx
137 ; AVX1-NEXT:    shrl %edx
138 ; AVX1-NEXT:    andl $1431655765, %edx # imm = 0x55555555
139 ; AVX1-NEXT:    subl %edx, %ecx
140 ; AVX1-NEXT:    movl %ecx, %edx
141 ; AVX1-NEXT:    andl $858993459, %edx # imm = 0x33333333
142 ; AVX1-NEXT:    shrl $2, %ecx
143 ; AVX1-NEXT:    andl $858993459, %ecx # imm = 0x33333333
144 ; AVX1-NEXT:    addl %edx, %ecx
145 ; AVX1-NEXT:    movl %ecx, %edx
146 ; AVX1-NEXT:    shrl $4, %edx
147 ; AVX1-NEXT:    addl %ecx, %edx
148 ; AVX1-NEXT:    andl $252645135, %edx # imm = 0xF0F0F0F
149 ; AVX1-NEXT:    imull $16843009, %edx, %ecx # imm = 0x1010101
150 ; AVX1-NEXT:    shrl $24, %ecx
151 ; AVX1-NEXT:    vmovd %ecx, %xmm2
152 ; AVX1-NEXT:    vpinsrd $1, %eax, %xmm2, %xmm2
153 ; AVX1-NEXT:    vpextrd $2, %xmm1, %eax
154 ; AVX1-NEXT:    movl %eax, %ecx
155 ; AVX1-NEXT:    shrl %ecx
156 ; AVX1-NEXT:    andl $1431655765, %ecx # imm = 0x55555555
157 ; AVX1-NEXT:    subl %ecx, %eax
158 ; AVX1-NEXT:    movl %eax, %ecx
159 ; AVX1-NEXT:    andl $858993459, %ecx # imm = 0x33333333
160 ; AVX1-NEXT:    shrl $2, %eax
161 ; AVX1-NEXT:    andl $858993459, %eax # imm = 0x33333333
162 ; AVX1-NEXT:    addl %ecx, %eax
163 ; AVX1-NEXT:    movl %eax, %ecx
164 ; AVX1-NEXT:    shrl $4, %ecx
165 ; AVX1-NEXT:    addl %eax, %ecx
166 ; AVX1-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F
167 ; AVX1-NEXT:    imull $16843009, %ecx, %eax # imm = 0x1010101
168 ; AVX1-NEXT:    shrl $24, %eax
169 ; AVX1-NEXT:    vpinsrd $2, %eax, %xmm2, %xmm2
170 ; AVX1-NEXT:    vpextrd $3, %xmm1, %eax
171 ; AVX1-NEXT:    movl %eax, %ecx
172 ; AVX1-NEXT:    shrl %ecx
173 ; AVX1-NEXT:    andl $1431655765, %ecx # imm = 0x55555555
174 ; AVX1-NEXT:    subl %ecx, %eax
175 ; AVX1-NEXT:    movl %eax, %ecx
176 ; AVX1-NEXT:    andl $858993459, %ecx # imm = 0x33333333
177 ; AVX1-NEXT:    shrl $2, %eax
178 ; AVX1-NEXT:    andl $858993459, %eax # imm = 0x33333333
179 ; AVX1-NEXT:    addl %ecx, %eax
180 ; AVX1-NEXT:    movl %eax, %ecx
181 ; AVX1-NEXT:    shrl $4, %ecx
182 ; AVX1-NEXT:    addl %eax, %ecx
183 ; AVX1-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F
184 ; AVX1-NEXT:    imull $16843009, %ecx, %eax # imm = 0x1010101
185 ; AVX1-NEXT:    shrl $24, %eax
186 ; AVX1-NEXT:    vpinsrd $3, %eax, %xmm2, %xmm1
187 ; AVX1-NEXT:    vpextrd $1, %xmm0, %eax
188 ; AVX1-NEXT:    movl %eax, %ecx
189 ; AVX1-NEXT:    shrl %ecx
190 ; AVX1-NEXT:    andl $1431655765, %ecx # imm = 0x55555555
191 ; AVX1-NEXT:    subl %ecx, %eax
192 ; AVX1-NEXT:    movl %eax, %ecx
193 ; AVX1-NEXT:    andl $858993459, %ecx # imm = 0x33333333
194 ; AVX1-NEXT:    shrl $2, %eax
195 ; AVX1-NEXT:    andl $858993459, %eax # imm = 0x33333333
196 ; AVX1-NEXT:    addl %ecx, %eax
197 ; AVX1-NEXT:    movl %eax, %ecx
198 ; AVX1-NEXT:    shrl $4, %ecx
199 ; AVX1-NEXT:    addl %eax, %ecx
200 ; AVX1-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F
201 ; AVX1-NEXT:    imull $16843009, %ecx, %eax # imm = 0x1010101
202 ; AVX1-NEXT:    shrl $24, %eax
203 ; AVX1-NEXT:    vmovd %xmm0, %ecx
204 ; AVX1-NEXT:    movl %ecx, %edx
205 ; AVX1-NEXT:    shrl %edx
206 ; AVX1-NEXT:    andl $1431655765, %edx # imm = 0x55555555
207 ; AVX1-NEXT:    subl %edx, %ecx
208 ; AVX1-NEXT:    movl %ecx, %edx
209 ; AVX1-NEXT:    andl $858993459, %edx # imm = 0x33333333
210 ; AVX1-NEXT:    shrl $2, %ecx
211 ; AVX1-NEXT:    andl $858993459, %ecx # imm = 0x33333333
212 ; AVX1-NEXT:    addl %edx, %ecx
213 ; AVX1-NEXT:    movl %ecx, %edx
214 ; AVX1-NEXT:    shrl $4, %edx
215 ; AVX1-NEXT:    addl %ecx, %edx
216 ; AVX1-NEXT:    andl $252645135, %edx # imm = 0xF0F0F0F
217 ; AVX1-NEXT:    imull $16843009, %edx, %ecx # imm = 0x1010101
218 ; AVX1-NEXT:    shrl $24, %ecx
219 ; AVX1-NEXT:    vmovd %ecx, %xmm2
220 ; AVX1-NEXT:    vpinsrd $1, %eax, %xmm2, %xmm2
221 ; AVX1-NEXT:    vpextrd $2, %xmm0, %eax
222 ; AVX1-NEXT:    movl %eax, %ecx
223 ; AVX1-NEXT:    shrl %ecx
224 ; AVX1-NEXT:    andl $1431655765, %ecx # imm = 0x55555555
225 ; AVX1-NEXT:    subl %ecx, %eax
226 ; AVX1-NEXT:    movl %eax, %ecx
227 ; AVX1-NEXT:    andl $858993459, %ecx # imm = 0x33333333
228 ; AVX1-NEXT:    shrl $2, %eax
229 ; AVX1-NEXT:    andl $858993459, %eax # imm = 0x33333333
230 ; AVX1-NEXT:    addl %ecx, %eax
231 ; AVX1-NEXT:    movl %eax, %ecx
232 ; AVX1-NEXT:    shrl $4, %ecx
233 ; AVX1-NEXT:    addl %eax, %ecx
234 ; AVX1-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F
235 ; AVX1-NEXT:    imull $16843009, %ecx, %eax # imm = 0x1010101
236 ; AVX1-NEXT:    shrl $24, %eax
237 ; AVX1-NEXT:    vpinsrd $2, %eax, %xmm2, %xmm2
238 ; AVX1-NEXT:    vpextrd $3, %xmm0, %eax
239 ; AVX1-NEXT:    movl %eax, %ecx
240 ; AVX1-NEXT:    shrl %ecx
241 ; AVX1-NEXT:    andl $1431655765, %ecx # imm = 0x55555555
242 ; AVX1-NEXT:    subl %ecx, %eax
243 ; AVX1-NEXT:    movl %eax, %ecx
244 ; AVX1-NEXT:    andl $858993459, %ecx # imm = 0x33333333
245 ; AVX1-NEXT:    shrl $2, %eax
246 ; AVX1-NEXT:    andl $858993459, %eax # imm = 0x33333333
247 ; AVX1-NEXT:    addl %ecx, %eax
248 ; AVX1-NEXT:    movl %eax, %ecx
249 ; AVX1-NEXT:    shrl $4, %ecx
250 ; AVX1-NEXT:    addl %eax, %ecx
251 ; AVX1-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F
252 ; AVX1-NEXT:    imull $16843009, %ecx, %eax # imm = 0x1010101
253 ; AVX1-NEXT:    shrl $24, %eax
254 ; AVX1-NEXT:    vpinsrd $3, %eax, %xmm2, %xmm0
255 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
256 ; AVX1-NEXT:    retq
257 ;
258 ; AVX2-LABEL: testv8i32:
259 ; AVX2:       # BB#0:
260 ; AVX2-NEXT:    vpsrld $1, %ymm0, %ymm1
261 ; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %ymm2
262 ; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1
263 ; AVX2-NEXT:    vpsubd %ymm1, %ymm0, %ymm0
264 ; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %ymm1
265 ; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
266 ; AVX2-NEXT:    vpsrld $2, %ymm0, %ymm0
267 ; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
268 ; AVX2-NEXT:    vpaddd %ymm0, %ymm2, %ymm0
269 ; AVX2-NEXT:    vpsrld $4, %ymm0, %ymm1
270 ; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
271 ; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %ymm1
272 ; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
273 ; AVX2-NEXT:    vpsrld $8, %ymm0, %ymm1
274 ; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
275 ; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm1
276 ; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
277 ; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %ymm1
278 ; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
279 ; AVX2-NEXT:    retq
280   %out = call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %in)
281   ret <8 x i32> %out
282 }
283
284 define <16 x i16> @testv16i16(<16 x i16> %in) {
285 ; AVX1-LABEL: testv16i16:
286 ; AVX1:       # BB#0:
287 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
288 ; AVX1-NEXT:    vpextrw $1, %xmm1, %eax
289 ; AVX1-NEXT:    movl %eax, %ecx
290 ; AVX1-NEXT:    shrl %ecx
291 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
292 ; AVX1-NEXT:    subl %ecx, %eax
293 ; AVX1-NEXT:    movl %eax, %ecx
294 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
295 ; AVX1-NEXT:    shrl $2, %eax
296 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
297 ; AVX1-NEXT:    addl %ecx, %eax
298 ; AVX1-NEXT:    movl %eax, %ecx
299 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
300 ; AVX1-NEXT:    shrl $4, %ecx
301 ; AVX1-NEXT:    addl %eax, %ecx
302 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
303 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
304 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
305 ; AVX1-NEXT:    vmovd %xmm1, %ecx
306 ; AVX1-NEXT:    movl %ecx, %edx
307 ; AVX1-NEXT:    shrl %edx
308 ; AVX1-NEXT:    andl $21845, %edx # imm = 0x5555
309 ; AVX1-NEXT:    subl %edx, %ecx
310 ; AVX1-NEXT:    movl %ecx, %edx
311 ; AVX1-NEXT:    andl $13107, %edx # imm = 0x3333
312 ; AVX1-NEXT:    shrl $2, %ecx
313 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
314 ; AVX1-NEXT:    addl %edx, %ecx
315 ; AVX1-NEXT:    movl %ecx, %edx
316 ; AVX1-NEXT:    andl $65520, %edx # imm = 0xFFF0
317 ; AVX1-NEXT:    shrl $4, %edx
318 ; AVX1-NEXT:    addl %ecx, %edx
319 ; AVX1-NEXT:    andl $3855, %edx # imm = 0xF0F
320 ; AVX1-NEXT:    imull $257, %edx, %ecx # imm = 0x101
321 ; AVX1-NEXT:    movzbl %ch, %ecx # NOREX
322 ; AVX1-NEXT:    vmovd %ecx, %xmm2
323 ; AVX1-NEXT:    vpinsrw $1, %eax, %xmm2, %xmm2
324 ; AVX1-NEXT:    vpextrw $2, %xmm1, %eax
325 ; AVX1-NEXT:    movl %eax, %ecx
326 ; AVX1-NEXT:    shrl %ecx
327 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
328 ; AVX1-NEXT:    subl %ecx, %eax
329 ; AVX1-NEXT:    movl %eax, %ecx
330 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
331 ; AVX1-NEXT:    shrl $2, %eax
332 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
333 ; AVX1-NEXT:    addl %ecx, %eax
334 ; AVX1-NEXT:    movl %eax, %ecx
335 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
336 ; AVX1-NEXT:    shrl $4, %ecx
337 ; AVX1-NEXT:    addl %eax, %ecx
338 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
339 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
340 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
341 ; AVX1-NEXT:    vpinsrw $2, %eax, %xmm2, %xmm2
342 ; AVX1-NEXT:    vpextrw $3, %xmm1, %eax
343 ; AVX1-NEXT:    movl %eax, %ecx
344 ; AVX1-NEXT:    shrl %ecx
345 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
346 ; AVX1-NEXT:    subl %ecx, %eax
347 ; AVX1-NEXT:    movl %eax, %ecx
348 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
349 ; AVX1-NEXT:    shrl $2, %eax
350 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
351 ; AVX1-NEXT:    addl %ecx, %eax
352 ; AVX1-NEXT:    movl %eax, %ecx
353 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
354 ; AVX1-NEXT:    shrl $4, %ecx
355 ; AVX1-NEXT:    addl %eax, %ecx
356 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
357 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
358 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
359 ; AVX1-NEXT:    vpinsrw $3, %eax, %xmm2, %xmm2
360 ; AVX1-NEXT:    vpextrw $4, %xmm1, %eax
361 ; AVX1-NEXT:    movl %eax, %ecx
362 ; AVX1-NEXT:    shrl %ecx
363 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
364 ; AVX1-NEXT:    subl %ecx, %eax
365 ; AVX1-NEXT:    movl %eax, %ecx
366 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
367 ; AVX1-NEXT:    shrl $2, %eax
368 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
369 ; AVX1-NEXT:    addl %ecx, %eax
370 ; AVX1-NEXT:    movl %eax, %ecx
371 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
372 ; AVX1-NEXT:    shrl $4, %ecx
373 ; AVX1-NEXT:    addl %eax, %ecx
374 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
375 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
376 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
377 ; AVX1-NEXT:    vpinsrw $4, %eax, %xmm2, %xmm2
378 ; AVX1-NEXT:    vpextrw $5, %xmm1, %eax
379 ; AVX1-NEXT:    movl %eax, %ecx
380 ; AVX1-NEXT:    shrl %ecx
381 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
382 ; AVX1-NEXT:    subl %ecx, %eax
383 ; AVX1-NEXT:    movl %eax, %ecx
384 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
385 ; AVX1-NEXT:    shrl $2, %eax
386 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
387 ; AVX1-NEXT:    addl %ecx, %eax
388 ; AVX1-NEXT:    movl %eax, %ecx
389 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
390 ; AVX1-NEXT:    shrl $4, %ecx
391 ; AVX1-NEXT:    addl %eax, %ecx
392 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
393 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
394 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
395 ; AVX1-NEXT:    vpinsrw $5, %eax, %xmm2, %xmm2
396 ; AVX1-NEXT:    vpextrw $6, %xmm1, %eax
397 ; AVX1-NEXT:    movl %eax, %ecx
398 ; AVX1-NEXT:    shrl %ecx
399 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
400 ; AVX1-NEXT:    subl %ecx, %eax
401 ; AVX1-NEXT:    movl %eax, %ecx
402 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
403 ; AVX1-NEXT:    shrl $2, %eax
404 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
405 ; AVX1-NEXT:    addl %ecx, %eax
406 ; AVX1-NEXT:    movl %eax, %ecx
407 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
408 ; AVX1-NEXT:    shrl $4, %ecx
409 ; AVX1-NEXT:    addl %eax, %ecx
410 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
411 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
412 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
413 ; AVX1-NEXT:    vpinsrw $6, %eax, %xmm2, %xmm2
414 ; AVX1-NEXT:    vpextrw $7, %xmm1, %eax
415 ; AVX1-NEXT:    movl %eax, %ecx
416 ; AVX1-NEXT:    shrl %ecx
417 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
418 ; AVX1-NEXT:    subl %ecx, %eax
419 ; AVX1-NEXT:    movl %eax, %ecx
420 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
421 ; AVX1-NEXT:    shrl $2, %eax
422 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
423 ; AVX1-NEXT:    addl %ecx, %eax
424 ; AVX1-NEXT:    movl %eax, %ecx
425 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
426 ; AVX1-NEXT:    shrl $4, %ecx
427 ; AVX1-NEXT:    addl %eax, %ecx
428 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
429 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
430 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
431 ; AVX1-NEXT:    vpinsrw $7, %eax, %xmm2, %xmm1
432 ; AVX1-NEXT:    vpextrw $1, %xmm0, %eax
433 ; AVX1-NEXT:    movl %eax, %ecx
434 ; AVX1-NEXT:    shrl %ecx
435 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
436 ; AVX1-NEXT:    subl %ecx, %eax
437 ; AVX1-NEXT:    movl %eax, %ecx
438 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
439 ; AVX1-NEXT:    shrl $2, %eax
440 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
441 ; AVX1-NEXT:    addl %ecx, %eax
442 ; AVX1-NEXT:    movl %eax, %ecx
443 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
444 ; AVX1-NEXT:    shrl $4, %ecx
445 ; AVX1-NEXT:    addl %eax, %ecx
446 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
447 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
448 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
449 ; AVX1-NEXT:    vmovd %xmm0, %ecx
450 ; AVX1-NEXT:    movl %ecx, %edx
451 ; AVX1-NEXT:    shrl %edx
452 ; AVX1-NEXT:    andl $21845, %edx # imm = 0x5555
453 ; AVX1-NEXT:    subl %edx, %ecx
454 ; AVX1-NEXT:    movl %ecx, %edx
455 ; AVX1-NEXT:    andl $13107, %edx # imm = 0x3333
456 ; AVX1-NEXT:    shrl $2, %ecx
457 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
458 ; AVX1-NEXT:    addl %edx, %ecx
459 ; AVX1-NEXT:    movl %ecx, %edx
460 ; AVX1-NEXT:    andl $65520, %edx # imm = 0xFFF0
461 ; AVX1-NEXT:    shrl $4, %edx
462 ; AVX1-NEXT:    addl %ecx, %edx
463 ; AVX1-NEXT:    andl $3855, %edx # imm = 0xF0F
464 ; AVX1-NEXT:    imull $257, %edx, %ecx # imm = 0x101
465 ; AVX1-NEXT:    movzbl %ch, %ecx # NOREX
466 ; AVX1-NEXT:    vmovd %ecx, %xmm2
467 ; AVX1-NEXT:    vpinsrw $1, %eax, %xmm2, %xmm2
468 ; AVX1-NEXT:    vpextrw $2, %xmm0, %eax
469 ; AVX1-NEXT:    movl %eax, %ecx
470 ; AVX1-NEXT:    shrl %ecx
471 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
472 ; AVX1-NEXT:    subl %ecx, %eax
473 ; AVX1-NEXT:    movl %eax, %ecx
474 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
475 ; AVX1-NEXT:    shrl $2, %eax
476 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
477 ; AVX1-NEXT:    addl %ecx, %eax
478 ; AVX1-NEXT:    movl %eax, %ecx
479 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
480 ; AVX1-NEXT:    shrl $4, %ecx
481 ; AVX1-NEXT:    addl %eax, %ecx
482 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
483 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
484 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
485 ; AVX1-NEXT:    vpinsrw $2, %eax, %xmm2, %xmm2
486 ; AVX1-NEXT:    vpextrw $3, %xmm0, %eax
487 ; AVX1-NEXT:    movl %eax, %ecx
488 ; AVX1-NEXT:    shrl %ecx
489 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
490 ; AVX1-NEXT:    subl %ecx, %eax
491 ; AVX1-NEXT:    movl %eax, %ecx
492 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
493 ; AVX1-NEXT:    shrl $2, %eax
494 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
495 ; AVX1-NEXT:    addl %ecx, %eax
496 ; AVX1-NEXT:    movl %eax, %ecx
497 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
498 ; AVX1-NEXT:    shrl $4, %ecx
499 ; AVX1-NEXT:    addl %eax, %ecx
500 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
501 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
502 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
503 ; AVX1-NEXT:    vpinsrw $3, %eax, %xmm2, %xmm2
504 ; AVX1-NEXT:    vpextrw $4, %xmm0, %eax
505 ; AVX1-NEXT:    movl %eax, %ecx
506 ; AVX1-NEXT:    shrl %ecx
507 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
508 ; AVX1-NEXT:    subl %ecx, %eax
509 ; AVX1-NEXT:    movl %eax, %ecx
510 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
511 ; AVX1-NEXT:    shrl $2, %eax
512 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
513 ; AVX1-NEXT:    addl %ecx, %eax
514 ; AVX1-NEXT:    movl %eax, %ecx
515 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
516 ; AVX1-NEXT:    shrl $4, %ecx
517 ; AVX1-NEXT:    addl %eax, %ecx
518 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
519 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
520 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
521 ; AVX1-NEXT:    vpinsrw $4, %eax, %xmm2, %xmm2
522 ; AVX1-NEXT:    vpextrw $5, %xmm0, %eax
523 ; AVX1-NEXT:    movl %eax, %ecx
524 ; AVX1-NEXT:    shrl %ecx
525 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
526 ; AVX1-NEXT:    subl %ecx, %eax
527 ; AVX1-NEXT:    movl %eax, %ecx
528 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
529 ; AVX1-NEXT:    shrl $2, %eax
530 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
531 ; AVX1-NEXT:    addl %ecx, %eax
532 ; AVX1-NEXT:    movl %eax, %ecx
533 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
534 ; AVX1-NEXT:    shrl $4, %ecx
535 ; AVX1-NEXT:    addl %eax, %ecx
536 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
537 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
538 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
539 ; AVX1-NEXT:    vpinsrw $5, %eax, %xmm2, %xmm2
540 ; AVX1-NEXT:    vpextrw $6, %xmm0, %eax
541 ; AVX1-NEXT:    movl %eax, %ecx
542 ; AVX1-NEXT:    shrl %ecx
543 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
544 ; AVX1-NEXT:    subl %ecx, %eax
545 ; AVX1-NEXT:    movl %eax, %ecx
546 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
547 ; AVX1-NEXT:    shrl $2, %eax
548 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
549 ; AVX1-NEXT:    addl %ecx, %eax
550 ; AVX1-NEXT:    movl %eax, %ecx
551 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
552 ; AVX1-NEXT:    shrl $4, %ecx
553 ; AVX1-NEXT:    addl %eax, %ecx
554 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
555 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
556 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
557 ; AVX1-NEXT:    vpinsrw $6, %eax, %xmm2, %xmm2
558 ; AVX1-NEXT:    vpextrw $7, %xmm0, %eax
559 ; AVX1-NEXT:    movl %eax, %ecx
560 ; AVX1-NEXT:    shrl %ecx
561 ; AVX1-NEXT:    andl $21845, %ecx # imm = 0x5555
562 ; AVX1-NEXT:    subl %ecx, %eax
563 ; AVX1-NEXT:    movl %eax, %ecx
564 ; AVX1-NEXT:    andl $13107, %ecx # imm = 0x3333
565 ; AVX1-NEXT:    shrl $2, %eax
566 ; AVX1-NEXT:    andl $13107, %eax # imm = 0x3333
567 ; AVX1-NEXT:    addl %ecx, %eax
568 ; AVX1-NEXT:    movl %eax, %ecx
569 ; AVX1-NEXT:    andl $65520, %ecx # imm = 0xFFF0
570 ; AVX1-NEXT:    shrl $4, %ecx
571 ; AVX1-NEXT:    addl %eax, %ecx
572 ; AVX1-NEXT:    andl $3855, %ecx # imm = 0xF0F
573 ; AVX1-NEXT:    imull $257, %ecx, %eax # imm = 0x101
574 ; AVX1-NEXT:    movzbl %ah, %eax # NOREX
575 ; AVX1-NEXT:    vpinsrw $7, %eax, %xmm2, %xmm0
576 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
577 ; AVX1-NEXT:    retq
578 ;
579 ; AVX2-LABEL: testv16i16:
580 ; AVX2:       # BB#0:
581 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
582 ; AVX2-NEXT:    vpextrw $1, %xmm1, %eax
583 ; AVX2-NEXT:    movl %eax, %ecx
584 ; AVX2-NEXT:    shrl %ecx
585 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
586 ; AVX2-NEXT:    subl %ecx, %eax
587 ; AVX2-NEXT:    movl %eax, %ecx
588 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
589 ; AVX2-NEXT:    shrl $2, %eax
590 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
591 ; AVX2-NEXT:    addl %ecx, %eax
592 ; AVX2-NEXT:    movl %eax, %ecx
593 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
594 ; AVX2-NEXT:    shrl $4, %ecx
595 ; AVX2-NEXT:    addl %eax, %ecx
596 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
597 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
598 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
599 ; AVX2-NEXT:    vmovd %xmm1, %ecx
600 ; AVX2-NEXT:    movl %ecx, %edx
601 ; AVX2-NEXT:    shrl %edx
602 ; AVX2-NEXT:    andl $21845, %edx # imm = 0x5555
603 ; AVX2-NEXT:    subl %edx, %ecx
604 ; AVX2-NEXT:    movl %ecx, %edx
605 ; AVX2-NEXT:    andl $13107, %edx # imm = 0x3333
606 ; AVX2-NEXT:    shrl $2, %ecx
607 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
608 ; AVX2-NEXT:    addl %edx, %ecx
609 ; AVX2-NEXT:    movl %ecx, %edx
610 ; AVX2-NEXT:    andl $65520, %edx # imm = 0xFFF0
611 ; AVX2-NEXT:    shrl $4, %edx
612 ; AVX2-NEXT:    addl %ecx, %edx
613 ; AVX2-NEXT:    andl $3855, %edx # imm = 0xF0F
614 ; AVX2-NEXT:    imull $257, %edx, %ecx # imm = 0x101
615 ; AVX2-NEXT:    movzbl %ch, %ecx # NOREX
616 ; AVX2-NEXT:    vmovd %ecx, %xmm2
617 ; AVX2-NEXT:    vpinsrw $1, %eax, %xmm2, %xmm2
618 ; AVX2-NEXT:    vpextrw $2, %xmm1, %eax
619 ; AVX2-NEXT:    movl %eax, %ecx
620 ; AVX2-NEXT:    shrl %ecx
621 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
622 ; AVX2-NEXT:    subl %ecx, %eax
623 ; AVX2-NEXT:    movl %eax, %ecx
624 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
625 ; AVX2-NEXT:    shrl $2, %eax
626 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
627 ; AVX2-NEXT:    addl %ecx, %eax
628 ; AVX2-NEXT:    movl %eax, %ecx
629 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
630 ; AVX2-NEXT:    shrl $4, %ecx
631 ; AVX2-NEXT:    addl %eax, %ecx
632 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
633 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
634 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
635 ; AVX2-NEXT:    vpinsrw $2, %eax, %xmm2, %xmm2
636 ; AVX2-NEXT:    vpextrw $3, %xmm1, %eax
637 ; AVX2-NEXT:    movl %eax, %ecx
638 ; AVX2-NEXT:    shrl %ecx
639 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
640 ; AVX2-NEXT:    subl %ecx, %eax
641 ; AVX2-NEXT:    movl %eax, %ecx
642 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
643 ; AVX2-NEXT:    shrl $2, %eax
644 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
645 ; AVX2-NEXT:    addl %ecx, %eax
646 ; AVX2-NEXT:    movl %eax, %ecx
647 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
648 ; AVX2-NEXT:    shrl $4, %ecx
649 ; AVX2-NEXT:    addl %eax, %ecx
650 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
651 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
652 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
653 ; AVX2-NEXT:    vpinsrw $3, %eax, %xmm2, %xmm2
654 ; AVX2-NEXT:    vpextrw $4, %xmm1, %eax
655 ; AVX2-NEXT:    movl %eax, %ecx
656 ; AVX2-NEXT:    shrl %ecx
657 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
658 ; AVX2-NEXT:    subl %ecx, %eax
659 ; AVX2-NEXT:    movl %eax, %ecx
660 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
661 ; AVX2-NEXT:    shrl $2, %eax
662 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
663 ; AVX2-NEXT:    addl %ecx, %eax
664 ; AVX2-NEXT:    movl %eax, %ecx
665 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
666 ; AVX2-NEXT:    shrl $4, %ecx
667 ; AVX2-NEXT:    addl %eax, %ecx
668 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
669 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
670 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
671 ; AVX2-NEXT:    vpinsrw $4, %eax, %xmm2, %xmm2
672 ; AVX2-NEXT:    vpextrw $5, %xmm1, %eax
673 ; AVX2-NEXT:    movl %eax, %ecx
674 ; AVX2-NEXT:    shrl %ecx
675 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
676 ; AVX2-NEXT:    subl %ecx, %eax
677 ; AVX2-NEXT:    movl %eax, %ecx
678 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
679 ; AVX2-NEXT:    shrl $2, %eax
680 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
681 ; AVX2-NEXT:    addl %ecx, %eax
682 ; AVX2-NEXT:    movl %eax, %ecx
683 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
684 ; AVX2-NEXT:    shrl $4, %ecx
685 ; AVX2-NEXT:    addl %eax, %ecx
686 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
687 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
688 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
689 ; AVX2-NEXT:    vpinsrw $5, %eax, %xmm2, %xmm2
690 ; AVX2-NEXT:    vpextrw $6, %xmm1, %eax
691 ; AVX2-NEXT:    movl %eax, %ecx
692 ; AVX2-NEXT:    shrl %ecx
693 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
694 ; AVX2-NEXT:    subl %ecx, %eax
695 ; AVX2-NEXT:    movl %eax, %ecx
696 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
697 ; AVX2-NEXT:    shrl $2, %eax
698 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
699 ; AVX2-NEXT:    addl %ecx, %eax
700 ; AVX2-NEXT:    movl %eax, %ecx
701 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
702 ; AVX2-NEXT:    shrl $4, %ecx
703 ; AVX2-NEXT:    addl %eax, %ecx
704 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
705 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
706 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
707 ; AVX2-NEXT:    vpinsrw $6, %eax, %xmm2, %xmm2
708 ; AVX2-NEXT:    vpextrw $7, %xmm1, %eax
709 ; AVX2-NEXT:    movl %eax, %ecx
710 ; AVX2-NEXT:    shrl %ecx
711 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
712 ; AVX2-NEXT:    subl %ecx, %eax
713 ; AVX2-NEXT:    movl %eax, %ecx
714 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
715 ; AVX2-NEXT:    shrl $2, %eax
716 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
717 ; AVX2-NEXT:    addl %ecx, %eax
718 ; AVX2-NEXT:    movl %eax, %ecx
719 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
720 ; AVX2-NEXT:    shrl $4, %ecx
721 ; AVX2-NEXT:    addl %eax, %ecx
722 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
723 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
724 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
725 ; AVX2-NEXT:    vpinsrw $7, %eax, %xmm2, %xmm1
726 ; AVX2-NEXT:    vpextrw $1, %xmm0, %eax
727 ; AVX2-NEXT:    movl %eax, %ecx
728 ; AVX2-NEXT:    shrl %ecx
729 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
730 ; AVX2-NEXT:    subl %ecx, %eax
731 ; AVX2-NEXT:    movl %eax, %ecx
732 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
733 ; AVX2-NEXT:    shrl $2, %eax
734 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
735 ; AVX2-NEXT:    addl %ecx, %eax
736 ; AVX2-NEXT:    movl %eax, %ecx
737 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
738 ; AVX2-NEXT:    shrl $4, %ecx
739 ; AVX2-NEXT:    addl %eax, %ecx
740 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
741 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
742 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
743 ; AVX2-NEXT:    vmovd %xmm0, %ecx
744 ; AVX2-NEXT:    movl %ecx, %edx
745 ; AVX2-NEXT:    shrl %edx
746 ; AVX2-NEXT:    andl $21845, %edx # imm = 0x5555
747 ; AVX2-NEXT:    subl %edx, %ecx
748 ; AVX2-NEXT:    movl %ecx, %edx
749 ; AVX2-NEXT:    andl $13107, %edx # imm = 0x3333
750 ; AVX2-NEXT:    shrl $2, %ecx
751 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
752 ; AVX2-NEXT:    addl %edx, %ecx
753 ; AVX2-NEXT:    movl %ecx, %edx
754 ; AVX2-NEXT:    andl $65520, %edx # imm = 0xFFF0
755 ; AVX2-NEXT:    shrl $4, %edx
756 ; AVX2-NEXT:    addl %ecx, %edx
757 ; AVX2-NEXT:    andl $3855, %edx # imm = 0xF0F
758 ; AVX2-NEXT:    imull $257, %edx, %ecx # imm = 0x101
759 ; AVX2-NEXT:    movzbl %ch, %ecx # NOREX
760 ; AVX2-NEXT:    vmovd %ecx, %xmm2
761 ; AVX2-NEXT:    vpinsrw $1, %eax, %xmm2, %xmm2
762 ; AVX2-NEXT:    vpextrw $2, %xmm0, %eax
763 ; AVX2-NEXT:    movl %eax, %ecx
764 ; AVX2-NEXT:    shrl %ecx
765 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
766 ; AVX2-NEXT:    subl %ecx, %eax
767 ; AVX2-NEXT:    movl %eax, %ecx
768 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
769 ; AVX2-NEXT:    shrl $2, %eax
770 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
771 ; AVX2-NEXT:    addl %ecx, %eax
772 ; AVX2-NEXT:    movl %eax, %ecx
773 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
774 ; AVX2-NEXT:    shrl $4, %ecx
775 ; AVX2-NEXT:    addl %eax, %ecx
776 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
777 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
778 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
779 ; AVX2-NEXT:    vpinsrw $2, %eax, %xmm2, %xmm2
780 ; AVX2-NEXT:    vpextrw $3, %xmm0, %eax
781 ; AVX2-NEXT:    movl %eax, %ecx
782 ; AVX2-NEXT:    shrl %ecx
783 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
784 ; AVX2-NEXT:    subl %ecx, %eax
785 ; AVX2-NEXT:    movl %eax, %ecx
786 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
787 ; AVX2-NEXT:    shrl $2, %eax
788 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
789 ; AVX2-NEXT:    addl %ecx, %eax
790 ; AVX2-NEXT:    movl %eax, %ecx
791 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
792 ; AVX2-NEXT:    shrl $4, %ecx
793 ; AVX2-NEXT:    addl %eax, %ecx
794 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
795 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
796 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
797 ; AVX2-NEXT:    vpinsrw $3, %eax, %xmm2, %xmm2
798 ; AVX2-NEXT:    vpextrw $4, %xmm0, %eax
799 ; AVX2-NEXT:    movl %eax, %ecx
800 ; AVX2-NEXT:    shrl %ecx
801 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
802 ; AVX2-NEXT:    subl %ecx, %eax
803 ; AVX2-NEXT:    movl %eax, %ecx
804 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
805 ; AVX2-NEXT:    shrl $2, %eax
806 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
807 ; AVX2-NEXT:    addl %ecx, %eax
808 ; AVX2-NEXT:    movl %eax, %ecx
809 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
810 ; AVX2-NEXT:    shrl $4, %ecx
811 ; AVX2-NEXT:    addl %eax, %ecx
812 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
813 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
814 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
815 ; AVX2-NEXT:    vpinsrw $4, %eax, %xmm2, %xmm2
816 ; AVX2-NEXT:    vpextrw $5, %xmm0, %eax
817 ; AVX2-NEXT:    movl %eax, %ecx
818 ; AVX2-NEXT:    shrl %ecx
819 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
820 ; AVX2-NEXT:    subl %ecx, %eax
821 ; AVX2-NEXT:    movl %eax, %ecx
822 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
823 ; AVX2-NEXT:    shrl $2, %eax
824 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
825 ; AVX2-NEXT:    addl %ecx, %eax
826 ; AVX2-NEXT:    movl %eax, %ecx
827 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
828 ; AVX2-NEXT:    shrl $4, %ecx
829 ; AVX2-NEXT:    addl %eax, %ecx
830 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
831 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
832 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
833 ; AVX2-NEXT:    vpinsrw $5, %eax, %xmm2, %xmm2
834 ; AVX2-NEXT:    vpextrw $6, %xmm0, %eax
835 ; AVX2-NEXT:    movl %eax, %ecx
836 ; AVX2-NEXT:    shrl %ecx
837 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
838 ; AVX2-NEXT:    subl %ecx, %eax
839 ; AVX2-NEXT:    movl %eax, %ecx
840 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
841 ; AVX2-NEXT:    shrl $2, %eax
842 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
843 ; AVX2-NEXT:    addl %ecx, %eax
844 ; AVX2-NEXT:    movl %eax, %ecx
845 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
846 ; AVX2-NEXT:    shrl $4, %ecx
847 ; AVX2-NEXT:    addl %eax, %ecx
848 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
849 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
850 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
851 ; AVX2-NEXT:    vpinsrw $6, %eax, %xmm2, %xmm2
852 ; AVX2-NEXT:    vpextrw $7, %xmm0, %eax
853 ; AVX2-NEXT:    movl %eax, %ecx
854 ; AVX2-NEXT:    shrl %ecx
855 ; AVX2-NEXT:    andl $21845, %ecx # imm = 0x5555
856 ; AVX2-NEXT:    subl %ecx, %eax
857 ; AVX2-NEXT:    movl %eax, %ecx
858 ; AVX2-NEXT:    andl $13107, %ecx # imm = 0x3333
859 ; AVX2-NEXT:    shrl $2, %eax
860 ; AVX2-NEXT:    andl $13107, %eax # imm = 0x3333
861 ; AVX2-NEXT:    addl %ecx, %eax
862 ; AVX2-NEXT:    movl %eax, %ecx
863 ; AVX2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
864 ; AVX2-NEXT:    shrl $4, %ecx
865 ; AVX2-NEXT:    addl %eax, %ecx
866 ; AVX2-NEXT:    andl $3855, %ecx # imm = 0xF0F
867 ; AVX2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
868 ; AVX2-NEXT:    movzbl %ah, %eax # NOREX
869 ; AVX2-NEXT:    vpinsrw $7, %eax, %xmm2, %xmm0
870 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
871 ; AVX2-NEXT:    retq
872   %out = call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %in)
873   ret <16 x i16> %out
874 }
875
876 define <32 x i8> @testv32i8(<32 x i8> %in) {
877 ; AVX1-LABEL: testv32i8:
878 ; AVX1:       # BB#0:
879 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
880 ; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
881 ; AVX1-NEXT:    movb %al, %cl
882 ; AVX1-NEXT:    shrb %cl
883 ; AVX1-NEXT:    andb $85, %cl
884 ; AVX1-NEXT:    subb %cl, %al
885 ; AVX1-NEXT:    movb %al, %cl
886 ; AVX1-NEXT:    andb $51, %cl
887 ; AVX1-NEXT:    shrb $2, %al
888 ; AVX1-NEXT:    andb $51, %al
889 ; AVX1-NEXT:    addb %cl, %al
890 ; AVX1-NEXT:    movb %al, %cl
891 ; AVX1-NEXT:    shrb $4, %cl
892 ; AVX1-NEXT:    addb %al, %cl
893 ; AVX1-NEXT:    andb $15, %cl
894 ; AVX1-NEXT:    movzbl %cl, %eax
895 ; AVX1-NEXT:    vpextrb $0, %xmm1, %ecx
896 ; AVX1-NEXT:    movb %cl, %dl
897 ; AVX1-NEXT:    shrb %dl
898 ; AVX1-NEXT:    andb $85, %dl
899 ; AVX1-NEXT:    subb %dl, %cl
900 ; AVX1-NEXT:    movb %cl, %dl
901 ; AVX1-NEXT:    andb $51, %dl
902 ; AVX1-NEXT:    shrb $2, %cl
903 ; AVX1-NEXT:    andb $51, %cl
904 ; AVX1-NEXT:    addb %dl, %cl
905 ; AVX1-NEXT:    movb %cl, %dl
906 ; AVX1-NEXT:    shrb $4, %dl
907 ; AVX1-NEXT:    addb %cl, %dl
908 ; AVX1-NEXT:    andb $15, %dl
909 ; AVX1-NEXT:    movzbl %dl, %ecx
910 ; AVX1-NEXT:    vmovd %ecx, %xmm2
911 ; AVX1-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm2
912 ; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
913 ; AVX1-NEXT:    movb %al, %cl
914 ; AVX1-NEXT:    shrb %cl
915 ; AVX1-NEXT:    andb $85, %cl
916 ; AVX1-NEXT:    subb %cl, %al
917 ; AVX1-NEXT:    movb %al, %cl
918 ; AVX1-NEXT:    andb $51, %cl
919 ; AVX1-NEXT:    shrb $2, %al
920 ; AVX1-NEXT:    andb $51, %al
921 ; AVX1-NEXT:    addb %cl, %al
922 ; AVX1-NEXT:    movb %al, %cl
923 ; AVX1-NEXT:    shrb $4, %cl
924 ; AVX1-NEXT:    addb %al, %cl
925 ; AVX1-NEXT:    andb $15, %cl
926 ; AVX1-NEXT:    movzbl %cl, %eax
927 ; AVX1-NEXT:    vpinsrb $2, %eax, %xmm2, %xmm2
928 ; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
929 ; AVX1-NEXT:    movb %al, %cl
930 ; AVX1-NEXT:    shrb %cl
931 ; AVX1-NEXT:    andb $85, %cl
932 ; AVX1-NEXT:    subb %cl, %al
933 ; AVX1-NEXT:    movb %al, %cl
934 ; AVX1-NEXT:    andb $51, %cl
935 ; AVX1-NEXT:    shrb $2, %al
936 ; AVX1-NEXT:    andb $51, %al
937 ; AVX1-NEXT:    addb %cl, %al
938 ; AVX1-NEXT:    movb %al, %cl
939 ; AVX1-NEXT:    shrb $4, %cl
940 ; AVX1-NEXT:    addb %al, %cl
941 ; AVX1-NEXT:    andb $15, %cl
942 ; AVX1-NEXT:    movzbl %cl, %eax
943 ; AVX1-NEXT:    vpinsrb $3, %eax, %xmm2, %xmm2
944 ; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
945 ; AVX1-NEXT:    movb %al, %cl
946 ; AVX1-NEXT:    shrb %cl
947 ; AVX1-NEXT:    andb $85, %cl
948 ; AVX1-NEXT:    subb %cl, %al
949 ; AVX1-NEXT:    movb %al, %cl
950 ; AVX1-NEXT:    andb $51, %cl
951 ; AVX1-NEXT:    shrb $2, %al
952 ; AVX1-NEXT:    andb $51, %al
953 ; AVX1-NEXT:    addb %cl, %al
954 ; AVX1-NEXT:    movb %al, %cl
955 ; AVX1-NEXT:    shrb $4, %cl
956 ; AVX1-NEXT:    addb %al, %cl
957 ; AVX1-NEXT:    andb $15, %cl
958 ; AVX1-NEXT:    movzbl %cl, %eax
959 ; AVX1-NEXT:    vpinsrb $4, %eax, %xmm2, %xmm2
960 ; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
961 ; AVX1-NEXT:    movb %al, %cl
962 ; AVX1-NEXT:    shrb %cl
963 ; AVX1-NEXT:    andb $85, %cl
964 ; AVX1-NEXT:    subb %cl, %al
965 ; AVX1-NEXT:    movb %al, %cl
966 ; AVX1-NEXT:    andb $51, %cl
967 ; AVX1-NEXT:    shrb $2, %al
968 ; AVX1-NEXT:    andb $51, %al
969 ; AVX1-NEXT:    addb %cl, %al
970 ; AVX1-NEXT:    movb %al, %cl
971 ; AVX1-NEXT:    shrb $4, %cl
972 ; AVX1-NEXT:    addb %al, %cl
973 ; AVX1-NEXT:    andb $15, %cl
974 ; AVX1-NEXT:    movzbl %cl, %eax
975 ; AVX1-NEXT:    vpinsrb $5, %eax, %xmm2, %xmm2
976 ; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
977 ; AVX1-NEXT:    movb %al, %cl
978 ; AVX1-NEXT:    shrb %cl
979 ; AVX1-NEXT:    andb $85, %cl
980 ; AVX1-NEXT:    subb %cl, %al
981 ; AVX1-NEXT:    movb %al, %cl
982 ; AVX1-NEXT:    andb $51, %cl
983 ; AVX1-NEXT:    shrb $2, %al
984 ; AVX1-NEXT:    andb $51, %al
985 ; AVX1-NEXT:    addb %cl, %al
986 ; AVX1-NEXT:    movb %al, %cl
987 ; AVX1-NEXT:    shrb $4, %cl
988 ; AVX1-NEXT:    addb %al, %cl
989 ; AVX1-NEXT:    andb $15, %cl
990 ; AVX1-NEXT:    movzbl %cl, %eax
991 ; AVX1-NEXT:    vpinsrb $6, %eax, %xmm2, %xmm2
992 ; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
993 ; AVX1-NEXT:    movb %al, %cl
994 ; AVX1-NEXT:    shrb %cl
995 ; AVX1-NEXT:    andb $85, %cl
996 ; AVX1-NEXT:    subb %cl, %al
997 ; AVX1-NEXT:    movb %al, %cl
998 ; AVX1-NEXT:    andb $51, %cl
999 ; AVX1-NEXT:    shrb $2, %al
1000 ; AVX1-NEXT:    andb $51, %al
1001 ; AVX1-NEXT:    addb %cl, %al
1002 ; AVX1-NEXT:    movb %al, %cl
1003 ; AVX1-NEXT:    shrb $4, %cl
1004 ; AVX1-NEXT:    addb %al, %cl
1005 ; AVX1-NEXT:    andb $15, %cl
1006 ; AVX1-NEXT:    movzbl %cl, %eax
1007 ; AVX1-NEXT:    vpinsrb $7, %eax, %xmm2, %xmm2
1008 ; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
1009 ; AVX1-NEXT:    movb %al, %cl
1010 ; AVX1-NEXT:    shrb %cl
1011 ; AVX1-NEXT:    andb $85, %cl
1012 ; AVX1-NEXT:    subb %cl, %al
1013 ; AVX1-NEXT:    movb %al, %cl
1014 ; AVX1-NEXT:    andb $51, %cl
1015 ; AVX1-NEXT:    shrb $2, %al
1016 ; AVX1-NEXT:    andb $51, %al
1017 ; AVX1-NEXT:    addb %cl, %al
1018 ; AVX1-NEXT:    movb %al, %cl
1019 ; AVX1-NEXT:    shrb $4, %cl
1020 ; AVX1-NEXT:    addb %al, %cl
1021 ; AVX1-NEXT:    andb $15, %cl
1022 ; AVX1-NEXT:    movzbl %cl, %eax
1023 ; AVX1-NEXT:    vpinsrb $8, %eax, %xmm2, %xmm2
1024 ; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
1025 ; AVX1-NEXT:    movb %al, %cl
1026 ; AVX1-NEXT:    shrb %cl
1027 ; AVX1-NEXT:    andb $85, %cl
1028 ; AVX1-NEXT:    subb %cl, %al
1029 ; AVX1-NEXT:    movb %al, %cl
1030 ; AVX1-NEXT:    andb $51, %cl
1031 ; AVX1-NEXT:    shrb $2, %al
1032 ; AVX1-NEXT:    andb $51, %al
1033 ; AVX1-NEXT:    addb %cl, %al
1034 ; AVX1-NEXT:    movb %al, %cl
1035 ; AVX1-NEXT:    shrb $4, %cl
1036 ; AVX1-NEXT:    addb %al, %cl
1037 ; AVX1-NEXT:    andb $15, %cl
1038 ; AVX1-NEXT:    movzbl %cl, %eax
1039 ; AVX1-NEXT:    vpinsrb $9, %eax, %xmm2, %xmm2
1040 ; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
1041 ; AVX1-NEXT:    movb %al, %cl
1042 ; AVX1-NEXT:    shrb %cl
1043 ; AVX1-NEXT:    andb $85, %cl
1044 ; AVX1-NEXT:    subb %cl, %al
1045 ; AVX1-NEXT:    movb %al, %cl
1046 ; AVX1-NEXT:    andb $51, %cl
1047 ; AVX1-NEXT:    shrb $2, %al
1048 ; AVX1-NEXT:    andb $51, %al
1049 ; AVX1-NEXT:    addb %cl, %al
1050 ; AVX1-NEXT:    movb %al, %cl
1051 ; AVX1-NEXT:    shrb $4, %cl
1052 ; AVX1-NEXT:    addb %al, %cl
1053 ; AVX1-NEXT:    andb $15, %cl
1054 ; AVX1-NEXT:    movzbl %cl, %eax
1055 ; AVX1-NEXT:    vpinsrb $10, %eax, %xmm2, %xmm2
1056 ; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
1057 ; AVX1-NEXT:    movb %al, %cl
1058 ; AVX1-NEXT:    shrb %cl
1059 ; AVX1-NEXT:    andb $85, %cl
1060 ; AVX1-NEXT:    subb %cl, %al
1061 ; AVX1-NEXT:    movb %al, %cl
1062 ; AVX1-NEXT:    andb $51, %cl
1063 ; AVX1-NEXT:    shrb $2, %al
1064 ; AVX1-NEXT:    andb $51, %al
1065 ; AVX1-NEXT:    addb %cl, %al
1066 ; AVX1-NEXT:    movb %al, %cl
1067 ; AVX1-NEXT:    shrb $4, %cl
1068 ; AVX1-NEXT:    addb %al, %cl
1069 ; AVX1-NEXT:    andb $15, %cl
1070 ; AVX1-NEXT:    movzbl %cl, %eax
1071 ; AVX1-NEXT:    vpinsrb $11, %eax, %xmm2, %xmm2
1072 ; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
1073 ; AVX1-NEXT:    movb %al, %cl
1074 ; AVX1-NEXT:    shrb %cl
1075 ; AVX1-NEXT:    andb $85, %cl
1076 ; AVX1-NEXT:    subb %cl, %al
1077 ; AVX1-NEXT:    movb %al, %cl
1078 ; AVX1-NEXT:    andb $51, %cl
1079 ; AVX1-NEXT:    shrb $2, %al
1080 ; AVX1-NEXT:    andb $51, %al
1081 ; AVX1-NEXT:    addb %cl, %al
1082 ; AVX1-NEXT:    movb %al, %cl
1083 ; AVX1-NEXT:    shrb $4, %cl
1084 ; AVX1-NEXT:    addb %al, %cl
1085 ; AVX1-NEXT:    andb $15, %cl
1086 ; AVX1-NEXT:    movzbl %cl, %eax
1087 ; AVX1-NEXT:    vpinsrb $12, %eax, %xmm2, %xmm2
1088 ; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
1089 ; AVX1-NEXT:    movb %al, %cl
1090 ; AVX1-NEXT:    shrb %cl
1091 ; AVX1-NEXT:    andb $85, %cl
1092 ; AVX1-NEXT:    subb %cl, %al
1093 ; AVX1-NEXT:    movb %al, %cl
1094 ; AVX1-NEXT:    andb $51, %cl
1095 ; AVX1-NEXT:    shrb $2, %al
1096 ; AVX1-NEXT:    andb $51, %al
1097 ; AVX1-NEXT:    addb %cl, %al
1098 ; AVX1-NEXT:    movb %al, %cl
1099 ; AVX1-NEXT:    shrb $4, %cl
1100 ; AVX1-NEXT:    addb %al, %cl
1101 ; AVX1-NEXT:    andb $15, %cl
1102 ; AVX1-NEXT:    movzbl %cl, %eax
1103 ; AVX1-NEXT:    vpinsrb $13, %eax, %xmm2, %xmm2
1104 ; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
1105 ; AVX1-NEXT:    movb %al, %cl
1106 ; AVX1-NEXT:    shrb %cl
1107 ; AVX1-NEXT:    andb $85, %cl
1108 ; AVX1-NEXT:    subb %cl, %al
1109 ; AVX1-NEXT:    movb %al, %cl
1110 ; AVX1-NEXT:    andb $51, %cl
1111 ; AVX1-NEXT:    shrb $2, %al
1112 ; AVX1-NEXT:    andb $51, %al
1113 ; AVX1-NEXT:    addb %cl, %al
1114 ; AVX1-NEXT:    movb %al, %cl
1115 ; AVX1-NEXT:    shrb $4, %cl
1116 ; AVX1-NEXT:    addb %al, %cl
1117 ; AVX1-NEXT:    andb $15, %cl
1118 ; AVX1-NEXT:    movzbl %cl, %eax
1119 ; AVX1-NEXT:    vpinsrb $14, %eax, %xmm2, %xmm2
1120 ; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
1121 ; AVX1-NEXT:    movb %al, %cl
1122 ; AVX1-NEXT:    shrb %cl
1123 ; AVX1-NEXT:    andb $85, %cl
1124 ; AVX1-NEXT:    subb %cl, %al
1125 ; AVX1-NEXT:    movb %al, %cl
1126 ; AVX1-NEXT:    andb $51, %cl
1127 ; AVX1-NEXT:    shrb $2, %al
1128 ; AVX1-NEXT:    andb $51, %al
1129 ; AVX1-NEXT:    addb %cl, %al
1130 ; AVX1-NEXT:    movb %al, %cl
1131 ; AVX1-NEXT:    shrb $4, %cl
1132 ; AVX1-NEXT:    addb %al, %cl
1133 ; AVX1-NEXT:    andb $15, %cl
1134 ; AVX1-NEXT:    movzbl %cl, %eax
1135 ; AVX1-NEXT:    vpinsrb $15, %eax, %xmm2, %xmm1
1136 ; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
1137 ; AVX1-NEXT:    movb %al, %cl
1138 ; AVX1-NEXT:    shrb %cl
1139 ; AVX1-NEXT:    andb $85, %cl
1140 ; AVX1-NEXT:    subb %cl, %al
1141 ; AVX1-NEXT:    movb %al, %cl
1142 ; AVX1-NEXT:    andb $51, %cl
1143 ; AVX1-NEXT:    shrb $2, %al
1144 ; AVX1-NEXT:    andb $51, %al
1145 ; AVX1-NEXT:    addb %cl, %al
1146 ; AVX1-NEXT:    movb %al, %cl
1147 ; AVX1-NEXT:    shrb $4, %cl
1148 ; AVX1-NEXT:    addb %al, %cl
1149 ; AVX1-NEXT:    andb $15, %cl
1150 ; AVX1-NEXT:    movzbl %cl, %eax
1151 ; AVX1-NEXT:    vpextrb $0, %xmm0, %ecx
1152 ; AVX1-NEXT:    movb %cl, %dl
1153 ; AVX1-NEXT:    shrb %dl
1154 ; AVX1-NEXT:    andb $85, %dl
1155 ; AVX1-NEXT:    subb %dl, %cl
1156 ; AVX1-NEXT:    movb %cl, %dl
1157 ; AVX1-NEXT:    andb $51, %dl
1158 ; AVX1-NEXT:    shrb $2, %cl
1159 ; AVX1-NEXT:    andb $51, %cl
1160 ; AVX1-NEXT:    addb %dl, %cl
1161 ; AVX1-NEXT:    movb %cl, %dl
1162 ; AVX1-NEXT:    shrb $4, %dl
1163 ; AVX1-NEXT:    addb %cl, %dl
1164 ; AVX1-NEXT:    andb $15, %dl
1165 ; AVX1-NEXT:    movzbl %dl, %ecx
1166 ; AVX1-NEXT:    vmovd %ecx, %xmm2
1167 ; AVX1-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm2
1168 ; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
1169 ; AVX1-NEXT:    movb %al, %cl
1170 ; AVX1-NEXT:    shrb %cl
1171 ; AVX1-NEXT:    andb $85, %cl
1172 ; AVX1-NEXT:    subb %cl, %al
1173 ; AVX1-NEXT:    movb %al, %cl
1174 ; AVX1-NEXT:    andb $51, %cl
1175 ; AVX1-NEXT:    shrb $2, %al
1176 ; AVX1-NEXT:    andb $51, %al
1177 ; AVX1-NEXT:    addb %cl, %al
1178 ; AVX1-NEXT:    movb %al, %cl
1179 ; AVX1-NEXT:    shrb $4, %cl
1180 ; AVX1-NEXT:    addb %al, %cl
1181 ; AVX1-NEXT:    andb $15, %cl
1182 ; AVX1-NEXT:    movzbl %cl, %eax
1183 ; AVX1-NEXT:    vpinsrb $2, %eax, %xmm2, %xmm2
1184 ; AVX1-NEXT:    vpextrb $3, %xmm0, %eax
1185 ; AVX1-NEXT:    movb %al, %cl
1186 ; AVX1-NEXT:    shrb %cl
1187 ; AVX1-NEXT:    andb $85, %cl
1188 ; AVX1-NEXT:    subb %cl, %al
1189 ; AVX1-NEXT:    movb %al, %cl
1190 ; AVX1-NEXT:    andb $51, %cl
1191 ; AVX1-NEXT:    shrb $2, %al
1192 ; AVX1-NEXT:    andb $51, %al
1193 ; AVX1-NEXT:    addb %cl, %al
1194 ; AVX1-NEXT:    movb %al, %cl
1195 ; AVX1-NEXT:    shrb $4, %cl
1196 ; AVX1-NEXT:    addb %al, %cl
1197 ; AVX1-NEXT:    andb $15, %cl
1198 ; AVX1-NEXT:    movzbl %cl, %eax
1199 ; AVX1-NEXT:    vpinsrb $3, %eax, %xmm2, %xmm2
1200 ; AVX1-NEXT:    vpextrb $4, %xmm0, %eax
1201 ; AVX1-NEXT:    movb %al, %cl
1202 ; AVX1-NEXT:    shrb %cl
1203 ; AVX1-NEXT:    andb $85, %cl
1204 ; AVX1-NEXT:    subb %cl, %al
1205 ; AVX1-NEXT:    movb %al, %cl
1206 ; AVX1-NEXT:    andb $51, %cl
1207 ; AVX1-NEXT:    shrb $2, %al
1208 ; AVX1-NEXT:    andb $51, %al
1209 ; AVX1-NEXT:    addb %cl, %al
1210 ; AVX1-NEXT:    movb %al, %cl
1211 ; AVX1-NEXT:    shrb $4, %cl
1212 ; AVX1-NEXT:    addb %al, %cl
1213 ; AVX1-NEXT:    andb $15, %cl
1214 ; AVX1-NEXT:    movzbl %cl, %eax
1215 ; AVX1-NEXT:    vpinsrb $4, %eax, %xmm2, %xmm2
1216 ; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
1217 ; AVX1-NEXT:    movb %al, %cl
1218 ; AVX1-NEXT:    shrb %cl
1219 ; AVX1-NEXT:    andb $85, %cl
1220 ; AVX1-NEXT:    subb %cl, %al
1221 ; AVX1-NEXT:    movb %al, %cl
1222 ; AVX1-NEXT:    andb $51, %cl
1223 ; AVX1-NEXT:    shrb $2, %al
1224 ; AVX1-NEXT:    andb $51, %al
1225 ; AVX1-NEXT:    addb %cl, %al
1226 ; AVX1-NEXT:    movb %al, %cl
1227 ; AVX1-NEXT:    shrb $4, %cl
1228 ; AVX1-NEXT:    addb %al, %cl
1229 ; AVX1-NEXT:    andb $15, %cl
1230 ; AVX1-NEXT:    movzbl %cl, %eax
1231 ; AVX1-NEXT:    vpinsrb $5, %eax, %xmm2, %xmm2
1232 ; AVX1-NEXT:    vpextrb $6, %xmm0, %eax
1233 ; AVX1-NEXT:    movb %al, %cl
1234 ; AVX1-NEXT:    shrb %cl
1235 ; AVX1-NEXT:    andb $85, %cl
1236 ; AVX1-NEXT:    subb %cl, %al
1237 ; AVX1-NEXT:    movb %al, %cl
1238 ; AVX1-NEXT:    andb $51, %cl
1239 ; AVX1-NEXT:    shrb $2, %al
1240 ; AVX1-NEXT:    andb $51, %al
1241 ; AVX1-NEXT:    addb %cl, %al
1242 ; AVX1-NEXT:    movb %al, %cl
1243 ; AVX1-NEXT:    shrb $4, %cl
1244 ; AVX1-NEXT:    addb %al, %cl
1245 ; AVX1-NEXT:    andb $15, %cl
1246 ; AVX1-NEXT:    movzbl %cl, %eax
1247 ; AVX1-NEXT:    vpinsrb $6, %eax, %xmm2, %xmm2
1248 ; AVX1-NEXT:    vpextrb $7, %xmm0, %eax
1249 ; AVX1-NEXT:    movb %al, %cl
1250 ; AVX1-NEXT:    shrb %cl
1251 ; AVX1-NEXT:    andb $85, %cl
1252 ; AVX1-NEXT:    subb %cl, %al
1253 ; AVX1-NEXT:    movb %al, %cl
1254 ; AVX1-NEXT:    andb $51, %cl
1255 ; AVX1-NEXT:    shrb $2, %al
1256 ; AVX1-NEXT:    andb $51, %al
1257 ; AVX1-NEXT:    addb %cl, %al
1258 ; AVX1-NEXT:    movb %al, %cl
1259 ; AVX1-NEXT:    shrb $4, %cl
1260 ; AVX1-NEXT:    addb %al, %cl
1261 ; AVX1-NEXT:    andb $15, %cl
1262 ; AVX1-NEXT:    movzbl %cl, %eax
1263 ; AVX1-NEXT:    vpinsrb $7, %eax, %xmm2, %xmm2
1264 ; AVX1-NEXT:    vpextrb $8, %xmm0, %eax
1265 ; AVX1-NEXT:    movb %al, %cl
1266 ; AVX1-NEXT:    shrb %cl
1267 ; AVX1-NEXT:    andb $85, %cl
1268 ; AVX1-NEXT:    subb %cl, %al
1269 ; AVX1-NEXT:    movb %al, %cl
1270 ; AVX1-NEXT:    andb $51, %cl
1271 ; AVX1-NEXT:    shrb $2, %al
1272 ; AVX1-NEXT:    andb $51, %al
1273 ; AVX1-NEXT:    addb %cl, %al
1274 ; AVX1-NEXT:    movb %al, %cl
1275 ; AVX1-NEXT:    shrb $4, %cl
1276 ; AVX1-NEXT:    addb %al, %cl
1277 ; AVX1-NEXT:    andb $15, %cl
1278 ; AVX1-NEXT:    movzbl %cl, %eax
1279 ; AVX1-NEXT:    vpinsrb $8, %eax, %xmm2, %xmm2
1280 ; AVX1-NEXT:    vpextrb $9, %xmm0, %eax
1281 ; AVX1-NEXT:    movb %al, %cl
1282 ; AVX1-NEXT:    shrb %cl
1283 ; AVX1-NEXT:    andb $85, %cl
1284 ; AVX1-NEXT:    subb %cl, %al
1285 ; AVX1-NEXT:    movb %al, %cl
1286 ; AVX1-NEXT:    andb $51, %cl
1287 ; AVX1-NEXT:    shrb $2, %al
1288 ; AVX1-NEXT:    andb $51, %al
1289 ; AVX1-NEXT:    addb %cl, %al
1290 ; AVX1-NEXT:    movb %al, %cl
1291 ; AVX1-NEXT:    shrb $4, %cl
1292 ; AVX1-NEXT:    addb %al, %cl
1293 ; AVX1-NEXT:    andb $15, %cl
1294 ; AVX1-NEXT:    movzbl %cl, %eax
1295 ; AVX1-NEXT:    vpinsrb $9, %eax, %xmm2, %xmm2
1296 ; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
1297 ; AVX1-NEXT:    movb %al, %cl
1298 ; AVX1-NEXT:    shrb %cl
1299 ; AVX1-NEXT:    andb $85, %cl
1300 ; AVX1-NEXT:    subb %cl, %al
1301 ; AVX1-NEXT:    movb %al, %cl
1302 ; AVX1-NEXT:    andb $51, %cl
1303 ; AVX1-NEXT:    shrb $2, %al
1304 ; AVX1-NEXT:    andb $51, %al
1305 ; AVX1-NEXT:    addb %cl, %al
1306 ; AVX1-NEXT:    movb %al, %cl
1307 ; AVX1-NEXT:    shrb $4, %cl
1308 ; AVX1-NEXT:    addb %al, %cl
1309 ; AVX1-NEXT:    andb $15, %cl
1310 ; AVX1-NEXT:    movzbl %cl, %eax
1311 ; AVX1-NEXT:    vpinsrb $10, %eax, %xmm2, %xmm2
1312 ; AVX1-NEXT:    vpextrb $11, %xmm0, %eax
1313 ; AVX1-NEXT:    movb %al, %cl
1314 ; AVX1-NEXT:    shrb %cl
1315 ; AVX1-NEXT:    andb $85, %cl
1316 ; AVX1-NEXT:    subb %cl, %al
1317 ; AVX1-NEXT:    movb %al, %cl
1318 ; AVX1-NEXT:    andb $51, %cl
1319 ; AVX1-NEXT:    shrb $2, %al
1320 ; AVX1-NEXT:    andb $51, %al
1321 ; AVX1-NEXT:    addb %cl, %al
1322 ; AVX1-NEXT:    movb %al, %cl
1323 ; AVX1-NEXT:    shrb $4, %cl
1324 ; AVX1-NEXT:    addb %al, %cl
1325 ; AVX1-NEXT:    andb $15, %cl
1326 ; AVX1-NEXT:    movzbl %cl, %eax
1327 ; AVX1-NEXT:    vpinsrb $11, %eax, %xmm2, %xmm2
1328 ; AVX1-NEXT:    vpextrb $12, %xmm0, %eax
1329 ; AVX1-NEXT:    movb %al, %cl
1330 ; AVX1-NEXT:    shrb %cl
1331 ; AVX1-NEXT:    andb $85, %cl
1332 ; AVX1-NEXT:    subb %cl, %al
1333 ; AVX1-NEXT:    movb %al, %cl
1334 ; AVX1-NEXT:    andb $51, %cl
1335 ; AVX1-NEXT:    shrb $2, %al
1336 ; AVX1-NEXT:    andb $51, %al
1337 ; AVX1-NEXT:    addb %cl, %al
1338 ; AVX1-NEXT:    movb %al, %cl
1339 ; AVX1-NEXT:    shrb $4, %cl
1340 ; AVX1-NEXT:    addb %al, %cl
1341 ; AVX1-NEXT:    andb $15, %cl
1342 ; AVX1-NEXT:    movzbl %cl, %eax
1343 ; AVX1-NEXT:    vpinsrb $12, %eax, %xmm2, %xmm2
1344 ; AVX1-NEXT:    vpextrb $13, %xmm0, %eax
1345 ; AVX1-NEXT:    movb %al, %cl
1346 ; AVX1-NEXT:    shrb %cl
1347 ; AVX1-NEXT:    andb $85, %cl
1348 ; AVX1-NEXT:    subb %cl, %al
1349 ; AVX1-NEXT:    movb %al, %cl
1350 ; AVX1-NEXT:    andb $51, %cl
1351 ; AVX1-NEXT:    shrb $2, %al
1352 ; AVX1-NEXT:    andb $51, %al
1353 ; AVX1-NEXT:    addb %cl, %al
1354 ; AVX1-NEXT:    movb %al, %cl
1355 ; AVX1-NEXT:    shrb $4, %cl
1356 ; AVX1-NEXT:    addb %al, %cl
1357 ; AVX1-NEXT:    andb $15, %cl
1358 ; AVX1-NEXT:    movzbl %cl, %eax
1359 ; AVX1-NEXT:    vpinsrb $13, %eax, %xmm2, %xmm2
1360 ; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
1361 ; AVX1-NEXT:    movb %al, %cl
1362 ; AVX1-NEXT:    shrb %cl
1363 ; AVX1-NEXT:    andb $85, %cl
1364 ; AVX1-NEXT:    subb %cl, %al
1365 ; AVX1-NEXT:    movb %al, %cl
1366 ; AVX1-NEXT:    andb $51, %cl
1367 ; AVX1-NEXT:    shrb $2, %al
1368 ; AVX1-NEXT:    andb $51, %al
1369 ; AVX1-NEXT:    addb %cl, %al
1370 ; AVX1-NEXT:    movb %al, %cl
1371 ; AVX1-NEXT:    shrb $4, %cl
1372 ; AVX1-NEXT:    addb %al, %cl
1373 ; AVX1-NEXT:    andb $15, %cl
1374 ; AVX1-NEXT:    movzbl %cl, %eax
1375 ; AVX1-NEXT:    vpinsrb $14, %eax, %xmm2, %xmm2
1376 ; AVX1-NEXT:    vpextrb $15, %xmm0, %eax
1377 ; AVX1-NEXT:    movb %al, %cl
1378 ; AVX1-NEXT:    shrb %cl
1379 ; AVX1-NEXT:    andb $85, %cl
1380 ; AVX1-NEXT:    subb %cl, %al
1381 ; AVX1-NEXT:    movb %al, %cl
1382 ; AVX1-NEXT:    andb $51, %cl
1383 ; AVX1-NEXT:    shrb $2, %al
1384 ; AVX1-NEXT:    andb $51, %al
1385 ; AVX1-NEXT:    addb %cl, %al
1386 ; AVX1-NEXT:    movb %al, %cl
1387 ; AVX1-NEXT:    shrb $4, %cl
1388 ; AVX1-NEXT:    addb %al, %cl
1389 ; AVX1-NEXT:    andb $15, %cl
1390 ; AVX1-NEXT:    movzbl %cl, %eax
1391 ; AVX1-NEXT:    vpinsrb $15, %eax, %xmm2, %xmm0
1392 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1393 ; AVX1-NEXT:    retq
1394 ;
1395 ; AVX2-LABEL: testv32i8:
1396 ; AVX2:       # BB#0:
1397 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1398 ; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
1399 ; AVX2-NEXT:    movb %al, %cl
1400 ; AVX2-NEXT:    shrb %cl
1401 ; AVX2-NEXT:    andb $85, %cl
1402 ; AVX2-NEXT:    subb %cl, %al
1403 ; AVX2-NEXT:    movb %al, %cl
1404 ; AVX2-NEXT:    andb $51, %cl
1405 ; AVX2-NEXT:    shrb $2, %al
1406 ; AVX2-NEXT:    andb $51, %al
1407 ; AVX2-NEXT:    addb %cl, %al
1408 ; AVX2-NEXT:    movb %al, %cl
1409 ; AVX2-NEXT:    shrb $4, %cl
1410 ; AVX2-NEXT:    addb %al, %cl
1411 ; AVX2-NEXT:    andb $15, %cl
1412 ; AVX2-NEXT:    movzbl %cl, %eax
1413 ; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
1414 ; AVX2-NEXT:    movb %cl, %dl
1415 ; AVX2-NEXT:    shrb %dl
1416 ; AVX2-NEXT:    andb $85, %dl
1417 ; AVX2-NEXT:    subb %dl, %cl
1418 ; AVX2-NEXT:    movb %cl, %dl
1419 ; AVX2-NEXT:    andb $51, %dl
1420 ; AVX2-NEXT:    shrb $2, %cl
1421 ; AVX2-NEXT:    andb $51, %cl
1422 ; AVX2-NEXT:    addb %dl, %cl
1423 ; AVX2-NEXT:    movb %cl, %dl
1424 ; AVX2-NEXT:    shrb $4, %dl
1425 ; AVX2-NEXT:    addb %cl, %dl
1426 ; AVX2-NEXT:    andb $15, %dl
1427 ; AVX2-NEXT:    movzbl %dl, %ecx
1428 ; AVX2-NEXT:    vmovd %ecx, %xmm2
1429 ; AVX2-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm2
1430 ; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
1431 ; AVX2-NEXT:    movb %al, %cl
1432 ; AVX2-NEXT:    shrb %cl
1433 ; AVX2-NEXT:    andb $85, %cl
1434 ; AVX2-NEXT:    subb %cl, %al
1435 ; AVX2-NEXT:    movb %al, %cl
1436 ; AVX2-NEXT:    andb $51, %cl
1437 ; AVX2-NEXT:    shrb $2, %al
1438 ; AVX2-NEXT:    andb $51, %al
1439 ; AVX2-NEXT:    addb %cl, %al
1440 ; AVX2-NEXT:    movb %al, %cl
1441 ; AVX2-NEXT:    shrb $4, %cl
1442 ; AVX2-NEXT:    addb %al, %cl
1443 ; AVX2-NEXT:    andb $15, %cl
1444 ; AVX2-NEXT:    movzbl %cl, %eax
1445 ; AVX2-NEXT:    vpinsrb $2, %eax, %xmm2, %xmm2
1446 ; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
1447 ; AVX2-NEXT:    movb %al, %cl
1448 ; AVX2-NEXT:    shrb %cl
1449 ; AVX2-NEXT:    andb $85, %cl
1450 ; AVX2-NEXT:    subb %cl, %al
1451 ; AVX2-NEXT:    movb %al, %cl
1452 ; AVX2-NEXT:    andb $51, %cl
1453 ; AVX2-NEXT:    shrb $2, %al
1454 ; AVX2-NEXT:    andb $51, %al
1455 ; AVX2-NEXT:    addb %cl, %al
1456 ; AVX2-NEXT:    movb %al, %cl
1457 ; AVX2-NEXT:    shrb $4, %cl
1458 ; AVX2-NEXT:    addb %al, %cl
1459 ; AVX2-NEXT:    andb $15, %cl
1460 ; AVX2-NEXT:    movzbl %cl, %eax
1461 ; AVX2-NEXT:    vpinsrb $3, %eax, %xmm2, %xmm2
1462 ; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
1463 ; AVX2-NEXT:    movb %al, %cl
1464 ; AVX2-NEXT:    shrb %cl
1465 ; AVX2-NEXT:    andb $85, %cl
1466 ; AVX2-NEXT:    subb %cl, %al
1467 ; AVX2-NEXT:    movb %al, %cl
1468 ; AVX2-NEXT:    andb $51, %cl
1469 ; AVX2-NEXT:    shrb $2, %al
1470 ; AVX2-NEXT:    andb $51, %al
1471 ; AVX2-NEXT:    addb %cl, %al
1472 ; AVX2-NEXT:    movb %al, %cl
1473 ; AVX2-NEXT:    shrb $4, %cl
1474 ; AVX2-NEXT:    addb %al, %cl
1475 ; AVX2-NEXT:    andb $15, %cl
1476 ; AVX2-NEXT:    movzbl %cl, %eax
1477 ; AVX2-NEXT:    vpinsrb $4, %eax, %xmm2, %xmm2
1478 ; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
1479 ; AVX2-NEXT:    movb %al, %cl
1480 ; AVX2-NEXT:    shrb %cl
1481 ; AVX2-NEXT:    andb $85, %cl
1482 ; AVX2-NEXT:    subb %cl, %al
1483 ; AVX2-NEXT:    movb %al, %cl
1484 ; AVX2-NEXT:    andb $51, %cl
1485 ; AVX2-NEXT:    shrb $2, %al
1486 ; AVX2-NEXT:    andb $51, %al
1487 ; AVX2-NEXT:    addb %cl, %al
1488 ; AVX2-NEXT:    movb %al, %cl
1489 ; AVX2-NEXT:    shrb $4, %cl
1490 ; AVX2-NEXT:    addb %al, %cl
1491 ; AVX2-NEXT:    andb $15, %cl
1492 ; AVX2-NEXT:    movzbl %cl, %eax
1493 ; AVX2-NEXT:    vpinsrb $5, %eax, %xmm2, %xmm2
1494 ; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
1495 ; AVX2-NEXT:    movb %al, %cl
1496 ; AVX2-NEXT:    shrb %cl
1497 ; AVX2-NEXT:    andb $85, %cl
1498 ; AVX2-NEXT:    subb %cl, %al
1499 ; AVX2-NEXT:    movb %al, %cl
1500 ; AVX2-NEXT:    andb $51, %cl
1501 ; AVX2-NEXT:    shrb $2, %al
1502 ; AVX2-NEXT:    andb $51, %al
1503 ; AVX2-NEXT:    addb %cl, %al
1504 ; AVX2-NEXT:    movb %al, %cl
1505 ; AVX2-NEXT:    shrb $4, %cl
1506 ; AVX2-NEXT:    addb %al, %cl
1507 ; AVX2-NEXT:    andb $15, %cl
1508 ; AVX2-NEXT:    movzbl %cl, %eax
1509 ; AVX2-NEXT:    vpinsrb $6, %eax, %xmm2, %xmm2
1510 ; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
1511 ; AVX2-NEXT:    movb %al, %cl
1512 ; AVX2-NEXT:    shrb %cl
1513 ; AVX2-NEXT:    andb $85, %cl
1514 ; AVX2-NEXT:    subb %cl, %al
1515 ; AVX2-NEXT:    movb %al, %cl
1516 ; AVX2-NEXT:    andb $51, %cl
1517 ; AVX2-NEXT:    shrb $2, %al
1518 ; AVX2-NEXT:    andb $51, %al
1519 ; AVX2-NEXT:    addb %cl, %al
1520 ; AVX2-NEXT:    movb %al, %cl
1521 ; AVX2-NEXT:    shrb $4, %cl
1522 ; AVX2-NEXT:    addb %al, %cl
1523 ; AVX2-NEXT:    andb $15, %cl
1524 ; AVX2-NEXT:    movzbl %cl, %eax
1525 ; AVX2-NEXT:    vpinsrb $7, %eax, %xmm2, %xmm2
1526 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
1527 ; AVX2-NEXT:    movb %al, %cl
1528 ; AVX2-NEXT:    shrb %cl
1529 ; AVX2-NEXT:    andb $85, %cl
1530 ; AVX2-NEXT:    subb %cl, %al
1531 ; AVX2-NEXT:    movb %al, %cl
1532 ; AVX2-NEXT:    andb $51, %cl
1533 ; AVX2-NEXT:    shrb $2, %al
1534 ; AVX2-NEXT:    andb $51, %al
1535 ; AVX2-NEXT:    addb %cl, %al
1536 ; AVX2-NEXT:    movb %al, %cl
1537 ; AVX2-NEXT:    shrb $4, %cl
1538 ; AVX2-NEXT:    addb %al, %cl
1539 ; AVX2-NEXT:    andb $15, %cl
1540 ; AVX2-NEXT:    movzbl %cl, %eax
1541 ; AVX2-NEXT:    vpinsrb $8, %eax, %xmm2, %xmm2
1542 ; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
1543 ; AVX2-NEXT:    movb %al, %cl
1544 ; AVX2-NEXT:    shrb %cl
1545 ; AVX2-NEXT:    andb $85, %cl
1546 ; AVX2-NEXT:    subb %cl, %al
1547 ; AVX2-NEXT:    movb %al, %cl
1548 ; AVX2-NEXT:    andb $51, %cl
1549 ; AVX2-NEXT:    shrb $2, %al
1550 ; AVX2-NEXT:    andb $51, %al
1551 ; AVX2-NEXT:    addb %cl, %al
1552 ; AVX2-NEXT:    movb %al, %cl
1553 ; AVX2-NEXT:    shrb $4, %cl
1554 ; AVX2-NEXT:    addb %al, %cl
1555 ; AVX2-NEXT:    andb $15, %cl
1556 ; AVX2-NEXT:    movzbl %cl, %eax
1557 ; AVX2-NEXT:    vpinsrb $9, %eax, %xmm2, %xmm2
1558 ; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
1559 ; AVX2-NEXT:    movb %al, %cl
1560 ; AVX2-NEXT:    shrb %cl
1561 ; AVX2-NEXT:    andb $85, %cl
1562 ; AVX2-NEXT:    subb %cl, %al
1563 ; AVX2-NEXT:    movb %al, %cl
1564 ; AVX2-NEXT:    andb $51, %cl
1565 ; AVX2-NEXT:    shrb $2, %al
1566 ; AVX2-NEXT:    andb $51, %al
1567 ; AVX2-NEXT:    addb %cl, %al
1568 ; AVX2-NEXT:    movb %al, %cl
1569 ; AVX2-NEXT:    shrb $4, %cl
1570 ; AVX2-NEXT:    addb %al, %cl
1571 ; AVX2-NEXT:    andb $15, %cl
1572 ; AVX2-NEXT:    movzbl %cl, %eax
1573 ; AVX2-NEXT:    vpinsrb $10, %eax, %xmm2, %xmm2
1574 ; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
1575 ; AVX2-NEXT:    movb %al, %cl
1576 ; AVX2-NEXT:    shrb %cl
1577 ; AVX2-NEXT:    andb $85, %cl
1578 ; AVX2-NEXT:    subb %cl, %al
1579 ; AVX2-NEXT:    movb %al, %cl
1580 ; AVX2-NEXT:    andb $51, %cl
1581 ; AVX2-NEXT:    shrb $2, %al
1582 ; AVX2-NEXT:    andb $51, %al
1583 ; AVX2-NEXT:    addb %cl, %al
1584 ; AVX2-NEXT:    movb %al, %cl
1585 ; AVX2-NEXT:    shrb $4, %cl
1586 ; AVX2-NEXT:    addb %al, %cl
1587 ; AVX2-NEXT:    andb $15, %cl
1588 ; AVX2-NEXT:    movzbl %cl, %eax
1589 ; AVX2-NEXT:    vpinsrb $11, %eax, %xmm2, %xmm2
1590 ; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
1591 ; AVX2-NEXT:    movb %al, %cl
1592 ; AVX2-NEXT:    shrb %cl
1593 ; AVX2-NEXT:    andb $85, %cl
1594 ; AVX2-NEXT:    subb %cl, %al
1595 ; AVX2-NEXT:    movb %al, %cl
1596 ; AVX2-NEXT:    andb $51, %cl
1597 ; AVX2-NEXT:    shrb $2, %al
1598 ; AVX2-NEXT:    andb $51, %al
1599 ; AVX2-NEXT:    addb %cl, %al
1600 ; AVX2-NEXT:    movb %al, %cl
1601 ; AVX2-NEXT:    shrb $4, %cl
1602 ; AVX2-NEXT:    addb %al, %cl
1603 ; AVX2-NEXT:    andb $15, %cl
1604 ; AVX2-NEXT:    movzbl %cl, %eax
1605 ; AVX2-NEXT:    vpinsrb $12, %eax, %xmm2, %xmm2
1606 ; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
1607 ; AVX2-NEXT:    movb %al, %cl
1608 ; AVX2-NEXT:    shrb %cl
1609 ; AVX2-NEXT:    andb $85, %cl
1610 ; AVX2-NEXT:    subb %cl, %al
1611 ; AVX2-NEXT:    movb %al, %cl
1612 ; AVX2-NEXT:    andb $51, %cl
1613 ; AVX2-NEXT:    shrb $2, %al
1614 ; AVX2-NEXT:    andb $51, %al
1615 ; AVX2-NEXT:    addb %cl, %al
1616 ; AVX2-NEXT:    movb %al, %cl
1617 ; AVX2-NEXT:    shrb $4, %cl
1618 ; AVX2-NEXT:    addb %al, %cl
1619 ; AVX2-NEXT:    andb $15, %cl
1620 ; AVX2-NEXT:    movzbl %cl, %eax
1621 ; AVX2-NEXT:    vpinsrb $13, %eax, %xmm2, %xmm2
1622 ; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
1623 ; AVX2-NEXT:    movb %al, %cl
1624 ; AVX2-NEXT:    shrb %cl
1625 ; AVX2-NEXT:    andb $85, %cl
1626 ; AVX2-NEXT:    subb %cl, %al
1627 ; AVX2-NEXT:    movb %al, %cl
1628 ; AVX2-NEXT:    andb $51, %cl
1629 ; AVX2-NEXT:    shrb $2, %al
1630 ; AVX2-NEXT:    andb $51, %al
1631 ; AVX2-NEXT:    addb %cl, %al
1632 ; AVX2-NEXT:    movb %al, %cl
1633 ; AVX2-NEXT:    shrb $4, %cl
1634 ; AVX2-NEXT:    addb %al, %cl
1635 ; AVX2-NEXT:    andb $15, %cl
1636 ; AVX2-NEXT:    movzbl %cl, %eax
1637 ; AVX2-NEXT:    vpinsrb $14, %eax, %xmm2, %xmm2
1638 ; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
1639 ; AVX2-NEXT:    movb %al, %cl
1640 ; AVX2-NEXT:    shrb %cl
1641 ; AVX2-NEXT:    andb $85, %cl
1642 ; AVX2-NEXT:    subb %cl, %al
1643 ; AVX2-NEXT:    movb %al, %cl
1644 ; AVX2-NEXT:    andb $51, %cl
1645 ; AVX2-NEXT:    shrb $2, %al
1646 ; AVX2-NEXT:    andb $51, %al
1647 ; AVX2-NEXT:    addb %cl, %al
1648 ; AVX2-NEXT:    movb %al, %cl
1649 ; AVX2-NEXT:    shrb $4, %cl
1650 ; AVX2-NEXT:    addb %al, %cl
1651 ; AVX2-NEXT:    andb $15, %cl
1652 ; AVX2-NEXT:    movzbl %cl, %eax
1653 ; AVX2-NEXT:    vpinsrb $15, %eax, %xmm2, %xmm1
1654 ; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
1655 ; AVX2-NEXT:    movb %al, %cl
1656 ; AVX2-NEXT:    shrb %cl
1657 ; AVX2-NEXT:    andb $85, %cl
1658 ; AVX2-NEXT:    subb %cl, %al
1659 ; AVX2-NEXT:    movb %al, %cl
1660 ; AVX2-NEXT:    andb $51, %cl
1661 ; AVX2-NEXT:    shrb $2, %al
1662 ; AVX2-NEXT:    andb $51, %al
1663 ; AVX2-NEXT:    addb %cl, %al
1664 ; AVX2-NEXT:    movb %al, %cl
1665 ; AVX2-NEXT:    shrb $4, %cl
1666 ; AVX2-NEXT:    addb %al, %cl
1667 ; AVX2-NEXT:    andb $15, %cl
1668 ; AVX2-NEXT:    movzbl %cl, %eax
1669 ; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
1670 ; AVX2-NEXT:    movb %cl, %dl
1671 ; AVX2-NEXT:    shrb %dl
1672 ; AVX2-NEXT:    andb $85, %dl
1673 ; AVX2-NEXT:    subb %dl, %cl
1674 ; AVX2-NEXT:    movb %cl, %dl
1675 ; AVX2-NEXT:    andb $51, %dl
1676 ; AVX2-NEXT:    shrb $2, %cl
1677 ; AVX2-NEXT:    andb $51, %cl
1678 ; AVX2-NEXT:    addb %dl, %cl
1679 ; AVX2-NEXT:    movb %cl, %dl
1680 ; AVX2-NEXT:    shrb $4, %dl
1681 ; AVX2-NEXT:    addb %cl, %dl
1682 ; AVX2-NEXT:    andb $15, %dl
1683 ; AVX2-NEXT:    movzbl %dl, %ecx
1684 ; AVX2-NEXT:    vmovd %ecx, %xmm2
1685 ; AVX2-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm2
1686 ; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
1687 ; AVX2-NEXT:    movb %al, %cl
1688 ; AVX2-NEXT:    shrb %cl
1689 ; AVX2-NEXT:    andb $85, %cl
1690 ; AVX2-NEXT:    subb %cl, %al
1691 ; AVX2-NEXT:    movb %al, %cl
1692 ; AVX2-NEXT:    andb $51, %cl
1693 ; AVX2-NEXT:    shrb $2, %al
1694 ; AVX2-NEXT:    andb $51, %al
1695 ; AVX2-NEXT:    addb %cl, %al
1696 ; AVX2-NEXT:    movb %al, %cl
1697 ; AVX2-NEXT:    shrb $4, %cl
1698 ; AVX2-NEXT:    addb %al, %cl
1699 ; AVX2-NEXT:    andb $15, %cl
1700 ; AVX2-NEXT:    movzbl %cl, %eax
1701 ; AVX2-NEXT:    vpinsrb $2, %eax, %xmm2, %xmm2
1702 ; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
1703 ; AVX2-NEXT:    movb %al, %cl
1704 ; AVX2-NEXT:    shrb %cl
1705 ; AVX2-NEXT:    andb $85, %cl
1706 ; AVX2-NEXT:    subb %cl, %al
1707 ; AVX2-NEXT:    movb %al, %cl
1708 ; AVX2-NEXT:    andb $51, %cl
1709 ; AVX2-NEXT:    shrb $2, %al
1710 ; AVX2-NEXT:    andb $51, %al
1711 ; AVX2-NEXT:    addb %cl, %al
1712 ; AVX2-NEXT:    movb %al, %cl
1713 ; AVX2-NEXT:    shrb $4, %cl
1714 ; AVX2-NEXT:    addb %al, %cl
1715 ; AVX2-NEXT:    andb $15, %cl
1716 ; AVX2-NEXT:    movzbl %cl, %eax
1717 ; AVX2-NEXT:    vpinsrb $3, %eax, %xmm2, %xmm2
1718 ; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
1719 ; AVX2-NEXT:    movb %al, %cl
1720 ; AVX2-NEXT:    shrb %cl
1721 ; AVX2-NEXT:    andb $85, %cl
1722 ; AVX2-NEXT:    subb %cl, %al
1723 ; AVX2-NEXT:    movb %al, %cl
1724 ; AVX2-NEXT:    andb $51, %cl
1725 ; AVX2-NEXT:    shrb $2, %al
1726 ; AVX2-NEXT:    andb $51, %al
1727 ; AVX2-NEXT:    addb %cl, %al
1728 ; AVX2-NEXT:    movb %al, %cl
1729 ; AVX2-NEXT:    shrb $4, %cl
1730 ; AVX2-NEXT:    addb %al, %cl
1731 ; AVX2-NEXT:    andb $15, %cl
1732 ; AVX2-NEXT:    movzbl %cl, %eax
1733 ; AVX2-NEXT:    vpinsrb $4, %eax, %xmm2, %xmm2
1734 ; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
1735 ; AVX2-NEXT:    movb %al, %cl
1736 ; AVX2-NEXT:    shrb %cl
1737 ; AVX2-NEXT:    andb $85, %cl
1738 ; AVX2-NEXT:    subb %cl, %al
1739 ; AVX2-NEXT:    movb %al, %cl
1740 ; AVX2-NEXT:    andb $51, %cl
1741 ; AVX2-NEXT:    shrb $2, %al
1742 ; AVX2-NEXT:    andb $51, %al
1743 ; AVX2-NEXT:    addb %cl, %al
1744 ; AVX2-NEXT:    movb %al, %cl
1745 ; AVX2-NEXT:    shrb $4, %cl
1746 ; AVX2-NEXT:    addb %al, %cl
1747 ; AVX2-NEXT:    andb $15, %cl
1748 ; AVX2-NEXT:    movzbl %cl, %eax
1749 ; AVX2-NEXT:    vpinsrb $5, %eax, %xmm2, %xmm2
1750 ; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
1751 ; AVX2-NEXT:    movb %al, %cl
1752 ; AVX2-NEXT:    shrb %cl
1753 ; AVX2-NEXT:    andb $85, %cl
1754 ; AVX2-NEXT:    subb %cl, %al
1755 ; AVX2-NEXT:    movb %al, %cl
1756 ; AVX2-NEXT:    andb $51, %cl
1757 ; AVX2-NEXT:    shrb $2, %al
1758 ; AVX2-NEXT:    andb $51, %al
1759 ; AVX2-NEXT:    addb %cl, %al
1760 ; AVX2-NEXT:    movb %al, %cl
1761 ; AVX2-NEXT:    shrb $4, %cl
1762 ; AVX2-NEXT:    addb %al, %cl
1763 ; AVX2-NEXT:    andb $15, %cl
1764 ; AVX2-NEXT:    movzbl %cl, %eax
1765 ; AVX2-NEXT:    vpinsrb $6, %eax, %xmm2, %xmm2
1766 ; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
1767 ; AVX2-NEXT:    movb %al, %cl
1768 ; AVX2-NEXT:    shrb %cl
1769 ; AVX2-NEXT:    andb $85, %cl
1770 ; AVX2-NEXT:    subb %cl, %al
1771 ; AVX2-NEXT:    movb %al, %cl
1772 ; AVX2-NEXT:    andb $51, %cl
1773 ; AVX2-NEXT:    shrb $2, %al
1774 ; AVX2-NEXT:    andb $51, %al
1775 ; AVX2-NEXT:    addb %cl, %al
1776 ; AVX2-NEXT:    movb %al, %cl
1777 ; AVX2-NEXT:    shrb $4, %cl
1778 ; AVX2-NEXT:    addb %al, %cl
1779 ; AVX2-NEXT:    andb $15, %cl
1780 ; AVX2-NEXT:    movzbl %cl, %eax
1781 ; AVX2-NEXT:    vpinsrb $7, %eax, %xmm2, %xmm2
1782 ; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
1783 ; AVX2-NEXT:    movb %al, %cl
1784 ; AVX2-NEXT:    shrb %cl
1785 ; AVX2-NEXT:    andb $85, %cl
1786 ; AVX2-NEXT:    subb %cl, %al
1787 ; AVX2-NEXT:    movb %al, %cl
1788 ; AVX2-NEXT:    andb $51, %cl
1789 ; AVX2-NEXT:    shrb $2, %al
1790 ; AVX2-NEXT:    andb $51, %al
1791 ; AVX2-NEXT:    addb %cl, %al
1792 ; AVX2-NEXT:    movb %al, %cl
1793 ; AVX2-NEXT:    shrb $4, %cl
1794 ; AVX2-NEXT:    addb %al, %cl
1795 ; AVX2-NEXT:    andb $15, %cl
1796 ; AVX2-NEXT:    movzbl %cl, %eax
1797 ; AVX2-NEXT:    vpinsrb $8, %eax, %xmm2, %xmm2
1798 ; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
1799 ; AVX2-NEXT:    movb %al, %cl
1800 ; AVX2-NEXT:    shrb %cl
1801 ; AVX2-NEXT:    andb $85, %cl
1802 ; AVX2-NEXT:    subb %cl, %al
1803 ; AVX2-NEXT:    movb %al, %cl
1804 ; AVX2-NEXT:    andb $51, %cl
1805 ; AVX2-NEXT:    shrb $2, %al
1806 ; AVX2-NEXT:    andb $51, %al
1807 ; AVX2-NEXT:    addb %cl, %al
1808 ; AVX2-NEXT:    movb %al, %cl
1809 ; AVX2-NEXT:    shrb $4, %cl
1810 ; AVX2-NEXT:    addb %al, %cl
1811 ; AVX2-NEXT:    andb $15, %cl
1812 ; AVX2-NEXT:    movzbl %cl, %eax
1813 ; AVX2-NEXT:    vpinsrb $9, %eax, %xmm2, %xmm2
1814 ; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
1815 ; AVX2-NEXT:    movb %al, %cl
1816 ; AVX2-NEXT:    shrb %cl
1817 ; AVX2-NEXT:    andb $85, %cl
1818 ; AVX2-NEXT:    subb %cl, %al
1819 ; AVX2-NEXT:    movb %al, %cl
1820 ; AVX2-NEXT:    andb $51, %cl
1821 ; AVX2-NEXT:    shrb $2, %al
1822 ; AVX2-NEXT:    andb $51, %al
1823 ; AVX2-NEXT:    addb %cl, %al
1824 ; AVX2-NEXT:    movb %al, %cl
1825 ; AVX2-NEXT:    shrb $4, %cl
1826 ; AVX2-NEXT:    addb %al, %cl
1827 ; AVX2-NEXT:    andb $15, %cl
1828 ; AVX2-NEXT:    movzbl %cl, %eax
1829 ; AVX2-NEXT:    vpinsrb $10, %eax, %xmm2, %xmm2
1830 ; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
1831 ; AVX2-NEXT:    movb %al, %cl
1832 ; AVX2-NEXT:    shrb %cl
1833 ; AVX2-NEXT:    andb $85, %cl
1834 ; AVX2-NEXT:    subb %cl, %al
1835 ; AVX2-NEXT:    movb %al, %cl
1836 ; AVX2-NEXT:    andb $51, %cl
1837 ; AVX2-NEXT:    shrb $2, %al
1838 ; AVX2-NEXT:    andb $51, %al
1839 ; AVX2-NEXT:    addb %cl, %al
1840 ; AVX2-NEXT:    movb %al, %cl
1841 ; AVX2-NEXT:    shrb $4, %cl
1842 ; AVX2-NEXT:    addb %al, %cl
1843 ; AVX2-NEXT:    andb $15, %cl
1844 ; AVX2-NEXT:    movzbl %cl, %eax
1845 ; AVX2-NEXT:    vpinsrb $11, %eax, %xmm2, %xmm2
1846 ; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
1847 ; AVX2-NEXT:    movb %al, %cl
1848 ; AVX2-NEXT:    shrb %cl
1849 ; AVX2-NEXT:    andb $85, %cl
1850 ; AVX2-NEXT:    subb %cl, %al
1851 ; AVX2-NEXT:    movb %al, %cl
1852 ; AVX2-NEXT:    andb $51, %cl
1853 ; AVX2-NEXT:    shrb $2, %al
1854 ; AVX2-NEXT:    andb $51, %al
1855 ; AVX2-NEXT:    addb %cl, %al
1856 ; AVX2-NEXT:    movb %al, %cl
1857 ; AVX2-NEXT:    shrb $4, %cl
1858 ; AVX2-NEXT:    addb %al, %cl
1859 ; AVX2-NEXT:    andb $15, %cl
1860 ; AVX2-NEXT:    movzbl %cl, %eax
1861 ; AVX2-NEXT:    vpinsrb $12, %eax, %xmm2, %xmm2
1862 ; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
1863 ; AVX2-NEXT:    movb %al, %cl
1864 ; AVX2-NEXT:    shrb %cl
1865 ; AVX2-NEXT:    andb $85, %cl
1866 ; AVX2-NEXT:    subb %cl, %al
1867 ; AVX2-NEXT:    movb %al, %cl
1868 ; AVX2-NEXT:    andb $51, %cl
1869 ; AVX2-NEXT:    shrb $2, %al
1870 ; AVX2-NEXT:    andb $51, %al
1871 ; AVX2-NEXT:    addb %cl, %al
1872 ; AVX2-NEXT:    movb %al, %cl
1873 ; AVX2-NEXT:    shrb $4, %cl
1874 ; AVX2-NEXT:    addb %al, %cl
1875 ; AVX2-NEXT:    andb $15, %cl
1876 ; AVX2-NEXT:    movzbl %cl, %eax
1877 ; AVX2-NEXT:    vpinsrb $13, %eax, %xmm2, %xmm2
1878 ; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
1879 ; AVX2-NEXT:    movb %al, %cl
1880 ; AVX2-NEXT:    shrb %cl
1881 ; AVX2-NEXT:    andb $85, %cl
1882 ; AVX2-NEXT:    subb %cl, %al
1883 ; AVX2-NEXT:    movb %al, %cl
1884 ; AVX2-NEXT:    andb $51, %cl
1885 ; AVX2-NEXT:    shrb $2, %al
1886 ; AVX2-NEXT:    andb $51, %al
1887 ; AVX2-NEXT:    addb %cl, %al
1888 ; AVX2-NEXT:    movb %al, %cl
1889 ; AVX2-NEXT:    shrb $4, %cl
1890 ; AVX2-NEXT:    addb %al, %cl
1891 ; AVX2-NEXT:    andb $15, %cl
1892 ; AVX2-NEXT:    movzbl %cl, %eax
1893 ; AVX2-NEXT:    vpinsrb $14, %eax, %xmm2, %xmm2
1894 ; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
1895 ; AVX2-NEXT:    movb %al, %cl
1896 ; AVX2-NEXT:    shrb %cl
1897 ; AVX2-NEXT:    andb $85, %cl
1898 ; AVX2-NEXT:    subb %cl, %al
1899 ; AVX2-NEXT:    movb %al, %cl
1900 ; AVX2-NEXT:    andb $51, %cl
1901 ; AVX2-NEXT:    shrb $2, %al
1902 ; AVX2-NEXT:    andb $51, %al
1903 ; AVX2-NEXT:    addb %cl, %al
1904 ; AVX2-NEXT:    movb %al, %cl
1905 ; AVX2-NEXT:    shrb $4, %cl
1906 ; AVX2-NEXT:    addb %al, %cl
1907 ; AVX2-NEXT:    andb $15, %cl
1908 ; AVX2-NEXT:    movzbl %cl, %eax
1909 ; AVX2-NEXT:    vpinsrb $15, %eax, %xmm2, %xmm0
1910 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1911 ; AVX2-NEXT:    retq
1912   %out = call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %in)
1913   ret <32 x i8> %out
1914 }
1915
1916 declare <4 x i64> @llvm.ctpop.v4i64(<4 x i64>)
1917 declare <8 x i32> @llvm.ctpop.v8i32(<8 x i32>)
1918 declare <16 x i16> @llvm.ctpop.v16i16(<16 x i16>)
1919 declare <32 x i8> @llvm.ctpop.v32i8(<32 x i8>)