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