[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / bitcast-vector-bool.ll
blob57aa53199afae0b4cdec51e84c69b00a17a95b30
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX12,AVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX12,AVX2
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512bw | FileCheck %s --check-prefixes=AVX512
9 ; 128-bit vectors
12 define i1 @bitcast_v2i64_to_v2i1(<2 x i64> %a0) nounwind {
13 ; SSE2-SSSE3-LABEL: bitcast_v2i64_to_v2i1:
14 ; SSE2-SSSE3:       # %bb.0:
15 ; SSE2-SSSE3-NEXT:    movmskpd %xmm0, %ecx
16 ; SSE2-SSSE3-NEXT:    movl %ecx, %eax
17 ; SSE2-SSSE3-NEXT:    shrb %al
18 ; SSE2-SSSE3-NEXT:    addb %cl, %al
19 ; SSE2-SSSE3-NEXT:    retq
21 ; AVX12-LABEL: bitcast_v2i64_to_v2i1:
22 ; AVX12:       # %bb.0:
23 ; AVX12-NEXT:    vmovmskpd %xmm0, %ecx
24 ; AVX12-NEXT:    movl %ecx, %eax
25 ; AVX12-NEXT:    shrb %al
26 ; AVX12-NEXT:    addb %cl, %al
27 ; AVX12-NEXT:    retq
29 ; AVX512-LABEL: bitcast_v2i64_to_v2i1:
30 ; AVX512:       # %bb.0:
31 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32 ; AVX512-NEXT:    vpcmpgtq %xmm0, %xmm1, %k0
33 ; AVX512-NEXT:    kshiftrw $1, %k0, %k1
34 ; AVX512-NEXT:    kmovd %k1, %ecx
35 ; AVX512-NEXT:    kmovd %k0, %eax
36 ; AVX512-NEXT:    addb %cl, %al
37 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
38 ; AVX512-NEXT:    retq
39   %1 = icmp slt <2 x i64> %a0, zeroinitializer
40   %2 = bitcast <2 x i1> %1 to <2 x i1>
41   %3 = extractelement <2 x i1> %2, i32 0
42   %4 = extractelement <2 x i1> %2, i32 1
43   %5 = add i1 %3, %4
44   ret i1 %5
47 define i2 @bitcast_v4i32_to_v2i2(<4 x i32> %a0) nounwind {
48 ; SSE2-SSSE3-LABEL: bitcast_v4i32_to_v2i2:
49 ; SSE2-SSSE3:       # %bb.0:
50 ; SSE2-SSSE3-NEXT:    movmskps %xmm0, %eax
51 ; SSE2-SSSE3-NEXT:    movl %eax, %ecx
52 ; SSE2-SSSE3-NEXT:    andl $3, %ecx
53 ; SSE2-SSSE3-NEXT:    movq %rcx, %xmm0
54 ; SSE2-SSSE3-NEXT:    shrl $2, %eax
55 ; SSE2-SSSE3-NEXT:    movq %rax, %xmm1
56 ; SSE2-SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
57 ; SSE2-SSSE3-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
58 ; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
59 ; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al
60 ; SSE2-SSSE3-NEXT:    retq
62 ; AVX12-LABEL: bitcast_v4i32_to_v2i2:
63 ; AVX12:       # %bb.0:
64 ; AVX12-NEXT:    vmovmskps %xmm0, %eax
65 ; AVX12-NEXT:    movl %eax, %ecx
66 ; AVX12-NEXT:    shrl $2, %ecx
67 ; AVX12-NEXT:    vmovd %ecx, %xmm0
68 ; AVX12-NEXT:    andl $3, %eax
69 ; AVX12-NEXT:    vmovd %eax, %xmm1
70 ; AVX12-NEXT:    vpextrb $0, %xmm1, %ecx
71 ; AVX12-NEXT:    vpextrb $0, %xmm0, %eax
72 ; AVX12-NEXT:    addb %cl, %al
73 ; AVX12-NEXT:    # kill: def $al killed $al killed $eax
74 ; AVX12-NEXT:    retq
76 ; AVX512-LABEL: bitcast_v4i32_to_v2i2:
77 ; AVX512:       # %bb.0:
78 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
79 ; AVX512-NEXT:    vpcmpgtd %xmm0, %xmm1, %k0
80 ; AVX512-NEXT:    kmovd %k0, %eax
81 ; AVX512-NEXT:    movzbl %al, %ecx
82 ; AVX512-NEXT:    shrl $2, %ecx
83 ; AVX512-NEXT:    andl $3, %ecx
84 ; AVX512-NEXT:    vmovd %ecx, %xmm0
85 ; AVX512-NEXT:    andl $3, %eax
86 ; AVX512-NEXT:    vmovd %eax, %xmm1
87 ; AVX512-NEXT:    vpextrb $0, %xmm1, %ecx
88 ; AVX512-NEXT:    vpextrb $0, %xmm0, %eax
89 ; AVX512-NEXT:    addb %cl, %al
90 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
91 ; AVX512-NEXT:    retq
92   %1 = icmp slt <4 x i32> %a0, zeroinitializer
93   %2 = bitcast <4 x i1> %1 to <2 x i2>
94   %3 = extractelement <2 x i2> %2, i32 0
95   %4 = extractelement <2 x i2> %2, i32 1
96   %5 = add i2 %3, %4
97   ret i2 %5
100 define i4 @bitcast_v8i16_to_v2i4(<8 x i16> %a0) nounwind {
101 ; SSE2-SSSE3-LABEL: bitcast_v8i16_to_v2i4:
102 ; SSE2-SSSE3:       # %bb.0:
103 ; SSE2-SSSE3-NEXT:    packsswb %xmm0, %xmm0
104 ; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax
105 ; SSE2-SSSE3-NEXT:    movzbl %al, %ecx
106 ; SSE2-SSSE3-NEXT:    shrl $4, %ecx
107 ; SSE2-SSSE3-NEXT:    movq %rcx, %xmm0
108 ; SSE2-SSSE3-NEXT:    andl $15, %eax
109 ; SSE2-SSSE3-NEXT:    movq %rax, %xmm1
110 ; SSE2-SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
111 ; SSE2-SSSE3-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
112 ; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
113 ; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al
114 ; SSE2-SSSE3-NEXT:    retq
116 ; AVX12-LABEL: bitcast_v8i16_to_v2i4:
117 ; AVX12:       # %bb.0:
118 ; AVX12-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
119 ; AVX12-NEXT:    vpmovmskb %xmm0, %eax
120 ; AVX12-NEXT:    movzbl %al, %ecx
121 ; AVX12-NEXT:    shrl $4, %ecx
122 ; AVX12-NEXT:    vmovd %ecx, %xmm0
123 ; AVX12-NEXT:    andl $15, %eax
124 ; AVX12-NEXT:    vmovd %eax, %xmm1
125 ; AVX12-NEXT:    vpextrb $0, %xmm1, %ecx
126 ; AVX12-NEXT:    vpextrb $0, %xmm0, %eax
127 ; AVX12-NEXT:    addb %cl, %al
128 ; AVX12-NEXT:    # kill: def $al killed $al killed $eax
129 ; AVX12-NEXT:    retq
131 ; AVX512-LABEL: bitcast_v8i16_to_v2i4:
132 ; AVX512:       # %bb.0:
133 ; AVX512-NEXT:    vpmovw2m %xmm0, %k0
134 ; AVX512-NEXT:    kmovd %k0, %eax
135 ; AVX512-NEXT:    movzbl %al, %ecx
136 ; AVX512-NEXT:    shrl $4, %ecx
137 ; AVX512-NEXT:    vmovd %ecx, %xmm0
138 ; AVX512-NEXT:    andl $15, %eax
139 ; AVX512-NEXT:    vmovd %eax, %xmm1
140 ; AVX512-NEXT:    vpextrb $0, %xmm1, %ecx
141 ; AVX512-NEXT:    vpextrb $0, %xmm0, %eax
142 ; AVX512-NEXT:    addb %cl, %al
143 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
144 ; AVX512-NEXT:    retq
145   %1 = icmp slt <8 x i16> %a0, zeroinitializer
146   %2 = bitcast <8 x i1> %1 to <2 x i4>
147   %3 = extractelement <2 x i4> %2, i32 0
148   %4 = extractelement <2 x i4> %2, i32 1
149   %5 = add i4 %3, %4
150   ret i4 %5
153 define i8 @bitcast_v16i8_to_v2i8(<16 x i8> %a0) nounwind {
154 ; SSE2-SSSE3-LABEL: bitcast_v16i8_to_v2i8:
155 ; SSE2-SSSE3:       # %bb.0:
156 ; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax
157 ; SSE2-SSSE3-NEXT:    movd %eax, %xmm0
158 ; SSE2-SSSE3-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
159 ; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
160 ; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al
161 ; SSE2-SSSE3-NEXT:    retq
163 ; AVX12-LABEL: bitcast_v16i8_to_v2i8:
164 ; AVX12:       # %bb.0:
165 ; AVX12-NEXT:    vpmovmskb %xmm0, %eax
166 ; AVX12-NEXT:    vmovd %eax, %xmm0
167 ; AVX12-NEXT:    vpextrb $0, %xmm0, %ecx
168 ; AVX12-NEXT:    vpextrb $1, %xmm0, %eax
169 ; AVX12-NEXT:    addb %cl, %al
170 ; AVX12-NEXT:    # kill: def $al killed $al killed $eax
171 ; AVX12-NEXT:    retq
173 ; AVX512-LABEL: bitcast_v16i8_to_v2i8:
174 ; AVX512:       # %bb.0:
175 ; AVX512-NEXT:    vpmovb2m %xmm0, %k0
176 ; AVX512-NEXT:    kmovw %k0, -{{[0-9]+}}(%rsp)
177 ; AVX512-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0
178 ; AVX512-NEXT:    vpextrb $0, %xmm0, %ecx
179 ; AVX512-NEXT:    vpextrb $1, %xmm0, %eax
180 ; AVX512-NEXT:    addb %cl, %al
181 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
182 ; AVX512-NEXT:    retq
183   %1 = icmp slt <16 x i8> %a0, zeroinitializer
184   %2 = bitcast <16 x i1> %1 to <2 x i8>
185   %3 = extractelement <2 x i8> %2, i32 0
186   %4 = extractelement <2 x i8> %2, i32 1
187   %5 = add i8 %3, %4
188   ret i8 %5
192 ; 256-bit vectors
195 define i2 @bitcast_v4i64_to_v2i2(<4 x i64> %a0) nounwind {
196 ; SSE2-SSSE3-LABEL: bitcast_v4i64_to_v2i2:
197 ; SSE2-SSSE3:       # %bb.0:
198 ; SSE2-SSSE3-NEXT:    packssdw %xmm1, %xmm0
199 ; SSE2-SSSE3-NEXT:    movmskps %xmm0, %eax
200 ; SSE2-SSSE3-NEXT:    movl %eax, %ecx
201 ; SSE2-SSSE3-NEXT:    shrl $2, %ecx
202 ; SSE2-SSSE3-NEXT:    movq %rcx, %xmm0
203 ; SSE2-SSSE3-NEXT:    andl $3, %eax
204 ; SSE2-SSSE3-NEXT:    movq %rax, %xmm1
205 ; SSE2-SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
206 ; SSE2-SSSE3-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
207 ; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
208 ; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al
209 ; SSE2-SSSE3-NEXT:    retq
211 ; AVX12-LABEL: bitcast_v4i64_to_v2i2:
212 ; AVX12:       # %bb.0:
213 ; AVX12-NEXT:    vmovmskpd %ymm0, %eax
214 ; AVX12-NEXT:    movl %eax, %ecx
215 ; AVX12-NEXT:    shrl $2, %ecx
216 ; AVX12-NEXT:    vmovd %ecx, %xmm0
217 ; AVX12-NEXT:    andl $3, %eax
218 ; AVX12-NEXT:    vmovd %eax, %xmm1
219 ; AVX12-NEXT:    vpextrb $0, %xmm1, %ecx
220 ; AVX12-NEXT:    vpextrb $0, %xmm0, %eax
221 ; AVX12-NEXT:    addb %cl, %al
222 ; AVX12-NEXT:    # kill: def $al killed $al killed $eax
223 ; AVX12-NEXT:    vzeroupper
224 ; AVX12-NEXT:    retq
226 ; AVX512-LABEL: bitcast_v4i64_to_v2i2:
227 ; AVX512:       # %bb.0:
228 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
229 ; AVX512-NEXT:    vpcmpgtq %ymm0, %ymm1, %k0
230 ; AVX512-NEXT:    kmovd %k0, %eax
231 ; AVX512-NEXT:    movzbl %al, %ecx
232 ; AVX512-NEXT:    shrl $2, %ecx
233 ; AVX512-NEXT:    andl $3, %ecx
234 ; AVX512-NEXT:    vmovd %ecx, %xmm0
235 ; AVX512-NEXT:    andl $3, %eax
236 ; AVX512-NEXT:    vmovd %eax, %xmm1
237 ; AVX512-NEXT:    vpextrb $0, %xmm1, %ecx
238 ; AVX512-NEXT:    vpextrb $0, %xmm0, %eax
239 ; AVX512-NEXT:    addb %cl, %al
240 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
241 ; AVX512-NEXT:    vzeroupper
242 ; AVX512-NEXT:    retq
243   %1 = icmp slt <4 x i64> %a0, zeroinitializer
244   %2 = bitcast <4 x i1> %1 to <2 x i2>
245   %3 = extractelement <2 x i2> %2, i32 0
246   %4 = extractelement <2 x i2> %2, i32 1
247   %5 = add i2 %3, %4
248   ret i2 %5
251 define i4 @bitcast_v8i32_to_v2i4(<8 x i32> %a0) nounwind {
252 ; SSE2-SSSE3-LABEL: bitcast_v8i32_to_v2i4:
253 ; SSE2-SSSE3:       # %bb.0:
254 ; SSE2-SSSE3-NEXT:    packssdw %xmm1, %xmm0
255 ; SSE2-SSSE3-NEXT:    packsswb %xmm0, %xmm0
256 ; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax
257 ; SSE2-SSSE3-NEXT:    movzbl %al, %ecx
258 ; SSE2-SSSE3-NEXT:    shrl $4, %ecx
259 ; SSE2-SSSE3-NEXT:    movq %rcx, %xmm0
260 ; SSE2-SSSE3-NEXT:    andl $15, %eax
261 ; SSE2-SSSE3-NEXT:    movq %rax, %xmm1
262 ; SSE2-SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
263 ; SSE2-SSSE3-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
264 ; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
265 ; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al
266 ; SSE2-SSSE3-NEXT:    retq
268 ; AVX12-LABEL: bitcast_v8i32_to_v2i4:
269 ; AVX12:       # %bb.0:
270 ; AVX12-NEXT:    vmovmskps %ymm0, %eax
271 ; AVX12-NEXT:    movl %eax, %ecx
272 ; AVX12-NEXT:    shrl $4, %ecx
273 ; AVX12-NEXT:    vmovd %ecx, %xmm0
274 ; AVX12-NEXT:    andl $15, %eax
275 ; AVX12-NEXT:    vmovd %eax, %xmm1
276 ; AVX12-NEXT:    vpextrb $0, %xmm1, %ecx
277 ; AVX12-NEXT:    vpextrb $0, %xmm0, %eax
278 ; AVX12-NEXT:    addb %cl, %al
279 ; AVX12-NEXT:    # kill: def $al killed $al killed $eax
280 ; AVX12-NEXT:    vzeroupper
281 ; AVX12-NEXT:    retq
283 ; AVX512-LABEL: bitcast_v8i32_to_v2i4:
284 ; AVX512:       # %bb.0:
285 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
286 ; AVX512-NEXT:    vpcmpgtd %ymm0, %ymm1, %k0
287 ; AVX512-NEXT:    kmovd %k0, %eax
288 ; AVX512-NEXT:    movzbl %al, %ecx
289 ; AVX512-NEXT:    shrl $4, %ecx
290 ; AVX512-NEXT:    vmovd %ecx, %xmm0
291 ; AVX512-NEXT:    andl $15, %eax
292 ; AVX512-NEXT:    vmovd %eax, %xmm1
293 ; AVX512-NEXT:    vpextrb $0, %xmm1, %ecx
294 ; AVX512-NEXT:    vpextrb $0, %xmm0, %eax
295 ; AVX512-NEXT:    addb %cl, %al
296 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
297 ; AVX512-NEXT:    vzeroupper
298 ; AVX512-NEXT:    retq
299   %1 = icmp slt <8 x i32> %a0, zeroinitializer
300   %2 = bitcast <8 x i1> %1 to <2 x i4>
301   %3 = extractelement <2 x i4> %2, i32 0
302   %4 = extractelement <2 x i4> %2, i32 1
303   %5 = add i4 %3, %4
304   ret i4 %5
307 define i8 @bitcast_v16i16_to_v2i8(<16 x i16> %a0) nounwind {
308 ; SSE2-SSSE3-LABEL: bitcast_v16i16_to_v2i8:
309 ; SSE2-SSSE3:       # %bb.0:
310 ; SSE2-SSSE3-NEXT:    packsswb %xmm1, %xmm0
311 ; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax
312 ; SSE2-SSSE3-NEXT:    movd %eax, %xmm0
313 ; SSE2-SSSE3-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
314 ; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
315 ; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al
316 ; SSE2-SSSE3-NEXT:    retq
318 ; AVX1-LABEL: bitcast_v16i16_to_v2i8:
319 ; AVX1:       # %bb.0:
320 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
321 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
322 ; AVX1-NEXT:    vpmovmskb %xmm0, %eax
323 ; AVX1-NEXT:    vmovd %eax, %xmm0
324 ; AVX1-NEXT:    vpextrb $0, %xmm0, %ecx
325 ; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
326 ; AVX1-NEXT:    addb %cl, %al
327 ; AVX1-NEXT:    # kill: def $al killed $al killed $eax
328 ; AVX1-NEXT:    vzeroupper
329 ; AVX1-NEXT:    retq
331 ; AVX2-LABEL: bitcast_v16i16_to_v2i8:
332 ; AVX2:       # %bb.0:
333 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
334 ; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
335 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
336 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
337 ; AVX2-NEXT:    vpmovmskb %xmm0, %eax
338 ; AVX2-NEXT:    vmovd %eax, %xmm0
339 ; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
340 ; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
341 ; AVX2-NEXT:    addb %cl, %al
342 ; AVX2-NEXT:    # kill: def $al killed $al killed $eax
343 ; AVX2-NEXT:    vzeroupper
344 ; AVX2-NEXT:    retq
346 ; AVX512-LABEL: bitcast_v16i16_to_v2i8:
347 ; AVX512:       # %bb.0:
348 ; AVX512-NEXT:    vpmovw2m %ymm0, %k0
349 ; AVX512-NEXT:    kmovw %k0, -{{[0-9]+}}(%rsp)
350 ; AVX512-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0
351 ; AVX512-NEXT:    vpextrb $0, %xmm0, %ecx
352 ; AVX512-NEXT:    vpextrb $1, %xmm0, %eax
353 ; AVX512-NEXT:    addb %cl, %al
354 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
355 ; AVX512-NEXT:    vzeroupper
356 ; AVX512-NEXT:    retq
357   %1 = icmp slt <16 x i16> %a0, zeroinitializer
358   %2 = bitcast <16 x i1> %1 to <2 x i8>
359   %3 = extractelement <2 x i8> %2, i32 0
360   %4 = extractelement <2 x i8> %2, i32 1
361   %5 = add i8 %3, %4
362   ret i8 %5
365 define i16 @bitcast_v32i8_to_v2i16(<32 x i8> %a0) nounwind {
366 ; SSE2-SSSE3-LABEL: bitcast_v32i8_to_v2i16:
367 ; SSE2-SSSE3:       # %bb.0:
368 ; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %ecx
369 ; SSE2-SSSE3-NEXT:    pmovmskb %xmm1, %eax
370 ; SSE2-SSSE3-NEXT:    shll $16, %eax
371 ; SSE2-SSSE3-NEXT:    movd %eax, %xmm0
372 ; SSE2-SSSE3-NEXT:    pextrw $1, %xmm0, %eax
373 ; SSE2-SSSE3-NEXT:    addl %ecx, %eax
374 ; SSE2-SSSE3-NEXT:    # kill: def $ax killed $ax killed $eax
375 ; SSE2-SSSE3-NEXT:    retq
377 ; AVX1-LABEL: bitcast_v32i8_to_v2i16:
378 ; AVX1:       # %bb.0:
379 ; AVX1-NEXT:    vpmovmskb %xmm0, %ecx
380 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
381 ; AVX1-NEXT:    vpmovmskb %xmm0, %eax
382 ; AVX1-NEXT:    shll $16, %eax
383 ; AVX1-NEXT:    vmovd %eax, %xmm0
384 ; AVX1-NEXT:    vpextrw $1, %xmm0, %eax
385 ; AVX1-NEXT:    addl %ecx, %eax
386 ; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax
387 ; AVX1-NEXT:    vzeroupper
388 ; AVX1-NEXT:    retq
390 ; AVX2-LABEL: bitcast_v32i8_to_v2i16:
391 ; AVX2:       # %bb.0:
392 ; AVX2-NEXT:    vpmovmskb %ymm0, %ecx
393 ; AVX2-NEXT:    vmovd %ecx, %xmm0
394 ; AVX2-NEXT:    vpextrw $1, %xmm0, %eax
395 ; AVX2-NEXT:    addl %ecx, %eax
396 ; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax
397 ; AVX2-NEXT:    vzeroupper
398 ; AVX2-NEXT:    retq
400 ; AVX512-LABEL: bitcast_v32i8_to_v2i16:
401 ; AVX512:       # %bb.0:
402 ; AVX512-NEXT:    pushq %rbp
403 ; AVX512-NEXT:    movq %rsp, %rbp
404 ; AVX512-NEXT:    andq $-32, %rsp
405 ; AVX512-NEXT:    subq $32, %rsp
406 ; AVX512-NEXT:    vpmovb2m %ymm0, %k0
407 ; AVX512-NEXT:    kmovd %k0, (%rsp)
408 ; AVX512-NEXT:    vmovdqa (%rsp), %xmm0
409 ; AVX512-NEXT:    vmovd %xmm0, %ecx
410 ; AVX512-NEXT:    vpextrw $1, %xmm0, %eax
411 ; AVX512-NEXT:    addl %ecx, %eax
412 ; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax
413 ; AVX512-NEXT:    movq %rbp, %rsp
414 ; AVX512-NEXT:    popq %rbp
415 ; AVX512-NEXT:    vzeroupper
416 ; AVX512-NEXT:    retq
417   %1 = icmp slt <32 x i8> %a0, zeroinitializer
418   %2 = bitcast <32 x i1> %1 to <2 x i16>
419   %3 = extractelement <2 x i16> %2, i32 0
420   %4 = extractelement <2 x i16> %2, i32 1
421   %5 = add i16 %3, %4
422   ret i16 %5
426 ; 512-bit vectors
429 define i4 @bitcast_v8i64_to_v2i4(<8 x i64> %a0) nounwind {
430 ; SSE2-SSSE3-LABEL: bitcast_v8i64_to_v2i4:
431 ; SSE2-SSSE3:       # %bb.0:
432 ; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
433 ; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm3
434 ; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm5
435 ; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm5
436 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
437 ; SSE2-SSSE3-NEXT:    pcmpeqd %xmm4, %xmm3
438 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
439 ; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm3
440 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
441 ; SSE2-SSSE3-NEXT:    por %xmm3, %xmm5
442 ; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm2
443 ; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm3
444 ; SSE2-SSSE3-NEXT:    pcmpgtd %xmm2, %xmm3
445 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
446 ; SSE2-SSSE3-NEXT:    pcmpeqd %xmm4, %xmm2
447 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
448 ; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm7
449 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
450 ; SSE2-SSSE3-NEXT:    por %xmm7, %xmm2
451 ; SSE2-SSSE3-NEXT:    packssdw %xmm5, %xmm2
452 ; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm1
453 ; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm3
454 ; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm3
455 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
456 ; SSE2-SSSE3-NEXT:    pcmpeqd %xmm4, %xmm1
457 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
458 ; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm1
459 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
460 ; SSE2-SSSE3-NEXT:    por %xmm1, %xmm3
461 ; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm0
462 ; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm1
463 ; SSE2-SSSE3-NEXT:    pcmpgtd %xmm0, %xmm1
464 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
465 ; SSE2-SSSE3-NEXT:    pcmpeqd %xmm4, %xmm0
466 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
467 ; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm0
468 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
469 ; SSE2-SSSE3-NEXT:    por %xmm0, %xmm1
470 ; SSE2-SSSE3-NEXT:    packssdw %xmm3, %xmm1
471 ; SSE2-SSSE3-NEXT:    packssdw %xmm2, %xmm1
472 ; SSE2-SSSE3-NEXT:    packsswb %xmm0, %xmm1
473 ; SSE2-SSSE3-NEXT:    pmovmskb %xmm1, %eax
474 ; SSE2-SSSE3-NEXT:    movzbl %al, %ecx
475 ; SSE2-SSSE3-NEXT:    shrl $4, %ecx
476 ; SSE2-SSSE3-NEXT:    movq %rcx, %xmm0
477 ; SSE2-SSSE3-NEXT:    andl $15, %eax
478 ; SSE2-SSSE3-NEXT:    movq %rax, %xmm1
479 ; SSE2-SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
480 ; SSE2-SSSE3-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
481 ; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
482 ; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al
483 ; SSE2-SSSE3-NEXT:    retq
485 ; AVX1-LABEL: bitcast_v8i64_to_v2i4:
486 ; AVX1:       # %bb.0:
487 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
488 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
489 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
490 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm0
491 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
492 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
493 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm1, %xmm1
494 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
495 ; AVX1-NEXT:    vmovmskps %ymm0, %eax
496 ; AVX1-NEXT:    movl %eax, %ecx
497 ; AVX1-NEXT:    shrl $4, %ecx
498 ; AVX1-NEXT:    vmovd %ecx, %xmm0
499 ; AVX1-NEXT:    andl $15, %eax
500 ; AVX1-NEXT:    vmovd %eax, %xmm1
501 ; AVX1-NEXT:    vpextrb $0, %xmm1, %ecx
502 ; AVX1-NEXT:    vpextrb $0, %xmm0, %eax
503 ; AVX1-NEXT:    addb %cl, %al
504 ; AVX1-NEXT:    # kill: def $al killed $al killed $eax
505 ; AVX1-NEXT:    vzeroupper
506 ; AVX1-NEXT:    retq
508 ; AVX2-LABEL: bitcast_v8i64_to_v2i4:
509 ; AVX2:       # %bb.0:
510 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
511 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
512 ; AVX2-NEXT:    vmovmskps %ymm0, %eax
513 ; AVX2-NEXT:    movl %eax, %ecx
514 ; AVX2-NEXT:    shrl $4, %ecx
515 ; AVX2-NEXT:    vmovd %ecx, %xmm0
516 ; AVX2-NEXT:    andl $15, %eax
517 ; AVX2-NEXT:    vmovd %eax, %xmm1
518 ; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
519 ; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
520 ; AVX2-NEXT:    addb %cl, %al
521 ; AVX2-NEXT:    # kill: def $al killed $al killed $eax
522 ; AVX2-NEXT:    vzeroupper
523 ; AVX2-NEXT:    retq
525 ; AVX512-LABEL: bitcast_v8i64_to_v2i4:
526 ; AVX512:       # %bb.0:
527 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
528 ; AVX512-NEXT:    vpcmpgtq %zmm0, %zmm1, %k0
529 ; AVX512-NEXT:    kmovd %k0, %eax
530 ; AVX512-NEXT:    movzbl %al, %ecx
531 ; AVX512-NEXT:    shrl $4, %ecx
532 ; AVX512-NEXT:    vmovd %ecx, %xmm0
533 ; AVX512-NEXT:    andl $15, %eax
534 ; AVX512-NEXT:    vmovd %eax, %xmm1
535 ; AVX512-NEXT:    vpextrb $0, %xmm1, %ecx
536 ; AVX512-NEXT:    vpextrb $0, %xmm0, %eax
537 ; AVX512-NEXT:    addb %cl, %al
538 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
539 ; AVX512-NEXT:    vzeroupper
540 ; AVX512-NEXT:    retq
541   %1 = icmp slt <8 x i64> %a0, zeroinitializer
542   %2 = bitcast <8 x i1> %1 to <2 x i4>
543   %3 = extractelement <2 x i4> %2, i32 0
544   %4 = extractelement <2 x i4> %2, i32 1
545   %5 = add i4 %3, %4
546   ret i4 %5
549 define i8 @bitcast_v16i32_to_v2i8(<16 x i32> %a0) nounwind {
550 ; SSE2-SSSE3-LABEL: bitcast_v16i32_to_v2i8:
551 ; SSE2-SSSE3:       # %bb.0:
552 ; SSE2-SSSE3-NEXT:    packssdw %xmm3, %xmm2
553 ; SSE2-SSSE3-NEXT:    packssdw %xmm1, %xmm0
554 ; SSE2-SSSE3-NEXT:    packsswb %xmm2, %xmm0
555 ; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax
556 ; SSE2-SSSE3-NEXT:    movd %eax, %xmm0
557 ; SSE2-SSSE3-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
558 ; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
559 ; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al
560 ; SSE2-SSSE3-NEXT:    retq
562 ; AVX1-LABEL: bitcast_v16i32_to_v2i8:
563 ; AVX1:       # %bb.0:
564 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
565 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm1, %xmm1
566 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
567 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
568 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
569 ; AVX1-NEXT:    vpmovmskb %xmm0, %eax
570 ; AVX1-NEXT:    vmovd %eax, %xmm0
571 ; AVX1-NEXT:    vpextrb $0, %xmm0, %ecx
572 ; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
573 ; AVX1-NEXT:    addb %cl, %al
574 ; AVX1-NEXT:    # kill: def $al killed $al killed $eax
575 ; AVX1-NEXT:    vzeroupper
576 ; AVX1-NEXT:    retq
578 ; AVX2-LABEL: bitcast_v16i32_to_v2i8:
579 ; AVX2:       # %bb.0:
580 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
581 ; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm2, %ymm1
582 ; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm2, %ymm0
583 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
584 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
585 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
586 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
587 ; AVX2-NEXT:    vpmovmskb %xmm0, %eax
588 ; AVX2-NEXT:    vmovd %eax, %xmm0
589 ; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
590 ; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
591 ; AVX2-NEXT:    addb %cl, %al
592 ; AVX2-NEXT:    # kill: def $al killed $al killed $eax
593 ; AVX2-NEXT:    vzeroupper
594 ; AVX2-NEXT:    retq
596 ; AVX512-LABEL: bitcast_v16i32_to_v2i8:
597 ; AVX512:       # %bb.0:
598 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
599 ; AVX512-NEXT:    vpcmpgtd %zmm0, %zmm1, %k0
600 ; AVX512-NEXT:    kmovw %k0, -{{[0-9]+}}(%rsp)
601 ; AVX512-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0
602 ; AVX512-NEXT:    vpextrb $0, %xmm0, %ecx
603 ; AVX512-NEXT:    vpextrb $1, %xmm0, %eax
604 ; AVX512-NEXT:    addb %cl, %al
605 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
606 ; AVX512-NEXT:    vzeroupper
607 ; AVX512-NEXT:    retq
608   %1 = icmp slt <16 x i32> %a0, zeroinitializer
609   %2 = bitcast <16 x i1> %1 to <2 x i8>
610   %3 = extractelement <2 x i8> %2, i32 0
611   %4 = extractelement <2 x i8> %2, i32 1
612   %5 = add i8 %3, %4
613   ret i8 %5
616 define i16 @bitcast_v32i16_to_v2i16(<32 x i16> %a0) nounwind {
617 ; SSE2-SSSE3-LABEL: bitcast_v32i16_to_v2i16:
618 ; SSE2-SSSE3:       # %bb.0:
619 ; SSE2-SSSE3-NEXT:    packsswb %xmm1, %xmm0
620 ; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %ecx
621 ; SSE2-SSSE3-NEXT:    packsswb %xmm3, %xmm2
622 ; SSE2-SSSE3-NEXT:    pmovmskb %xmm2, %eax
623 ; SSE2-SSSE3-NEXT:    shll $16, %eax
624 ; SSE2-SSSE3-NEXT:    movd %eax, %xmm0
625 ; SSE2-SSSE3-NEXT:    pextrw $1, %xmm0, %eax
626 ; SSE2-SSSE3-NEXT:    addl %ecx, %eax
627 ; SSE2-SSSE3-NEXT:    # kill: def $ax killed $ax killed $eax
628 ; SSE2-SSSE3-NEXT:    retq
630 ; AVX1-LABEL: bitcast_v32i16_to_v2i16:
631 ; AVX1:       # %bb.0:
632 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
633 ; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
634 ; AVX1-NEXT:    vpmovmskb %xmm0, %ecx
635 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
636 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm1, %xmm0
637 ; AVX1-NEXT:    vpmovmskb %xmm0, %eax
638 ; AVX1-NEXT:    shll $16, %eax
639 ; AVX1-NEXT:    vmovd %eax, %xmm0
640 ; AVX1-NEXT:    vpextrw $1, %xmm0, %eax
641 ; AVX1-NEXT:    addl %ecx, %eax
642 ; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax
643 ; AVX1-NEXT:    vzeroupper
644 ; AVX1-NEXT:    retq
646 ; AVX2-LABEL: bitcast_v32i16_to_v2i16:
647 ; AVX2:       # %bb.0:
648 ; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
649 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
650 ; AVX2-NEXT:    vpmovmskb %ymm0, %ecx
651 ; AVX2-NEXT:    vmovd %ecx, %xmm0
652 ; AVX2-NEXT:    vpextrw $1, %xmm0, %eax
653 ; AVX2-NEXT:    addl %ecx, %eax
654 ; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax
655 ; AVX2-NEXT:    vzeroupper
656 ; AVX2-NEXT:    retq
658 ; AVX512-LABEL: bitcast_v32i16_to_v2i16:
659 ; AVX512:       # %bb.0:
660 ; AVX512-NEXT:    pushq %rbp
661 ; AVX512-NEXT:    movq %rsp, %rbp
662 ; AVX512-NEXT:    andq $-32, %rsp
663 ; AVX512-NEXT:    subq $32, %rsp
664 ; AVX512-NEXT:    vpmovw2m %zmm0, %k0
665 ; AVX512-NEXT:    kmovd %k0, (%rsp)
666 ; AVX512-NEXT:    vmovdqa (%rsp), %xmm0
667 ; AVX512-NEXT:    vmovd %xmm0, %ecx
668 ; AVX512-NEXT:    vpextrw $1, %xmm0, %eax
669 ; AVX512-NEXT:    addl %ecx, %eax
670 ; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax
671 ; AVX512-NEXT:    movq %rbp, %rsp
672 ; AVX512-NEXT:    popq %rbp
673 ; AVX512-NEXT:    vzeroupper
674 ; AVX512-NEXT:    retq
675   %1 = icmp slt <32 x i16> %a0, zeroinitializer
676   %2 = bitcast <32 x i1> %1 to <2 x i16>
677   %3 = extractelement <2 x i16> %2, i32 0
678   %4 = extractelement <2 x i16> %2, i32 1
679   %5 = add i16 %3, %4
680   ret i16 %5
683 define i32 @bitcast_v64i8_to_v2i32(<64 x i8> %a0) nounwind {
684 ; SSE2-SSSE3-LABEL: bitcast_v64i8_to_v2i32:
685 ; SSE2-SSSE3:       # %bb.0:
686 ; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm4
687 ; SSE2-SSSE3-NEXT:    pxor %xmm5, %xmm5
688 ; SSE2-SSSE3-NEXT:    pcmpgtb %xmm3, %xmm5
689 ; SSE2-SSSE3-NEXT:    movdqa %xmm5, -{{[0-9]+}}(%rsp)
690 ; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm3
691 ; SSE2-SSSE3-NEXT:    pcmpgtb %xmm2, %xmm3
692 ; SSE2-SSSE3-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
693 ; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm2
694 ; SSE2-SSSE3-NEXT:    pcmpgtb %xmm1, %xmm2
695 ; SSE2-SSSE3-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
696 ; SSE2-SSSE3-NEXT:    pcmpgtb %xmm0, %xmm4
697 ; SSE2-SSSE3-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
698 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
699 ; SSE2-SSSE3-NEXT:    andl $1, %eax
700 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
701 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
702 ; SSE2-SSSE3-NEXT:    leal (%rcx,%rax,2), %eax
703 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
704 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
705 ; SSE2-SSSE3-NEXT:    leal (%rax,%rcx,4), %eax
706 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
707 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
708 ; SSE2-SSSE3-NEXT:    leal (%rax,%rcx,8), %eax
709 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
710 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
711 ; SSE2-SSSE3-NEXT:    shll $4, %ecx
712 ; SSE2-SSSE3-NEXT:    orl %eax, %ecx
713 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
714 ; SSE2-SSSE3-NEXT:    andl $1, %eax
715 ; SSE2-SSSE3-NEXT:    shll $5, %eax
716 ; SSE2-SSSE3-NEXT:    orl %ecx, %eax
717 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
718 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
719 ; SSE2-SSSE3-NEXT:    shll $6, %ecx
720 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
721 ; SSE2-SSSE3-NEXT:    andl $1, %edx
722 ; SSE2-SSSE3-NEXT:    shll $7, %edx
723 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
724 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
725 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
726 ; SSE2-SSSE3-NEXT:    shll $8, %ecx
727 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
728 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
729 ; SSE2-SSSE3-NEXT:    andl $1, %edx
730 ; SSE2-SSSE3-NEXT:    shll $9, %edx
731 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
732 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
733 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
734 ; SSE2-SSSE3-NEXT:    shll $10, %ecx
735 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
736 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
737 ; SSE2-SSSE3-NEXT:    andl $1, %edx
738 ; SSE2-SSSE3-NEXT:    shll $11, %edx
739 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
740 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
741 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
742 ; SSE2-SSSE3-NEXT:    shll $12, %ecx
743 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
744 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
745 ; SSE2-SSSE3-NEXT:    andl $1, %edx
746 ; SSE2-SSSE3-NEXT:    shll $13, %edx
747 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
748 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
749 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
750 ; SSE2-SSSE3-NEXT:    shll $14, %ecx
751 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
752 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
753 ; SSE2-SSSE3-NEXT:    shll $15, %edx
754 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
755 ; SSE2-SSSE3-NEXT:    orl %eax, %edx
756 ; SSE2-SSSE3-NEXT:    movw %dx, -{{[0-9]+}}(%rsp)
757 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
758 ; SSE2-SSSE3-NEXT:    andl $1, %eax
759 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
760 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
761 ; SSE2-SSSE3-NEXT:    leal (%rcx,%rax,2), %eax
762 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
763 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
764 ; SSE2-SSSE3-NEXT:    leal (%rax,%rcx,4), %eax
765 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
766 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
767 ; SSE2-SSSE3-NEXT:    leal (%rax,%rcx,8), %eax
768 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
769 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
770 ; SSE2-SSSE3-NEXT:    shll $4, %ecx
771 ; SSE2-SSSE3-NEXT:    orl %eax, %ecx
772 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
773 ; SSE2-SSSE3-NEXT:    andl $1, %eax
774 ; SSE2-SSSE3-NEXT:    shll $5, %eax
775 ; SSE2-SSSE3-NEXT:    orl %ecx, %eax
776 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
777 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
778 ; SSE2-SSSE3-NEXT:    shll $6, %ecx
779 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
780 ; SSE2-SSSE3-NEXT:    andl $1, %edx
781 ; SSE2-SSSE3-NEXT:    shll $7, %edx
782 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
783 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
784 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
785 ; SSE2-SSSE3-NEXT:    shll $8, %ecx
786 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
787 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
788 ; SSE2-SSSE3-NEXT:    andl $1, %edx
789 ; SSE2-SSSE3-NEXT:    shll $9, %edx
790 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
791 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
792 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
793 ; SSE2-SSSE3-NEXT:    shll $10, %ecx
794 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
795 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
796 ; SSE2-SSSE3-NEXT:    andl $1, %edx
797 ; SSE2-SSSE3-NEXT:    shll $11, %edx
798 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
799 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
800 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
801 ; SSE2-SSSE3-NEXT:    shll $12, %ecx
802 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
803 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
804 ; SSE2-SSSE3-NEXT:    andl $1, %edx
805 ; SSE2-SSSE3-NEXT:    shll $13, %edx
806 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
807 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
808 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
809 ; SSE2-SSSE3-NEXT:    shll $14, %ecx
810 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
811 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
812 ; SSE2-SSSE3-NEXT:    shll $15, %edx
813 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
814 ; SSE2-SSSE3-NEXT:    orl %eax, %edx
815 ; SSE2-SSSE3-NEXT:    movw %dx, -{{[0-9]+}}(%rsp)
816 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
817 ; SSE2-SSSE3-NEXT:    andl $1, %eax
818 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
819 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
820 ; SSE2-SSSE3-NEXT:    leal (%rcx,%rax,2), %eax
821 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
822 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
823 ; SSE2-SSSE3-NEXT:    leal (%rax,%rcx,4), %eax
824 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
825 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
826 ; SSE2-SSSE3-NEXT:    leal (%rax,%rcx,8), %eax
827 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
828 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
829 ; SSE2-SSSE3-NEXT:    shll $4, %ecx
830 ; SSE2-SSSE3-NEXT:    orl %eax, %ecx
831 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
832 ; SSE2-SSSE3-NEXT:    andl $1, %eax
833 ; SSE2-SSSE3-NEXT:    shll $5, %eax
834 ; SSE2-SSSE3-NEXT:    orl %ecx, %eax
835 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
836 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
837 ; SSE2-SSSE3-NEXT:    shll $6, %ecx
838 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
839 ; SSE2-SSSE3-NEXT:    andl $1, %edx
840 ; SSE2-SSSE3-NEXT:    shll $7, %edx
841 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
842 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
843 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
844 ; SSE2-SSSE3-NEXT:    shll $8, %ecx
845 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
846 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
847 ; SSE2-SSSE3-NEXT:    andl $1, %edx
848 ; SSE2-SSSE3-NEXT:    shll $9, %edx
849 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
850 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
851 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
852 ; SSE2-SSSE3-NEXT:    shll $10, %ecx
853 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
854 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
855 ; SSE2-SSSE3-NEXT:    andl $1, %edx
856 ; SSE2-SSSE3-NEXT:    shll $11, %edx
857 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
858 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
859 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
860 ; SSE2-SSSE3-NEXT:    shll $12, %ecx
861 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
862 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
863 ; SSE2-SSSE3-NEXT:    andl $1, %edx
864 ; SSE2-SSSE3-NEXT:    shll $13, %edx
865 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
866 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
867 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
868 ; SSE2-SSSE3-NEXT:    shll $14, %ecx
869 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
870 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
871 ; SSE2-SSSE3-NEXT:    shll $15, %edx
872 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
873 ; SSE2-SSSE3-NEXT:    orl %eax, %edx
874 ; SSE2-SSSE3-NEXT:    movw %dx, -{{[0-9]+}}(%rsp)
875 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
876 ; SSE2-SSSE3-NEXT:    andl $1, %eax
877 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
878 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
879 ; SSE2-SSSE3-NEXT:    leal (%rcx,%rax,2), %eax
880 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
881 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
882 ; SSE2-SSSE3-NEXT:    leal (%rax,%rcx,4), %eax
883 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
884 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
885 ; SSE2-SSSE3-NEXT:    leal (%rax,%rcx,8), %eax
886 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
887 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
888 ; SSE2-SSSE3-NEXT:    shll $4, %ecx
889 ; SSE2-SSSE3-NEXT:    orl %eax, %ecx
890 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
891 ; SSE2-SSSE3-NEXT:    andl $1, %eax
892 ; SSE2-SSSE3-NEXT:    shll $5, %eax
893 ; SSE2-SSSE3-NEXT:    orl %ecx, %eax
894 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
895 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
896 ; SSE2-SSSE3-NEXT:    shll $6, %ecx
897 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
898 ; SSE2-SSSE3-NEXT:    andl $1, %edx
899 ; SSE2-SSSE3-NEXT:    shll $7, %edx
900 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
901 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
902 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
903 ; SSE2-SSSE3-NEXT:    shll $8, %ecx
904 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
905 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
906 ; SSE2-SSSE3-NEXT:    andl $1, %edx
907 ; SSE2-SSSE3-NEXT:    shll $9, %edx
908 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
909 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
910 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
911 ; SSE2-SSSE3-NEXT:    shll $10, %ecx
912 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
913 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
914 ; SSE2-SSSE3-NEXT:    andl $1, %edx
915 ; SSE2-SSSE3-NEXT:    shll $11, %edx
916 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
917 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
918 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
919 ; SSE2-SSSE3-NEXT:    shll $12, %ecx
920 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
921 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
922 ; SSE2-SSSE3-NEXT:    andl $1, %edx
923 ; SSE2-SSSE3-NEXT:    shll $13, %edx
924 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
925 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
926 ; SSE2-SSSE3-NEXT:    andl $1, %ecx
927 ; SSE2-SSSE3-NEXT:    shll $14, %ecx
928 ; SSE2-SSSE3-NEXT:    orl %edx, %ecx
929 ; SSE2-SSSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
930 ; SSE2-SSSE3-NEXT:    shll $15, %edx
931 ; SSE2-SSSE3-NEXT:    orl %ecx, %edx
932 ; SSE2-SSSE3-NEXT:    orl %eax, %edx
933 ; SSE2-SSSE3-NEXT:    movw %dx, -{{[0-9]+}}(%rsp)
934 ; SSE2-SSSE3-NEXT:    movdqa -{{[0-9]+}}(%rsp), %xmm0
935 ; SSE2-SSSE3-NEXT:    movd %xmm0, %ecx
936 ; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
937 ; SSE2-SSSE3-NEXT:    movd %xmm0, %eax
938 ; SSE2-SSSE3-NEXT:    addl %ecx, %eax
939 ; SSE2-SSSE3-NEXT:    retq
941 ; AVX1-LABEL: bitcast_v64i8_to_v2i32:
942 ; AVX1:       # %bb.0:
943 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
944 ; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm2, %xmm3
945 ; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
946 ; AVX1-NEXT:    andl $1, %eax
947 ; AVX1-NEXT:    vpextrb $0, %xmm3, %ecx
948 ; AVX1-NEXT:    andl $1, %ecx
949 ; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
950 ; AVX1-NEXT:    vpextrb $2, %xmm3, %ecx
951 ; AVX1-NEXT:    andl $1, %ecx
952 ; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
953 ; AVX1-NEXT:    vpextrb $3, %xmm3, %ecx
954 ; AVX1-NEXT:    andl $1, %ecx
955 ; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
956 ; AVX1-NEXT:    vpextrb $4, %xmm3, %ecx
957 ; AVX1-NEXT:    andl $1, %ecx
958 ; AVX1-NEXT:    shll $4, %ecx
959 ; AVX1-NEXT:    orl %eax, %ecx
960 ; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
961 ; AVX1-NEXT:    andl $1, %eax
962 ; AVX1-NEXT:    shll $5, %eax
963 ; AVX1-NEXT:    orl %ecx, %eax
964 ; AVX1-NEXT:    vpextrb $6, %xmm3, %ecx
965 ; AVX1-NEXT:    andl $1, %ecx
966 ; AVX1-NEXT:    shll $6, %ecx
967 ; AVX1-NEXT:    vpextrb $7, %xmm3, %edx
968 ; AVX1-NEXT:    andl $1, %edx
969 ; AVX1-NEXT:    shll $7, %edx
970 ; AVX1-NEXT:    orl %ecx, %edx
971 ; AVX1-NEXT:    vpextrb $8, %xmm3, %ecx
972 ; AVX1-NEXT:    andl $1, %ecx
973 ; AVX1-NEXT:    shll $8, %ecx
974 ; AVX1-NEXT:    orl %edx, %ecx
975 ; AVX1-NEXT:    vpextrb $9, %xmm3, %edx
976 ; AVX1-NEXT:    andl $1, %edx
977 ; AVX1-NEXT:    shll $9, %edx
978 ; AVX1-NEXT:    orl %ecx, %edx
979 ; AVX1-NEXT:    vpextrb $10, %xmm3, %ecx
980 ; AVX1-NEXT:    andl $1, %ecx
981 ; AVX1-NEXT:    shll $10, %ecx
982 ; AVX1-NEXT:    orl %edx, %ecx
983 ; AVX1-NEXT:    vpextrb $11, %xmm3, %edx
984 ; AVX1-NEXT:    andl $1, %edx
985 ; AVX1-NEXT:    shll $11, %edx
986 ; AVX1-NEXT:    orl %ecx, %edx
987 ; AVX1-NEXT:    vpextrb $12, %xmm3, %ecx
988 ; AVX1-NEXT:    andl $1, %ecx
989 ; AVX1-NEXT:    shll $12, %ecx
990 ; AVX1-NEXT:    orl %edx, %ecx
991 ; AVX1-NEXT:    vpextrb $13, %xmm3, %edx
992 ; AVX1-NEXT:    andl $1, %edx
993 ; AVX1-NEXT:    shll $13, %edx
994 ; AVX1-NEXT:    orl %ecx, %edx
995 ; AVX1-NEXT:    vpextrb $14, %xmm3, %ecx
996 ; AVX1-NEXT:    andl $1, %ecx
997 ; AVX1-NEXT:    shll $14, %ecx
998 ; AVX1-NEXT:    orl %edx, %ecx
999 ; AVX1-NEXT:    vpextrb $15, %xmm3, %edx
1000 ; AVX1-NEXT:    andl $1, %edx
1001 ; AVX1-NEXT:    shll $15, %edx
1002 ; AVX1-NEXT:    orl %ecx, %edx
1003 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1004 ; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm2, %xmm1
1005 ; AVX1-NEXT:    vpextrb $0, %xmm1, %ecx
1006 ; AVX1-NEXT:    andl $1, %ecx
1007 ; AVX1-NEXT:    shll $16, %ecx
1008 ; AVX1-NEXT:    orl %edx, %ecx
1009 ; AVX1-NEXT:    vpextrb $1, %xmm1, %edx
1010 ; AVX1-NEXT:    andl $1, %edx
1011 ; AVX1-NEXT:    shll $17, %edx
1012 ; AVX1-NEXT:    orl %ecx, %edx
1013 ; AVX1-NEXT:    vpextrb $2, %xmm1, %ecx
1014 ; AVX1-NEXT:    andl $1, %ecx
1015 ; AVX1-NEXT:    shll $18, %ecx
1016 ; AVX1-NEXT:    orl %edx, %ecx
1017 ; AVX1-NEXT:    vpextrb $3, %xmm1, %edx
1018 ; AVX1-NEXT:    andl $1, %edx
1019 ; AVX1-NEXT:    shll $19, %edx
1020 ; AVX1-NEXT:    orl %ecx, %edx
1021 ; AVX1-NEXT:    vpextrb $4, %xmm1, %ecx
1022 ; AVX1-NEXT:    andl $1, %ecx
1023 ; AVX1-NEXT:    shll $20, %ecx
1024 ; AVX1-NEXT:    orl %edx, %ecx
1025 ; AVX1-NEXT:    vpextrb $5, %xmm1, %edx
1026 ; AVX1-NEXT:    andl $1, %edx
1027 ; AVX1-NEXT:    shll $21, %edx
1028 ; AVX1-NEXT:    orl %ecx, %edx
1029 ; AVX1-NEXT:    vpextrb $6, %xmm1, %ecx
1030 ; AVX1-NEXT:    andl $1, %ecx
1031 ; AVX1-NEXT:    shll $22, %ecx
1032 ; AVX1-NEXT:    orl %edx, %ecx
1033 ; AVX1-NEXT:    vpextrb $7, %xmm1, %edx
1034 ; AVX1-NEXT:    andl $1, %edx
1035 ; AVX1-NEXT:    shll $23, %edx
1036 ; AVX1-NEXT:    orl %ecx, %edx
1037 ; AVX1-NEXT:    vpextrb $8, %xmm1, %ecx
1038 ; AVX1-NEXT:    andl $1, %ecx
1039 ; AVX1-NEXT:    shll $24, %ecx
1040 ; AVX1-NEXT:    orl %edx, %ecx
1041 ; AVX1-NEXT:    vpextrb $9, %xmm1, %edx
1042 ; AVX1-NEXT:    andl $1, %edx
1043 ; AVX1-NEXT:    shll $25, %edx
1044 ; AVX1-NEXT:    orl %ecx, %edx
1045 ; AVX1-NEXT:    vpextrb $10, %xmm1, %ecx
1046 ; AVX1-NEXT:    andl $1, %ecx
1047 ; AVX1-NEXT:    shll $26, %ecx
1048 ; AVX1-NEXT:    orl %edx, %ecx
1049 ; AVX1-NEXT:    vpextrb $11, %xmm1, %edx
1050 ; AVX1-NEXT:    andl $1, %edx
1051 ; AVX1-NEXT:    shll $27, %edx
1052 ; AVX1-NEXT:    orl %ecx, %edx
1053 ; AVX1-NEXT:    vpextrb $12, %xmm1, %ecx
1054 ; AVX1-NEXT:    andl $1, %ecx
1055 ; AVX1-NEXT:    shll $28, %ecx
1056 ; AVX1-NEXT:    orl %edx, %ecx
1057 ; AVX1-NEXT:    vpextrb $13, %xmm1, %edx
1058 ; AVX1-NEXT:    andl $1, %edx
1059 ; AVX1-NEXT:    shll $29, %edx
1060 ; AVX1-NEXT:    orl %ecx, %edx
1061 ; AVX1-NEXT:    vpextrb $14, %xmm1, %ecx
1062 ; AVX1-NEXT:    andl $1, %ecx
1063 ; AVX1-NEXT:    shll $30, %ecx
1064 ; AVX1-NEXT:    orl %edx, %ecx
1065 ; AVX1-NEXT:    vpextrb $15, %xmm1, %edx
1066 ; AVX1-NEXT:    shll $31, %edx
1067 ; AVX1-NEXT:    orl %ecx, %edx
1068 ; AVX1-NEXT:    orl %eax, %edx
1069 ; AVX1-NEXT:    movl %edx, -{{[0-9]+}}(%rsp)
1070 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm1
1071 ; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
1072 ; AVX1-NEXT:    andl $1, %eax
1073 ; AVX1-NEXT:    vpextrb $0, %xmm1, %ecx
1074 ; AVX1-NEXT:    andl $1, %ecx
1075 ; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
1076 ; AVX1-NEXT:    vpextrb $2, %xmm1, %ecx
1077 ; AVX1-NEXT:    andl $1, %ecx
1078 ; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
1079 ; AVX1-NEXT:    vpextrb $3, %xmm1, %ecx
1080 ; AVX1-NEXT:    andl $1, %ecx
1081 ; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
1082 ; AVX1-NEXT:    vpextrb $4, %xmm1, %ecx
1083 ; AVX1-NEXT:    andl $1, %ecx
1084 ; AVX1-NEXT:    shll $4, %ecx
1085 ; AVX1-NEXT:    orl %eax, %ecx
1086 ; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
1087 ; AVX1-NEXT:    andl $1, %eax
1088 ; AVX1-NEXT:    shll $5, %eax
1089 ; AVX1-NEXT:    orl %ecx, %eax
1090 ; AVX1-NEXT:    vpextrb $6, %xmm1, %ecx
1091 ; AVX1-NEXT:    andl $1, %ecx
1092 ; AVX1-NEXT:    shll $6, %ecx
1093 ; AVX1-NEXT:    vpextrb $7, %xmm1, %edx
1094 ; AVX1-NEXT:    andl $1, %edx
1095 ; AVX1-NEXT:    shll $7, %edx
1096 ; AVX1-NEXT:    orl %ecx, %edx
1097 ; AVX1-NEXT:    vpextrb $8, %xmm1, %ecx
1098 ; AVX1-NEXT:    andl $1, %ecx
1099 ; AVX1-NEXT:    shll $8, %ecx
1100 ; AVX1-NEXT:    orl %edx, %ecx
1101 ; AVX1-NEXT:    vpextrb $9, %xmm1, %edx
1102 ; AVX1-NEXT:    andl $1, %edx
1103 ; AVX1-NEXT:    shll $9, %edx
1104 ; AVX1-NEXT:    orl %ecx, %edx
1105 ; AVX1-NEXT:    vpextrb $10, %xmm1, %ecx
1106 ; AVX1-NEXT:    andl $1, %ecx
1107 ; AVX1-NEXT:    shll $10, %ecx
1108 ; AVX1-NEXT:    orl %edx, %ecx
1109 ; AVX1-NEXT:    vpextrb $11, %xmm1, %edx
1110 ; AVX1-NEXT:    andl $1, %edx
1111 ; AVX1-NEXT:    shll $11, %edx
1112 ; AVX1-NEXT:    orl %ecx, %edx
1113 ; AVX1-NEXT:    vpextrb $12, %xmm1, %ecx
1114 ; AVX1-NEXT:    andl $1, %ecx
1115 ; AVX1-NEXT:    shll $12, %ecx
1116 ; AVX1-NEXT:    orl %edx, %ecx
1117 ; AVX1-NEXT:    vpextrb $13, %xmm1, %edx
1118 ; AVX1-NEXT:    andl $1, %edx
1119 ; AVX1-NEXT:    shll $13, %edx
1120 ; AVX1-NEXT:    orl %ecx, %edx
1121 ; AVX1-NEXT:    vpextrb $14, %xmm1, %ecx
1122 ; AVX1-NEXT:    andl $1, %ecx
1123 ; AVX1-NEXT:    shll $14, %ecx
1124 ; AVX1-NEXT:    orl %edx, %ecx
1125 ; AVX1-NEXT:    vpextrb $15, %xmm1, %edx
1126 ; AVX1-NEXT:    andl $1, %edx
1127 ; AVX1-NEXT:    shll $15, %edx
1128 ; AVX1-NEXT:    orl %ecx, %edx
1129 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1130 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm0
1131 ; AVX1-NEXT:    vpextrb $0, %xmm0, %ecx
1132 ; AVX1-NEXT:    andl $1, %ecx
1133 ; AVX1-NEXT:    shll $16, %ecx
1134 ; AVX1-NEXT:    orl %edx, %ecx
1135 ; AVX1-NEXT:    vpextrb $1, %xmm0, %edx
1136 ; AVX1-NEXT:    andl $1, %edx
1137 ; AVX1-NEXT:    shll $17, %edx
1138 ; AVX1-NEXT:    orl %ecx, %edx
1139 ; AVX1-NEXT:    vpextrb $2, %xmm0, %ecx
1140 ; AVX1-NEXT:    andl $1, %ecx
1141 ; AVX1-NEXT:    shll $18, %ecx
1142 ; AVX1-NEXT:    orl %edx, %ecx
1143 ; AVX1-NEXT:    vpextrb $3, %xmm0, %edx
1144 ; AVX1-NEXT:    andl $1, %edx
1145 ; AVX1-NEXT:    shll $19, %edx
1146 ; AVX1-NEXT:    orl %ecx, %edx
1147 ; AVX1-NEXT:    vpextrb $4, %xmm0, %ecx
1148 ; AVX1-NEXT:    andl $1, %ecx
1149 ; AVX1-NEXT:    shll $20, %ecx
1150 ; AVX1-NEXT:    orl %edx, %ecx
1151 ; AVX1-NEXT:    vpextrb $5, %xmm0, %edx
1152 ; AVX1-NEXT:    andl $1, %edx
1153 ; AVX1-NEXT:    shll $21, %edx
1154 ; AVX1-NEXT:    orl %ecx, %edx
1155 ; AVX1-NEXT:    vpextrb $6, %xmm0, %ecx
1156 ; AVX1-NEXT:    andl $1, %ecx
1157 ; AVX1-NEXT:    shll $22, %ecx
1158 ; AVX1-NEXT:    orl %edx, %ecx
1159 ; AVX1-NEXT:    vpextrb $7, %xmm0, %edx
1160 ; AVX1-NEXT:    andl $1, %edx
1161 ; AVX1-NEXT:    shll $23, %edx
1162 ; AVX1-NEXT:    orl %ecx, %edx
1163 ; AVX1-NEXT:    vpextrb $8, %xmm0, %ecx
1164 ; AVX1-NEXT:    andl $1, %ecx
1165 ; AVX1-NEXT:    shll $24, %ecx
1166 ; AVX1-NEXT:    orl %edx, %ecx
1167 ; AVX1-NEXT:    vpextrb $9, %xmm0, %edx
1168 ; AVX1-NEXT:    andl $1, %edx
1169 ; AVX1-NEXT:    shll $25, %edx
1170 ; AVX1-NEXT:    orl %ecx, %edx
1171 ; AVX1-NEXT:    vpextrb $10, %xmm0, %ecx
1172 ; AVX1-NEXT:    andl $1, %ecx
1173 ; AVX1-NEXT:    shll $26, %ecx
1174 ; AVX1-NEXT:    orl %edx, %ecx
1175 ; AVX1-NEXT:    vpextrb $11, %xmm0, %edx
1176 ; AVX1-NEXT:    andl $1, %edx
1177 ; AVX1-NEXT:    shll $27, %edx
1178 ; AVX1-NEXT:    orl %ecx, %edx
1179 ; AVX1-NEXT:    vpextrb $12, %xmm0, %ecx
1180 ; AVX1-NEXT:    andl $1, %ecx
1181 ; AVX1-NEXT:    shll $28, %ecx
1182 ; AVX1-NEXT:    orl %edx, %ecx
1183 ; AVX1-NEXT:    vpextrb $13, %xmm0, %edx
1184 ; AVX1-NEXT:    andl $1, %edx
1185 ; AVX1-NEXT:    shll $29, %edx
1186 ; AVX1-NEXT:    orl %ecx, %edx
1187 ; AVX1-NEXT:    vpextrb $14, %xmm0, %ecx
1188 ; AVX1-NEXT:    andl $1, %ecx
1189 ; AVX1-NEXT:    shll $30, %ecx
1190 ; AVX1-NEXT:    orl %edx, %ecx
1191 ; AVX1-NEXT:    vpextrb $15, %xmm0, %edx
1192 ; AVX1-NEXT:    shll $31, %edx
1193 ; AVX1-NEXT:    orl %ecx, %edx
1194 ; AVX1-NEXT:    orl %eax, %edx
1195 ; AVX1-NEXT:    movl %edx, -{{[0-9]+}}(%rsp)
1196 ; AVX1-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0
1197 ; AVX1-NEXT:    vmovd %xmm0, %ecx
1198 ; AVX1-NEXT:    vpextrd $1, %xmm0, %eax
1199 ; AVX1-NEXT:    addl %ecx, %eax
1200 ; AVX1-NEXT:    vzeroupper
1201 ; AVX1-NEXT:    retq
1203 ; AVX2-LABEL: bitcast_v64i8_to_v2i32:
1204 ; AVX2:       # %bb.0:
1205 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1206 ; AVX2-NEXT:    vpcmpgtb %ymm1, %ymm2, %ymm1
1207 ; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
1208 ; AVX2-NEXT:    andl $1, %eax
1209 ; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
1210 ; AVX2-NEXT:    andl $1, %ecx
1211 ; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
1212 ; AVX2-NEXT:    vpextrb $2, %xmm1, %ecx
1213 ; AVX2-NEXT:    andl $1, %ecx
1214 ; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
1215 ; AVX2-NEXT:    vpextrb $3, %xmm1, %ecx
1216 ; AVX2-NEXT:    andl $1, %ecx
1217 ; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
1218 ; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
1219 ; AVX2-NEXT:    andl $1, %ecx
1220 ; AVX2-NEXT:    shll $4, %ecx
1221 ; AVX2-NEXT:    orl %eax, %ecx
1222 ; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
1223 ; AVX2-NEXT:    andl $1, %eax
1224 ; AVX2-NEXT:    shll $5, %eax
1225 ; AVX2-NEXT:    orl %ecx, %eax
1226 ; AVX2-NEXT:    vpextrb $6, %xmm1, %ecx
1227 ; AVX2-NEXT:    andl $1, %ecx
1228 ; AVX2-NEXT:    shll $6, %ecx
1229 ; AVX2-NEXT:    vpextrb $7, %xmm1, %edx
1230 ; AVX2-NEXT:    andl $1, %edx
1231 ; AVX2-NEXT:    shll $7, %edx
1232 ; AVX2-NEXT:    orl %ecx, %edx
1233 ; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
1234 ; AVX2-NEXT:    andl $1, %ecx
1235 ; AVX2-NEXT:    shll $8, %ecx
1236 ; AVX2-NEXT:    orl %edx, %ecx
1237 ; AVX2-NEXT:    vpextrb $9, %xmm1, %edx
1238 ; AVX2-NEXT:    andl $1, %edx
1239 ; AVX2-NEXT:    shll $9, %edx
1240 ; AVX2-NEXT:    orl %ecx, %edx
1241 ; AVX2-NEXT:    vpextrb $10, %xmm1, %ecx
1242 ; AVX2-NEXT:    andl $1, %ecx
1243 ; AVX2-NEXT:    shll $10, %ecx
1244 ; AVX2-NEXT:    orl %edx, %ecx
1245 ; AVX2-NEXT:    vpextrb $11, %xmm1, %edx
1246 ; AVX2-NEXT:    andl $1, %edx
1247 ; AVX2-NEXT:    shll $11, %edx
1248 ; AVX2-NEXT:    orl %ecx, %edx
1249 ; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
1250 ; AVX2-NEXT:    andl $1, %ecx
1251 ; AVX2-NEXT:    shll $12, %ecx
1252 ; AVX2-NEXT:    orl %edx, %ecx
1253 ; AVX2-NEXT:    vpextrb $13, %xmm1, %edx
1254 ; AVX2-NEXT:    andl $1, %edx
1255 ; AVX2-NEXT:    shll $13, %edx
1256 ; AVX2-NEXT:    orl %ecx, %edx
1257 ; AVX2-NEXT:    vpextrb $14, %xmm1, %ecx
1258 ; AVX2-NEXT:    andl $1, %ecx
1259 ; AVX2-NEXT:    shll $14, %ecx
1260 ; AVX2-NEXT:    orl %edx, %ecx
1261 ; AVX2-NEXT:    vpextrb $15, %xmm1, %edx
1262 ; AVX2-NEXT:    andl $1, %edx
1263 ; AVX2-NEXT:    shll $15, %edx
1264 ; AVX2-NEXT:    orl %ecx, %edx
1265 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
1266 ; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
1267 ; AVX2-NEXT:    andl $1, %ecx
1268 ; AVX2-NEXT:    shll $16, %ecx
1269 ; AVX2-NEXT:    orl %edx, %ecx
1270 ; AVX2-NEXT:    vpextrb $1, %xmm1, %edx
1271 ; AVX2-NEXT:    andl $1, %edx
1272 ; AVX2-NEXT:    shll $17, %edx
1273 ; AVX2-NEXT:    orl %ecx, %edx
1274 ; AVX2-NEXT:    vpextrb $2, %xmm1, %ecx
1275 ; AVX2-NEXT:    andl $1, %ecx
1276 ; AVX2-NEXT:    shll $18, %ecx
1277 ; AVX2-NEXT:    orl %edx, %ecx
1278 ; AVX2-NEXT:    vpextrb $3, %xmm1, %edx
1279 ; AVX2-NEXT:    andl $1, %edx
1280 ; AVX2-NEXT:    shll $19, %edx
1281 ; AVX2-NEXT:    orl %ecx, %edx
1282 ; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
1283 ; AVX2-NEXT:    andl $1, %ecx
1284 ; AVX2-NEXT:    shll $20, %ecx
1285 ; AVX2-NEXT:    orl %edx, %ecx
1286 ; AVX2-NEXT:    vpextrb $5, %xmm1, %edx
1287 ; AVX2-NEXT:    andl $1, %edx
1288 ; AVX2-NEXT:    shll $21, %edx
1289 ; AVX2-NEXT:    orl %ecx, %edx
1290 ; AVX2-NEXT:    vpextrb $6, %xmm1, %ecx
1291 ; AVX2-NEXT:    andl $1, %ecx
1292 ; AVX2-NEXT:    shll $22, %ecx
1293 ; AVX2-NEXT:    orl %edx, %ecx
1294 ; AVX2-NEXT:    vpextrb $7, %xmm1, %edx
1295 ; AVX2-NEXT:    andl $1, %edx
1296 ; AVX2-NEXT:    shll $23, %edx
1297 ; AVX2-NEXT:    orl %ecx, %edx
1298 ; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
1299 ; AVX2-NEXT:    andl $1, %ecx
1300 ; AVX2-NEXT:    shll $24, %ecx
1301 ; AVX2-NEXT:    orl %edx, %ecx
1302 ; AVX2-NEXT:    vpextrb $9, %xmm1, %edx
1303 ; AVX2-NEXT:    andl $1, %edx
1304 ; AVX2-NEXT:    shll $25, %edx
1305 ; AVX2-NEXT:    orl %ecx, %edx
1306 ; AVX2-NEXT:    vpextrb $10, %xmm1, %ecx
1307 ; AVX2-NEXT:    andl $1, %ecx
1308 ; AVX2-NEXT:    shll $26, %ecx
1309 ; AVX2-NEXT:    orl %edx, %ecx
1310 ; AVX2-NEXT:    vpextrb $11, %xmm1, %edx
1311 ; AVX2-NEXT:    andl $1, %edx
1312 ; AVX2-NEXT:    shll $27, %edx
1313 ; AVX2-NEXT:    orl %ecx, %edx
1314 ; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
1315 ; AVX2-NEXT:    andl $1, %ecx
1316 ; AVX2-NEXT:    shll $28, %ecx
1317 ; AVX2-NEXT:    orl %edx, %ecx
1318 ; AVX2-NEXT:    vpextrb $13, %xmm1, %edx
1319 ; AVX2-NEXT:    andl $1, %edx
1320 ; AVX2-NEXT:    shll $29, %edx
1321 ; AVX2-NEXT:    orl %ecx, %edx
1322 ; AVX2-NEXT:    vpextrb $14, %xmm1, %ecx
1323 ; AVX2-NEXT:    andl $1, %ecx
1324 ; AVX2-NEXT:    shll $30, %ecx
1325 ; AVX2-NEXT:    orl %edx, %ecx
1326 ; AVX2-NEXT:    vpextrb $15, %xmm1, %edx
1327 ; AVX2-NEXT:    shll $31, %edx
1328 ; AVX2-NEXT:    orl %ecx, %edx
1329 ; AVX2-NEXT:    orl %eax, %edx
1330 ; AVX2-NEXT:    movl %edx, -{{[0-9]+}}(%rsp)
1331 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm0
1332 ; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
1333 ; AVX2-NEXT:    andl $1, %eax
1334 ; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
1335 ; AVX2-NEXT:    andl $1, %ecx
1336 ; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
1337 ; AVX2-NEXT:    vpextrb $2, %xmm0, %ecx
1338 ; AVX2-NEXT:    andl $1, %ecx
1339 ; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
1340 ; AVX2-NEXT:    vpextrb $3, %xmm0, %ecx
1341 ; AVX2-NEXT:    andl $1, %ecx
1342 ; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
1343 ; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
1344 ; AVX2-NEXT:    andl $1, %ecx
1345 ; AVX2-NEXT:    shll $4, %ecx
1346 ; AVX2-NEXT:    orl %eax, %ecx
1347 ; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
1348 ; AVX2-NEXT:    andl $1, %eax
1349 ; AVX2-NEXT:    shll $5, %eax
1350 ; AVX2-NEXT:    orl %ecx, %eax
1351 ; AVX2-NEXT:    vpextrb $6, %xmm0, %ecx
1352 ; AVX2-NEXT:    andl $1, %ecx
1353 ; AVX2-NEXT:    shll $6, %ecx
1354 ; AVX2-NEXT:    vpextrb $7, %xmm0, %edx
1355 ; AVX2-NEXT:    andl $1, %edx
1356 ; AVX2-NEXT:    shll $7, %edx
1357 ; AVX2-NEXT:    orl %ecx, %edx
1358 ; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
1359 ; AVX2-NEXT:    andl $1, %ecx
1360 ; AVX2-NEXT:    shll $8, %ecx
1361 ; AVX2-NEXT:    orl %edx, %ecx
1362 ; AVX2-NEXT:    vpextrb $9, %xmm0, %edx
1363 ; AVX2-NEXT:    andl $1, %edx
1364 ; AVX2-NEXT:    shll $9, %edx
1365 ; AVX2-NEXT:    orl %ecx, %edx
1366 ; AVX2-NEXT:    vpextrb $10, %xmm0, %ecx
1367 ; AVX2-NEXT:    andl $1, %ecx
1368 ; AVX2-NEXT:    shll $10, %ecx
1369 ; AVX2-NEXT:    orl %edx, %ecx
1370 ; AVX2-NEXT:    vpextrb $11, %xmm0, %edx
1371 ; AVX2-NEXT:    andl $1, %edx
1372 ; AVX2-NEXT:    shll $11, %edx
1373 ; AVX2-NEXT:    orl %ecx, %edx
1374 ; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
1375 ; AVX2-NEXT:    andl $1, %ecx
1376 ; AVX2-NEXT:    shll $12, %ecx
1377 ; AVX2-NEXT:    orl %edx, %ecx
1378 ; AVX2-NEXT:    vpextrb $13, %xmm0, %edx
1379 ; AVX2-NEXT:    andl $1, %edx
1380 ; AVX2-NEXT:    shll $13, %edx
1381 ; AVX2-NEXT:    orl %ecx, %edx
1382 ; AVX2-NEXT:    vpextrb $14, %xmm0, %ecx
1383 ; AVX2-NEXT:    andl $1, %ecx
1384 ; AVX2-NEXT:    shll $14, %ecx
1385 ; AVX2-NEXT:    orl %edx, %ecx
1386 ; AVX2-NEXT:    vpextrb $15, %xmm0, %edx
1387 ; AVX2-NEXT:    andl $1, %edx
1388 ; AVX2-NEXT:    shll $15, %edx
1389 ; AVX2-NEXT:    orl %ecx, %edx
1390 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1391 ; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
1392 ; AVX2-NEXT:    andl $1, %ecx
1393 ; AVX2-NEXT:    shll $16, %ecx
1394 ; AVX2-NEXT:    orl %edx, %ecx
1395 ; AVX2-NEXT:    vpextrb $1, %xmm0, %edx
1396 ; AVX2-NEXT:    andl $1, %edx
1397 ; AVX2-NEXT:    shll $17, %edx
1398 ; AVX2-NEXT:    orl %ecx, %edx
1399 ; AVX2-NEXT:    vpextrb $2, %xmm0, %ecx
1400 ; AVX2-NEXT:    andl $1, %ecx
1401 ; AVX2-NEXT:    shll $18, %ecx
1402 ; AVX2-NEXT:    orl %edx, %ecx
1403 ; AVX2-NEXT:    vpextrb $3, %xmm0, %edx
1404 ; AVX2-NEXT:    andl $1, %edx
1405 ; AVX2-NEXT:    shll $19, %edx
1406 ; AVX2-NEXT:    orl %ecx, %edx
1407 ; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
1408 ; AVX2-NEXT:    andl $1, %ecx
1409 ; AVX2-NEXT:    shll $20, %ecx
1410 ; AVX2-NEXT:    orl %edx, %ecx
1411 ; AVX2-NEXT:    vpextrb $5, %xmm0, %edx
1412 ; AVX2-NEXT:    andl $1, %edx
1413 ; AVX2-NEXT:    shll $21, %edx
1414 ; AVX2-NEXT:    orl %ecx, %edx
1415 ; AVX2-NEXT:    vpextrb $6, %xmm0, %ecx
1416 ; AVX2-NEXT:    andl $1, %ecx
1417 ; AVX2-NEXT:    shll $22, %ecx
1418 ; AVX2-NEXT:    orl %edx, %ecx
1419 ; AVX2-NEXT:    vpextrb $7, %xmm0, %edx
1420 ; AVX2-NEXT:    andl $1, %edx
1421 ; AVX2-NEXT:    shll $23, %edx
1422 ; AVX2-NEXT:    orl %ecx, %edx
1423 ; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
1424 ; AVX2-NEXT:    andl $1, %ecx
1425 ; AVX2-NEXT:    shll $24, %ecx
1426 ; AVX2-NEXT:    orl %edx, %ecx
1427 ; AVX2-NEXT:    vpextrb $9, %xmm0, %edx
1428 ; AVX2-NEXT:    andl $1, %edx
1429 ; AVX2-NEXT:    shll $25, %edx
1430 ; AVX2-NEXT:    orl %ecx, %edx
1431 ; AVX2-NEXT:    vpextrb $10, %xmm0, %ecx
1432 ; AVX2-NEXT:    andl $1, %ecx
1433 ; AVX2-NEXT:    shll $26, %ecx
1434 ; AVX2-NEXT:    orl %edx, %ecx
1435 ; AVX2-NEXT:    vpextrb $11, %xmm0, %edx
1436 ; AVX2-NEXT:    andl $1, %edx
1437 ; AVX2-NEXT:    shll $27, %edx
1438 ; AVX2-NEXT:    orl %ecx, %edx
1439 ; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
1440 ; AVX2-NEXT:    andl $1, %ecx
1441 ; AVX2-NEXT:    shll $28, %ecx
1442 ; AVX2-NEXT:    orl %edx, %ecx
1443 ; AVX2-NEXT:    vpextrb $13, %xmm0, %edx
1444 ; AVX2-NEXT:    andl $1, %edx
1445 ; AVX2-NEXT:    shll $29, %edx
1446 ; AVX2-NEXT:    orl %ecx, %edx
1447 ; AVX2-NEXT:    vpextrb $14, %xmm0, %ecx
1448 ; AVX2-NEXT:    andl $1, %ecx
1449 ; AVX2-NEXT:    shll $30, %ecx
1450 ; AVX2-NEXT:    orl %edx, %ecx
1451 ; AVX2-NEXT:    vpextrb $15, %xmm0, %edx
1452 ; AVX2-NEXT:    shll $31, %edx
1453 ; AVX2-NEXT:    orl %ecx, %edx
1454 ; AVX2-NEXT:    orl %eax, %edx
1455 ; AVX2-NEXT:    movl %edx, -{{[0-9]+}}(%rsp)
1456 ; AVX2-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0
1457 ; AVX2-NEXT:    vmovd %xmm0, %ecx
1458 ; AVX2-NEXT:    vpextrd $1, %xmm0, %eax
1459 ; AVX2-NEXT:    addl %ecx, %eax
1460 ; AVX2-NEXT:    vzeroupper
1461 ; AVX2-NEXT:    retq
1463 ; AVX512-LABEL: bitcast_v64i8_to_v2i32:
1464 ; AVX512:       # %bb.0:
1465 ; AVX512-NEXT:    vpmovb2m %zmm0, %k0
1466 ; AVX512-NEXT:    kmovq %k0, -{{[0-9]+}}(%rsp)
1467 ; AVX512-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0
1468 ; AVX512-NEXT:    vmovd %xmm0, %ecx
1469 ; AVX512-NEXT:    vpextrd $1, %xmm0, %eax
1470 ; AVX512-NEXT:    addl %ecx, %eax
1471 ; AVX512-NEXT:    vzeroupper
1472 ; AVX512-NEXT:    retq
1473   %1 = icmp slt <64 x i8> %a0, zeroinitializer
1474   %2 = bitcast <64 x i1> %1 to <2 x i32>
1475   %3 = extractelement <2 x i32> %2, i32 0
1476   %4 = extractelement <2 x i32> %2, i32 1
1477   %5 = add i32 %3, %4
1478   ret i32 %5