]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/X86/vector-compare-results.ll
Vendor import of llvm trunk r338150:
[FreeBSD/FreeBSD.git] / test / CodeGen / X86 / vector-compare-results.ll
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-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE42
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512DQ
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW
9
10 ;
11 ; 128-bit vector comparisons
12 ;
13
14 define <2 x i1> @test_cmp_v2f64(<2 x double> %a0, <2 x double> %a1) nounwind {
15 ; SSE-LABEL: test_cmp_v2f64:
16 ; SSE:       # %bb.0:
17 ; SSE-NEXT:    cmpltpd %xmm0, %xmm1
18 ; SSE-NEXT:    movapd %xmm1, %xmm0
19 ; SSE-NEXT:    retq
20 ;
21 ; AVX-LABEL: test_cmp_v2f64:
22 ; AVX:       # %bb.0:
23 ; AVX-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm0
24 ; AVX-NEXT:    retq
25   %1 = fcmp ogt <2 x double> %a0, %a1
26   ret <2 x i1> %1
27 }
28
29 define <4 x i1> @test_cmp_v4f32(<4 x float> %a0, <4 x float> %a1) nounwind {
30 ; SSE-LABEL: test_cmp_v4f32:
31 ; SSE:       # %bb.0:
32 ; SSE-NEXT:    cmpltps %xmm0, %xmm1
33 ; SSE-NEXT:    movaps %xmm1, %xmm0
34 ; SSE-NEXT:    retq
35 ;
36 ; AVX-LABEL: test_cmp_v4f32:
37 ; AVX:       # %bb.0:
38 ; AVX-NEXT:    vcmpltps %xmm0, %xmm1, %xmm0
39 ; AVX-NEXT:    retq
40   %1 = fcmp ogt <4 x float> %a0, %a1
41   ret <4 x i1> %1
42 }
43
44 define <2 x i1> @test_cmp_v2i64(<2 x i64> %a0, <2 x i64> %a1) nounwind {
45 ; SSE2-LABEL: test_cmp_v2i64:
46 ; SSE2:       # %bb.0:
47 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
48 ; SSE2-NEXT:    pxor %xmm2, %xmm1
49 ; SSE2-NEXT:    pxor %xmm2, %xmm0
50 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
51 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
52 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
53 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
54 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
55 ; SSE2-NEXT:    pand %xmm3, %xmm1
56 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
57 ; SSE2-NEXT:    por %xmm1, %xmm0
58 ; SSE2-NEXT:    retq
59 ;
60 ; SSE42-LABEL: test_cmp_v2i64:
61 ; SSE42:       # %bb.0:
62 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
63 ; SSE42-NEXT:    retq
64 ;
65 ; AVX-LABEL: test_cmp_v2i64:
66 ; AVX:       # %bb.0:
67 ; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
68 ; AVX-NEXT:    retq
69   %1 = icmp sgt <2 x i64> %a0, %a1
70   ret <2 x i1> %1
71 }
72
73 define <4 x i1> @test_cmp_v4i32(<4 x i32> %a0, <4 x i32> %a1) nounwind {
74 ; SSE-LABEL: test_cmp_v4i32:
75 ; SSE:       # %bb.0:
76 ; SSE-NEXT:    pcmpgtd %xmm1, %xmm0
77 ; SSE-NEXT:    retq
78 ;
79 ; AVX-LABEL: test_cmp_v4i32:
80 ; AVX:       # %bb.0:
81 ; AVX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
82 ; AVX-NEXT:    retq
83   %1 = icmp sgt <4 x i32> %a0, %a1
84   ret <4 x i1> %1
85 }
86
87 define <8 x i1> @test_cmp_v8i16(<8 x i16> %a0, <8 x i16> %a1) nounwind {
88 ; SSE-LABEL: test_cmp_v8i16:
89 ; SSE:       # %bb.0:
90 ; SSE-NEXT:    pcmpgtw %xmm1, %xmm0
91 ; SSE-NEXT:    retq
92 ;
93 ; AVX-LABEL: test_cmp_v8i16:
94 ; AVX:       # %bb.0:
95 ; AVX-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
96 ; AVX-NEXT:    retq
97   %1 = icmp sgt <8 x i16> %a0, %a1
98   ret <8 x i1> %1
99 }
100
101 define <16 x i1> @test_cmp_v16i8(<16 x i8> %a0, <16 x i8> %a1) nounwind {
102 ; SSE-LABEL: test_cmp_v16i8:
103 ; SSE:       # %bb.0:
104 ; SSE-NEXT:    pcmpgtb %xmm1, %xmm0
105 ; SSE-NEXT:    retq
106 ;
107 ; AVX-LABEL: test_cmp_v16i8:
108 ; AVX:       # %bb.0:
109 ; AVX-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
110 ; AVX-NEXT:    retq
111   %1 = icmp sgt <16 x i8> %a0, %a1
112   ret <16 x i1> %1
113 }
114
115 ;
116 ; 256-bit vector comparisons
117 ;
118
119 define <4 x i1> @test_cmp_v4f64(<4 x double> %a0, <4 x double> %a1) nounwind {
120 ; SSE-LABEL: test_cmp_v4f64:
121 ; SSE:       # %bb.0:
122 ; SSE-NEXT:    cmpltpd %xmm1, %xmm3
123 ; SSE-NEXT:    cmpltpd %xmm0, %xmm2
124 ; SSE-NEXT:    packssdw %xmm3, %xmm2
125 ; SSE-NEXT:    movdqa %xmm2, %xmm0
126 ; SSE-NEXT:    retq
127 ;
128 ; AVX1-LABEL: test_cmp_v4f64:
129 ; AVX1:       # %bb.0:
130 ; AVX1-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
131 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
132 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
133 ; AVX1-NEXT:    vzeroupper
134 ; AVX1-NEXT:    retq
135 ;
136 ; AVX2-LABEL: test_cmp_v4f64:
137 ; AVX2:       # %bb.0:
138 ; AVX2-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
139 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1
140 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
141 ; AVX2-NEXT:    vzeroupper
142 ; AVX2-NEXT:    retq
143 ;
144 ; AVX512-LABEL: test_cmp_v4f64:
145 ; AVX512:       # %bb.0:
146 ; AVX512-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
147 ; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
148 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
149 ; AVX512-NEXT:    vzeroupper
150 ; AVX512-NEXT:    retq
151   %1 = fcmp ogt <4 x double> %a0, %a1
152   ret <4 x i1> %1
153 }
154
155 define <8 x i1> @test_cmp_v8f32(<8 x float> %a0, <8 x float> %a1) nounwind {
156 ; SSE-LABEL: test_cmp_v8f32:
157 ; SSE:       # %bb.0:
158 ; SSE-NEXT:    cmpltps %xmm1, %xmm3
159 ; SSE-NEXT:    cmpltps %xmm0, %xmm2
160 ; SSE-NEXT:    packssdw %xmm3, %xmm2
161 ; SSE-NEXT:    movdqa %xmm2, %xmm0
162 ; SSE-NEXT:    retq
163 ;
164 ; AVX1-LABEL: test_cmp_v8f32:
165 ; AVX1:       # %bb.0:
166 ; AVX1-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
167 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
168 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
169 ; AVX1-NEXT:    vzeroupper
170 ; AVX1-NEXT:    retq
171 ;
172 ; AVX2-LABEL: test_cmp_v8f32:
173 ; AVX2:       # %bb.0:
174 ; AVX2-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
175 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1
176 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
177 ; AVX2-NEXT:    vzeroupper
178 ; AVX2-NEXT:    retq
179 ;
180 ; AVX512-LABEL: test_cmp_v8f32:
181 ; AVX512:       # %bb.0:
182 ; AVX512-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
183 ; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
184 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
185 ; AVX512-NEXT:    vzeroupper
186 ; AVX512-NEXT:    retq
187   %1 = fcmp ogt <8 x float> %a0, %a1
188   ret <8 x i1> %1
189 }
190
191 define <4 x i1> @test_cmp_v4i64(<4 x i64> %a0, <4 x i64> %a1) nounwind {
192 ; SSE2-LABEL: test_cmp_v4i64:
193 ; SSE2:       # %bb.0:
194 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
195 ; SSE2-NEXT:    pxor %xmm4, %xmm3
196 ; SSE2-NEXT:    pxor %xmm4, %xmm1
197 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
198 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
199 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
200 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm1
201 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
202 ; SSE2-NEXT:    pand %xmm6, %xmm1
203 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
204 ; SSE2-NEXT:    por %xmm1, %xmm3
205 ; SSE2-NEXT:    pxor %xmm4, %xmm2
206 ; SSE2-NEXT:    pxor %xmm4, %xmm0
207 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
208 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
209 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2]
210 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm0
211 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
212 ; SSE2-NEXT:    pand %xmm4, %xmm2
213 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
214 ; SSE2-NEXT:    por %xmm2, %xmm0
215 ; SSE2-NEXT:    packssdw %xmm3, %xmm0
216 ; SSE2-NEXT:    retq
217 ;
218 ; SSE42-LABEL: test_cmp_v4i64:
219 ; SSE42:       # %bb.0:
220 ; SSE42-NEXT:    pcmpgtq %xmm3, %xmm1
221 ; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0
222 ; SSE42-NEXT:    packssdw %xmm1, %xmm0
223 ; SSE42-NEXT:    retq
224 ;
225 ; AVX1-LABEL: test_cmp_v4i64:
226 ; AVX1:       # %bb.0:
227 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
228 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
229 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
230 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
231 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
232 ; AVX1-NEXT:    vzeroupper
233 ; AVX1-NEXT:    retq
234 ;
235 ; AVX2-LABEL: test_cmp_v4i64:
236 ; AVX2:       # %bb.0:
237 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
238 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
239 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
240 ; AVX2-NEXT:    vzeroupper
241 ; AVX2-NEXT:    retq
242 ;
243 ; AVX512-LABEL: test_cmp_v4i64:
244 ; AVX512:       # %bb.0:
245 ; AVX512-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
246 ; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
247 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
248 ; AVX512-NEXT:    vzeroupper
249 ; AVX512-NEXT:    retq
250   %1 = icmp sgt <4 x i64> %a0, %a1
251   ret <4 x i1> %1
252 }
253
254 define <8 x i1> @test_cmp_v8i32(<8 x i32> %a0, <8 x i32> %a1) nounwind {
255 ; SSE-LABEL: test_cmp_v8i32:
256 ; SSE:       # %bb.0:
257 ; SSE-NEXT:    pcmpgtd %xmm3, %xmm1
258 ; SSE-NEXT:    pcmpgtd %xmm2, %xmm0
259 ; SSE-NEXT:    packssdw %xmm1, %xmm0
260 ; SSE-NEXT:    retq
261 ;
262 ; AVX1-LABEL: test_cmp_v8i32:
263 ; AVX1:       # %bb.0:
264 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
265 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
266 ; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm3, %xmm2
267 ; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
268 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
269 ; AVX1-NEXT:    vzeroupper
270 ; AVX1-NEXT:    retq
271 ;
272 ; AVX2-LABEL: test_cmp_v8i32:
273 ; AVX2:       # %bb.0:
274 ; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
275 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
276 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
277 ; AVX2-NEXT:    vzeroupper
278 ; AVX2-NEXT:    retq
279 ;
280 ; AVX512-LABEL: test_cmp_v8i32:
281 ; AVX512:       # %bb.0:
282 ; AVX512-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
283 ; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
284 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
285 ; AVX512-NEXT:    vzeroupper
286 ; AVX512-NEXT:    retq
287   %1 = icmp sgt <8 x i32> %a0, %a1
288   ret <8 x i1> %1
289 }
290
291 define <16 x i1> @test_cmp_v16i16(<16 x i16> %a0, <16 x i16> %a1) nounwind {
292 ; SSE-LABEL: test_cmp_v16i16:
293 ; SSE:       # %bb.0:
294 ; SSE-NEXT:    pcmpgtw %xmm3, %xmm1
295 ; SSE-NEXT:    pcmpgtw %xmm2, %xmm0
296 ; SSE-NEXT:    packsswb %xmm1, %xmm0
297 ; SSE-NEXT:    retq
298 ;
299 ; AVX1-LABEL: test_cmp_v16i16:
300 ; AVX1:       # %bb.0:
301 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
302 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
303 ; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm3, %xmm2
304 ; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
305 ; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
306 ; AVX1-NEXT:    vzeroupper
307 ; AVX1-NEXT:    retq
308 ;
309 ; AVX2-LABEL: test_cmp_v16i16:
310 ; AVX2:       # %bb.0:
311 ; AVX2-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
312 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
313 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
314 ; AVX2-NEXT:    vzeroupper
315 ; AVX2-NEXT:    retq
316 ;
317 ; AVX512F-LABEL: test_cmp_v16i16:
318 ; AVX512F:       # %bb.0:
319 ; AVX512F-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
320 ; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
321 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
322 ; AVX512F-NEXT:    vzeroupper
323 ; AVX512F-NEXT:    retq
324 ;
325 ; AVX512DQ-LABEL: test_cmp_v16i16:
326 ; AVX512DQ:       # %bb.0:
327 ; AVX512DQ-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
328 ; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm0
329 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
330 ; AVX512DQ-NEXT:    vzeroupper
331 ; AVX512DQ-NEXT:    retq
332 ;
333 ; AVX512BW-LABEL: test_cmp_v16i16:
334 ; AVX512BW:       # %bb.0:
335 ; AVX512BW-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
336 ; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
337 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
338 ; AVX512BW-NEXT:    vzeroupper
339 ; AVX512BW-NEXT:    retq
340   %1 = icmp sgt <16 x i16> %a0, %a1
341   ret <16 x i1> %1
342 }
343
344 define <32 x i1> @test_cmp_v32i8(<32 x i8> %a0, <32 x i8> %a1) nounwind {
345 ; SSE2-LABEL: test_cmp_v32i8:
346 ; SSE2:       # %bb.0:
347 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm0
348 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm1
349 ; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
350 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
351 ; SSE2-NEXT:    andl $1, %eax
352 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
353 ; SSE2-NEXT:    andl $1, %ecx
354 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
355 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
356 ; SSE2-NEXT:    andl $1, %ecx
357 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
358 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
359 ; SSE2-NEXT:    andl $1, %ecx
360 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
361 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
362 ; SSE2-NEXT:    andl $1, %ecx
363 ; SSE2-NEXT:    shll $4, %ecx
364 ; SSE2-NEXT:    orl %eax, %ecx
365 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
366 ; SSE2-NEXT:    andl $1, %eax
367 ; SSE2-NEXT:    shll $5, %eax
368 ; SSE2-NEXT:    orl %ecx, %eax
369 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
370 ; SSE2-NEXT:    andl $1, %ecx
371 ; SSE2-NEXT:    shll $6, %ecx
372 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
373 ; SSE2-NEXT:    andl $1, %edx
374 ; SSE2-NEXT:    shll $7, %edx
375 ; SSE2-NEXT:    orl %ecx, %edx
376 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
377 ; SSE2-NEXT:    andl $1, %ecx
378 ; SSE2-NEXT:    shll $8, %ecx
379 ; SSE2-NEXT:    orl %edx, %ecx
380 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
381 ; SSE2-NEXT:    andl $1, %edx
382 ; SSE2-NEXT:    shll $9, %edx
383 ; SSE2-NEXT:    orl %ecx, %edx
384 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
385 ; SSE2-NEXT:    andl $1, %ecx
386 ; SSE2-NEXT:    shll $10, %ecx
387 ; SSE2-NEXT:    orl %edx, %ecx
388 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
389 ; SSE2-NEXT:    andl $1, %edx
390 ; SSE2-NEXT:    shll $11, %edx
391 ; SSE2-NEXT:    orl %ecx, %edx
392 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
393 ; SSE2-NEXT:    andl $1, %ecx
394 ; SSE2-NEXT:    shll $12, %ecx
395 ; SSE2-NEXT:    orl %edx, %ecx
396 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
397 ; SSE2-NEXT:    andl $1, %edx
398 ; SSE2-NEXT:    shll $13, %edx
399 ; SSE2-NEXT:    orl %ecx, %edx
400 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
401 ; SSE2-NEXT:    andl $1, %ecx
402 ; SSE2-NEXT:    shll $14, %ecx
403 ; SSE2-NEXT:    orl %edx, %ecx
404 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
405 ; SSE2-NEXT:    shll $15, %edx
406 ; SSE2-NEXT:    orl %ecx, %edx
407 ; SSE2-NEXT:    orl %eax, %edx
408 ; SSE2-NEXT:    movw %dx, 2(%rdi)
409 ; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
410 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
411 ; SSE2-NEXT:    andl $1, %eax
412 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
413 ; SSE2-NEXT:    andl $1, %ecx
414 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
415 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
416 ; SSE2-NEXT:    andl $1, %ecx
417 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
418 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
419 ; SSE2-NEXT:    andl $1, %ecx
420 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
421 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
422 ; SSE2-NEXT:    andl $1, %ecx
423 ; SSE2-NEXT:    shll $4, %ecx
424 ; SSE2-NEXT:    orl %eax, %ecx
425 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
426 ; SSE2-NEXT:    andl $1, %eax
427 ; SSE2-NEXT:    shll $5, %eax
428 ; SSE2-NEXT:    orl %ecx, %eax
429 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
430 ; SSE2-NEXT:    andl $1, %ecx
431 ; SSE2-NEXT:    shll $6, %ecx
432 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
433 ; SSE2-NEXT:    andl $1, %edx
434 ; SSE2-NEXT:    shll $7, %edx
435 ; SSE2-NEXT:    orl %ecx, %edx
436 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
437 ; SSE2-NEXT:    andl $1, %ecx
438 ; SSE2-NEXT:    shll $8, %ecx
439 ; SSE2-NEXT:    orl %edx, %ecx
440 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
441 ; SSE2-NEXT:    andl $1, %edx
442 ; SSE2-NEXT:    shll $9, %edx
443 ; SSE2-NEXT:    orl %ecx, %edx
444 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
445 ; SSE2-NEXT:    andl $1, %ecx
446 ; SSE2-NEXT:    shll $10, %ecx
447 ; SSE2-NEXT:    orl %edx, %ecx
448 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
449 ; SSE2-NEXT:    andl $1, %edx
450 ; SSE2-NEXT:    shll $11, %edx
451 ; SSE2-NEXT:    orl %ecx, %edx
452 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
453 ; SSE2-NEXT:    andl $1, %ecx
454 ; SSE2-NEXT:    shll $12, %ecx
455 ; SSE2-NEXT:    orl %edx, %ecx
456 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
457 ; SSE2-NEXT:    andl $1, %edx
458 ; SSE2-NEXT:    shll $13, %edx
459 ; SSE2-NEXT:    orl %ecx, %edx
460 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
461 ; SSE2-NEXT:    andl $1, %ecx
462 ; SSE2-NEXT:    shll $14, %ecx
463 ; SSE2-NEXT:    orl %edx, %ecx
464 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
465 ; SSE2-NEXT:    shll $15, %edx
466 ; SSE2-NEXT:    orl %ecx, %edx
467 ; SSE2-NEXT:    orl %eax, %edx
468 ; SSE2-NEXT:    movw %dx, (%rdi)
469 ; SSE2-NEXT:    movq %rdi, %rax
470 ; SSE2-NEXT:    retq
471 ;
472 ; SSE42-LABEL: test_cmp_v32i8:
473 ; SSE42:       # %bb.0:
474 ; SSE42-NEXT:    pcmpgtb %xmm2, %xmm0
475 ; SSE42-NEXT:    pcmpgtb %xmm3, %xmm1
476 ; SSE42-NEXT:    pextrb $1, %xmm1, %eax
477 ; SSE42-NEXT:    andl $1, %eax
478 ; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
479 ; SSE42-NEXT:    andl $1, %ecx
480 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
481 ; SSE42-NEXT:    pextrb $2, %xmm1, %ecx
482 ; SSE42-NEXT:    andl $1, %ecx
483 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
484 ; SSE42-NEXT:    pextrb $3, %xmm1, %ecx
485 ; SSE42-NEXT:    andl $1, %ecx
486 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
487 ; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
488 ; SSE42-NEXT:    andl $1, %ecx
489 ; SSE42-NEXT:    shll $4, %ecx
490 ; SSE42-NEXT:    orl %eax, %ecx
491 ; SSE42-NEXT:    pextrb $5, %xmm1, %eax
492 ; SSE42-NEXT:    andl $1, %eax
493 ; SSE42-NEXT:    shll $5, %eax
494 ; SSE42-NEXT:    orl %ecx, %eax
495 ; SSE42-NEXT:    pextrb $6, %xmm1, %ecx
496 ; SSE42-NEXT:    andl $1, %ecx
497 ; SSE42-NEXT:    shll $6, %ecx
498 ; SSE42-NEXT:    pextrb $7, %xmm1, %edx
499 ; SSE42-NEXT:    andl $1, %edx
500 ; SSE42-NEXT:    shll $7, %edx
501 ; SSE42-NEXT:    orl %ecx, %edx
502 ; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
503 ; SSE42-NEXT:    andl $1, %ecx
504 ; SSE42-NEXT:    shll $8, %ecx
505 ; SSE42-NEXT:    orl %edx, %ecx
506 ; SSE42-NEXT:    pextrb $9, %xmm1, %edx
507 ; SSE42-NEXT:    andl $1, %edx
508 ; SSE42-NEXT:    shll $9, %edx
509 ; SSE42-NEXT:    orl %ecx, %edx
510 ; SSE42-NEXT:    pextrb $10, %xmm1, %ecx
511 ; SSE42-NEXT:    andl $1, %ecx
512 ; SSE42-NEXT:    shll $10, %ecx
513 ; SSE42-NEXT:    orl %edx, %ecx
514 ; SSE42-NEXT:    pextrb $11, %xmm1, %edx
515 ; SSE42-NEXT:    andl $1, %edx
516 ; SSE42-NEXT:    shll $11, %edx
517 ; SSE42-NEXT:    orl %ecx, %edx
518 ; SSE42-NEXT:    pextrb $12, %xmm1, %ecx
519 ; SSE42-NEXT:    andl $1, %ecx
520 ; SSE42-NEXT:    shll $12, %ecx
521 ; SSE42-NEXT:    orl %edx, %ecx
522 ; SSE42-NEXT:    pextrb $13, %xmm1, %edx
523 ; SSE42-NEXT:    andl $1, %edx
524 ; SSE42-NEXT:    shll $13, %edx
525 ; SSE42-NEXT:    orl %ecx, %edx
526 ; SSE42-NEXT:    pextrb $14, %xmm1, %ecx
527 ; SSE42-NEXT:    andl $1, %ecx
528 ; SSE42-NEXT:    shll $14, %ecx
529 ; SSE42-NEXT:    orl %edx, %ecx
530 ; SSE42-NEXT:    pextrb $15, %xmm1, %edx
531 ; SSE42-NEXT:    shll $15, %edx
532 ; SSE42-NEXT:    orl %ecx, %edx
533 ; SSE42-NEXT:    orl %eax, %edx
534 ; SSE42-NEXT:    movw %dx, 2(%rdi)
535 ; SSE42-NEXT:    pextrb $1, %xmm0, %eax
536 ; SSE42-NEXT:    andl $1, %eax
537 ; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
538 ; SSE42-NEXT:    andl $1, %ecx
539 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
540 ; SSE42-NEXT:    pextrb $2, %xmm0, %ecx
541 ; SSE42-NEXT:    andl $1, %ecx
542 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
543 ; SSE42-NEXT:    pextrb $3, %xmm0, %ecx
544 ; SSE42-NEXT:    andl $1, %ecx
545 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
546 ; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
547 ; SSE42-NEXT:    andl $1, %ecx
548 ; SSE42-NEXT:    shll $4, %ecx
549 ; SSE42-NEXT:    orl %eax, %ecx
550 ; SSE42-NEXT:    pextrb $5, %xmm0, %eax
551 ; SSE42-NEXT:    andl $1, %eax
552 ; SSE42-NEXT:    shll $5, %eax
553 ; SSE42-NEXT:    orl %ecx, %eax
554 ; SSE42-NEXT:    pextrb $6, %xmm0, %ecx
555 ; SSE42-NEXT:    andl $1, %ecx
556 ; SSE42-NEXT:    shll $6, %ecx
557 ; SSE42-NEXT:    pextrb $7, %xmm0, %edx
558 ; SSE42-NEXT:    andl $1, %edx
559 ; SSE42-NEXT:    shll $7, %edx
560 ; SSE42-NEXT:    orl %ecx, %edx
561 ; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
562 ; SSE42-NEXT:    andl $1, %ecx
563 ; SSE42-NEXT:    shll $8, %ecx
564 ; SSE42-NEXT:    orl %edx, %ecx
565 ; SSE42-NEXT:    pextrb $9, %xmm0, %edx
566 ; SSE42-NEXT:    andl $1, %edx
567 ; SSE42-NEXT:    shll $9, %edx
568 ; SSE42-NEXT:    orl %ecx, %edx
569 ; SSE42-NEXT:    pextrb $10, %xmm0, %ecx
570 ; SSE42-NEXT:    andl $1, %ecx
571 ; SSE42-NEXT:    shll $10, %ecx
572 ; SSE42-NEXT:    orl %edx, %ecx
573 ; SSE42-NEXT:    pextrb $11, %xmm0, %edx
574 ; SSE42-NEXT:    andl $1, %edx
575 ; SSE42-NEXT:    shll $11, %edx
576 ; SSE42-NEXT:    orl %ecx, %edx
577 ; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
578 ; SSE42-NEXT:    andl $1, %ecx
579 ; SSE42-NEXT:    shll $12, %ecx
580 ; SSE42-NEXT:    orl %edx, %ecx
581 ; SSE42-NEXT:    pextrb $13, %xmm0, %edx
582 ; SSE42-NEXT:    andl $1, %edx
583 ; SSE42-NEXT:    shll $13, %edx
584 ; SSE42-NEXT:    orl %ecx, %edx
585 ; SSE42-NEXT:    pextrb $14, %xmm0, %ecx
586 ; SSE42-NEXT:    andl $1, %ecx
587 ; SSE42-NEXT:    shll $14, %ecx
588 ; SSE42-NEXT:    orl %edx, %ecx
589 ; SSE42-NEXT:    pextrb $15, %xmm0, %edx
590 ; SSE42-NEXT:    shll $15, %edx
591 ; SSE42-NEXT:    orl %ecx, %edx
592 ; SSE42-NEXT:    orl %eax, %edx
593 ; SSE42-NEXT:    movw %dx, (%rdi)
594 ; SSE42-NEXT:    movq %rdi, %rax
595 ; SSE42-NEXT:    retq
596 ;
597 ; AVX1-LABEL: test_cmp_v32i8:
598 ; AVX1:       # %bb.0:
599 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
600 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
601 ; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm3, %xmm2
602 ; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
603 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
604 ; AVX1-NEXT:    retq
605 ;
606 ; AVX2-LABEL: test_cmp_v32i8:
607 ; AVX2:       # %bb.0:
608 ; AVX2-NEXT:    vpcmpgtb %ymm1, %ymm0, %ymm0
609 ; AVX2-NEXT:    retq
610 ;
611 ; AVX512-LABEL: test_cmp_v32i8:
612 ; AVX512:       # %bb.0:
613 ; AVX512-NEXT:    vpcmpgtb %ymm1, %ymm0, %ymm0
614 ; AVX512-NEXT:    retq
615   %1 = icmp sgt <32 x i8> %a0, %a1
616   ret <32 x i1> %1
617 }
618
619 ;
620 ; 512-bit vector comparisons
621 ;
622
623 define <8 x i1> @test_cmp_v8f64(<8 x double> %a0, <8 x double> %a1) nounwind {
624 ; SSE-LABEL: test_cmp_v8f64:
625 ; SSE:       # %bb.0:
626 ; SSE-NEXT:    cmpltpd %xmm3, %xmm7
627 ; SSE-NEXT:    cmpltpd %xmm2, %xmm6
628 ; SSE-NEXT:    packssdw %xmm7, %xmm6
629 ; SSE-NEXT:    cmpltpd %xmm1, %xmm5
630 ; SSE-NEXT:    cmpltpd %xmm0, %xmm4
631 ; SSE-NEXT:    packssdw %xmm5, %xmm4
632 ; SSE-NEXT:    packssdw %xmm6, %xmm4
633 ; SSE-NEXT:    movdqa %xmm4, %xmm0
634 ; SSE-NEXT:    retq
635 ;
636 ; AVX1-LABEL: test_cmp_v8f64:
637 ; AVX1:       # %bb.0:
638 ; AVX1-NEXT:    vcmpltpd %ymm1, %ymm3, %ymm1
639 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
640 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
641 ; AVX1-NEXT:    vcmpltpd %ymm0, %ymm2, %ymm0
642 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
643 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
644 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
645 ; AVX1-NEXT:    vzeroupper
646 ; AVX1-NEXT:    retq
647 ;
648 ; AVX2-LABEL: test_cmp_v8f64:
649 ; AVX2:       # %bb.0:
650 ; AVX2-NEXT:    vcmpltpd %ymm1, %ymm3, %ymm1
651 ; AVX2-NEXT:    vcmpltpd %ymm0, %ymm2, %ymm0
652 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
653 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
654 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
655 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
656 ; AVX2-NEXT:    vzeroupper
657 ; AVX2-NEXT:    retq
658 ;
659 ; AVX512F-LABEL: test_cmp_v8f64:
660 ; AVX512F:       # %bb.0:
661 ; AVX512F-NEXT:    vcmpltpd %zmm0, %zmm1, %k1
662 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
663 ; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
664 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
665 ; AVX512F-NEXT:    vzeroupper
666 ; AVX512F-NEXT:    retq
667 ;
668 ; AVX512DQ-LABEL: test_cmp_v8f64:
669 ; AVX512DQ:       # %bb.0:
670 ; AVX512DQ-NEXT:    vcmpltpd %zmm0, %zmm1, %k0
671 ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0
672 ; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm0
673 ; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
674 ; AVX512DQ-NEXT:    vzeroupper
675 ; AVX512DQ-NEXT:    retq
676 ;
677 ; AVX512BW-LABEL: test_cmp_v8f64:
678 ; AVX512BW:       # %bb.0:
679 ; AVX512BW-NEXT:    vcmpltpd %zmm0, %zmm1, %k0
680 ; AVX512BW-NEXT:    vpmovm2w %k0, %zmm0
681 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
682 ; AVX512BW-NEXT:    vzeroupper
683 ; AVX512BW-NEXT:    retq
684   %1 = fcmp ogt <8 x double> %a0, %a1
685   ret <8 x i1> %1
686 }
687
688 define <16 x i1> @test_cmp_v16f32(<16 x float> %a0, <16 x float> %a1) nounwind {
689 ; SSE-LABEL: test_cmp_v16f32:
690 ; SSE:       # %bb.0:
691 ; SSE-NEXT:    cmpltps %xmm3, %xmm7
692 ; SSE-NEXT:    cmpltps %xmm2, %xmm6
693 ; SSE-NEXT:    packssdw %xmm7, %xmm6
694 ; SSE-NEXT:    cmpltps %xmm1, %xmm5
695 ; SSE-NEXT:    cmpltps %xmm0, %xmm4
696 ; SSE-NEXT:    packssdw %xmm5, %xmm4
697 ; SSE-NEXT:    packsswb %xmm6, %xmm4
698 ; SSE-NEXT:    movdqa %xmm4, %xmm0
699 ; SSE-NEXT:    retq
700 ;
701 ; AVX1-LABEL: test_cmp_v16f32:
702 ; AVX1:       # %bb.0:
703 ; AVX1-NEXT:    vcmpltps %ymm1, %ymm3, %ymm1
704 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
705 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
706 ; AVX1-NEXT:    vcmpltps %ymm0, %ymm2, %ymm0
707 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
708 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
709 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
710 ; AVX1-NEXT:    vzeroupper
711 ; AVX1-NEXT:    retq
712 ;
713 ; AVX2-LABEL: test_cmp_v16f32:
714 ; AVX2:       # %bb.0:
715 ; AVX2-NEXT:    vcmpltps %ymm1, %ymm3, %ymm1
716 ; AVX2-NEXT:    vcmpltps %ymm0, %ymm2, %ymm0
717 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
718 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
719 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
720 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
721 ; AVX2-NEXT:    vzeroupper
722 ; AVX2-NEXT:    retq
723 ;
724 ; AVX512F-LABEL: test_cmp_v16f32:
725 ; AVX512F:       # %bb.0:
726 ; AVX512F-NEXT:    vcmpltps %zmm0, %zmm1, %k1
727 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
728 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
729 ; AVX512F-NEXT:    vzeroupper
730 ; AVX512F-NEXT:    retq
731 ;
732 ; AVX512DQ-LABEL: test_cmp_v16f32:
733 ; AVX512DQ:       # %bb.0:
734 ; AVX512DQ-NEXT:    vcmpltps %zmm0, %zmm1, %k0
735 ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0
736 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
737 ; AVX512DQ-NEXT:    vzeroupper
738 ; AVX512DQ-NEXT:    retq
739 ;
740 ; AVX512BW-LABEL: test_cmp_v16f32:
741 ; AVX512BW:       # %bb.0:
742 ; AVX512BW-NEXT:    vcmpltps %zmm0, %zmm1, %k0
743 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
744 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
745 ; AVX512BW-NEXT:    vzeroupper
746 ; AVX512BW-NEXT:    retq
747   %1 = fcmp ogt <16 x float> %a0, %a1
748   ret <16 x i1> %1
749 }
750
751 define <8 x i1> @test_cmp_v8i64(<8 x i64> %a0, <8 x i64> %a1) nounwind {
752 ; SSE2-LABEL: test_cmp_v8i64:
753 ; SSE2:       # %bb.0:
754 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
755 ; SSE2-NEXT:    pxor %xmm8, %xmm7
756 ; SSE2-NEXT:    pxor %xmm8, %xmm3
757 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
758 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm9
759 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
760 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm3
761 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
762 ; SSE2-NEXT:    pand %xmm10, %xmm3
763 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
764 ; SSE2-NEXT:    por %xmm3, %xmm7
765 ; SSE2-NEXT:    pxor %xmm8, %xmm6
766 ; SSE2-NEXT:    pxor %xmm8, %xmm2
767 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
768 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm3
769 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm3[0,0,2,2]
770 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm2
771 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]
772 ; SSE2-NEXT:    pand %xmm9, %xmm6
773 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
774 ; SSE2-NEXT:    por %xmm6, %xmm2
775 ; SSE2-NEXT:    packssdw %xmm7, %xmm2
776 ; SSE2-NEXT:    pxor %xmm8, %xmm5
777 ; SSE2-NEXT:    pxor %xmm8, %xmm1
778 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
779 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm3
780 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
781 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm1
782 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
783 ; SSE2-NEXT:    pand %xmm6, %xmm1
784 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
785 ; SSE2-NEXT:    por %xmm1, %xmm3
786 ; SSE2-NEXT:    pxor %xmm8, %xmm4
787 ; SSE2-NEXT:    pxor %xmm8, %xmm0
788 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
789 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
790 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
791 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
792 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
793 ; SSE2-NEXT:    pand %xmm5, %xmm4
794 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
795 ; SSE2-NEXT:    por %xmm4, %xmm0
796 ; SSE2-NEXT:    packssdw %xmm3, %xmm0
797 ; SSE2-NEXT:    packssdw %xmm2, %xmm0
798 ; SSE2-NEXT:    retq
799 ;
800 ; SSE42-LABEL: test_cmp_v8i64:
801 ; SSE42:       # %bb.0:
802 ; SSE42-NEXT:    pcmpgtq %xmm7, %xmm3
803 ; SSE42-NEXT:    pcmpgtq %xmm6, %xmm2
804 ; SSE42-NEXT:    packssdw %xmm3, %xmm2
805 ; SSE42-NEXT:    pcmpgtq %xmm5, %xmm1
806 ; SSE42-NEXT:    pcmpgtq %xmm4, %xmm0
807 ; SSE42-NEXT:    packssdw %xmm1, %xmm0
808 ; SSE42-NEXT:    packssdw %xmm2, %xmm0
809 ; SSE42-NEXT:    retq
810 ;
811 ; AVX1-LABEL: test_cmp_v8i64:
812 ; AVX1:       # %bb.0:
813 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
814 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
815 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
816 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm1
817 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm1, %xmm1
818 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
819 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
820 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
821 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm0
822 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
823 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
824 ; AVX1-NEXT:    vzeroupper
825 ; AVX1-NEXT:    retq
826 ;
827 ; AVX2-LABEL: test_cmp_v8i64:
828 ; AVX2:       # %bb.0:
829 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm1
830 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm0
831 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
832 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
833 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
834 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
835 ; AVX2-NEXT:    vzeroupper
836 ; AVX2-NEXT:    retq
837 ;
838 ; AVX512F-LABEL: test_cmp_v8i64:
839 ; AVX512F:       # %bb.0:
840 ; AVX512F-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1
841 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
842 ; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
843 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
844 ; AVX512F-NEXT:    vzeroupper
845 ; AVX512F-NEXT:    retq
846 ;
847 ; AVX512DQ-LABEL: test_cmp_v8i64:
848 ; AVX512DQ:       # %bb.0:
849 ; AVX512DQ-NEXT:    vpcmpgtq %zmm1, %zmm0, %k0
850 ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0
851 ; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm0
852 ; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
853 ; AVX512DQ-NEXT:    vzeroupper
854 ; AVX512DQ-NEXT:    retq
855 ;
856 ; AVX512BW-LABEL: test_cmp_v8i64:
857 ; AVX512BW:       # %bb.0:
858 ; AVX512BW-NEXT:    vpcmpgtq %zmm1, %zmm0, %k0
859 ; AVX512BW-NEXT:    vpmovm2w %k0, %zmm0
860 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
861 ; AVX512BW-NEXT:    vzeroupper
862 ; AVX512BW-NEXT:    retq
863   %1 = icmp sgt <8 x i64> %a0, %a1
864   ret <8 x i1> %1
865 }
866
867 define <16 x i1> @test_cmp_v16i32(<16 x i32> %a0, <16 x i32> %a1) nounwind {
868 ; SSE-LABEL: test_cmp_v16i32:
869 ; SSE:       # %bb.0:
870 ; SSE-NEXT:    pcmpgtd %xmm7, %xmm3
871 ; SSE-NEXT:    pcmpgtd %xmm6, %xmm2
872 ; SSE-NEXT:    packssdw %xmm3, %xmm2
873 ; SSE-NEXT:    pcmpgtd %xmm5, %xmm1
874 ; SSE-NEXT:    pcmpgtd %xmm4, %xmm0
875 ; SSE-NEXT:    packssdw %xmm1, %xmm0
876 ; SSE-NEXT:    packsswb %xmm2, %xmm0
877 ; SSE-NEXT:    retq
878 ;
879 ; AVX1-LABEL: test_cmp_v16i32:
880 ; AVX1:       # %bb.0:
881 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
882 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
883 ; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm5, %xmm4
884 ; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm1, %xmm1
885 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm1, %xmm1
886 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
887 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
888 ; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm4, %xmm3
889 ; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0
890 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
891 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
892 ; AVX1-NEXT:    vzeroupper
893 ; AVX1-NEXT:    retq
894 ;
895 ; AVX2-LABEL: test_cmp_v16i32:
896 ; AVX2:       # %bb.0:
897 ; AVX2-NEXT:    vpcmpgtd %ymm3, %ymm1, %ymm1
898 ; AVX2-NEXT:    vpcmpgtd %ymm2, %ymm0, %ymm0
899 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
900 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
901 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
902 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
903 ; AVX2-NEXT:    vzeroupper
904 ; AVX2-NEXT:    retq
905 ;
906 ; AVX512F-LABEL: test_cmp_v16i32:
907 ; AVX512F:       # %bb.0:
908 ; AVX512F-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1
909 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
910 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
911 ; AVX512F-NEXT:    vzeroupper
912 ; AVX512F-NEXT:    retq
913 ;
914 ; AVX512DQ-LABEL: test_cmp_v16i32:
915 ; AVX512DQ:       # %bb.0:
916 ; AVX512DQ-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0
917 ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0
918 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
919 ; AVX512DQ-NEXT:    vzeroupper
920 ; AVX512DQ-NEXT:    retq
921 ;
922 ; AVX512BW-LABEL: test_cmp_v16i32:
923 ; AVX512BW:       # %bb.0:
924 ; AVX512BW-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0
925 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
926 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
927 ; AVX512BW-NEXT:    vzeroupper
928 ; AVX512BW-NEXT:    retq
929   %1 = icmp sgt <16 x i32> %a0, %a1
930   ret <16 x i1> %1
931 }
932
933 define <32 x i1> @test_cmp_v32i16(<32 x i16> %a0, <32 x i16> %a1) nounwind {
934 ; SSE2-LABEL: test_cmp_v32i16:
935 ; SSE2:       # %bb.0:
936 ; SSE2-NEXT:    pcmpgtw %xmm5, %xmm1
937 ; SSE2-NEXT:    pcmpgtw %xmm4, %xmm0
938 ; SSE2-NEXT:    packsswb %xmm1, %xmm0
939 ; SSE2-NEXT:    pcmpgtw %xmm7, %xmm3
940 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm2
941 ; SSE2-NEXT:    packsswb %xmm3, %xmm2
942 ; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
943 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
944 ; SSE2-NEXT:    andl $1, %eax
945 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
946 ; SSE2-NEXT:    andl $1, %ecx
947 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
948 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
949 ; SSE2-NEXT:    andl $1, %ecx
950 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
951 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
952 ; SSE2-NEXT:    andl $1, %ecx
953 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
954 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
955 ; SSE2-NEXT:    andl $1, %ecx
956 ; SSE2-NEXT:    shll $4, %ecx
957 ; SSE2-NEXT:    orl %eax, %ecx
958 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
959 ; SSE2-NEXT:    andl $1, %eax
960 ; SSE2-NEXT:    shll $5, %eax
961 ; SSE2-NEXT:    orl %ecx, %eax
962 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
963 ; SSE2-NEXT:    andl $1, %ecx
964 ; SSE2-NEXT:    shll $6, %ecx
965 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
966 ; SSE2-NEXT:    andl $1, %edx
967 ; SSE2-NEXT:    shll $7, %edx
968 ; SSE2-NEXT:    orl %ecx, %edx
969 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
970 ; SSE2-NEXT:    andl $1, %ecx
971 ; SSE2-NEXT:    shll $8, %ecx
972 ; SSE2-NEXT:    orl %edx, %ecx
973 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
974 ; SSE2-NEXT:    andl $1, %edx
975 ; SSE2-NEXT:    shll $9, %edx
976 ; SSE2-NEXT:    orl %ecx, %edx
977 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
978 ; SSE2-NEXT:    andl $1, %ecx
979 ; SSE2-NEXT:    shll $10, %ecx
980 ; SSE2-NEXT:    orl %edx, %ecx
981 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
982 ; SSE2-NEXT:    andl $1, %edx
983 ; SSE2-NEXT:    shll $11, %edx
984 ; SSE2-NEXT:    orl %ecx, %edx
985 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
986 ; SSE2-NEXT:    andl $1, %ecx
987 ; SSE2-NEXT:    shll $12, %ecx
988 ; SSE2-NEXT:    orl %edx, %ecx
989 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
990 ; SSE2-NEXT:    andl $1, %edx
991 ; SSE2-NEXT:    shll $13, %edx
992 ; SSE2-NEXT:    orl %ecx, %edx
993 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
994 ; SSE2-NEXT:    andl $1, %ecx
995 ; SSE2-NEXT:    shll $14, %ecx
996 ; SSE2-NEXT:    orl %edx, %ecx
997 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
998 ; SSE2-NEXT:    shll $15, %edx
999 ; SSE2-NEXT:    orl %ecx, %edx
1000 ; SSE2-NEXT:    orl %eax, %edx
1001 ; SSE2-NEXT:    movw %dx, 2(%rdi)
1002 ; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
1003 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1004 ; SSE2-NEXT:    andl $1, %eax
1005 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1006 ; SSE2-NEXT:    andl $1, %ecx
1007 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
1008 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1009 ; SSE2-NEXT:    andl $1, %ecx
1010 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
1011 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1012 ; SSE2-NEXT:    andl $1, %ecx
1013 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
1014 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1015 ; SSE2-NEXT:    andl $1, %ecx
1016 ; SSE2-NEXT:    shll $4, %ecx
1017 ; SSE2-NEXT:    orl %eax, %ecx
1018 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1019 ; SSE2-NEXT:    andl $1, %eax
1020 ; SSE2-NEXT:    shll $5, %eax
1021 ; SSE2-NEXT:    orl %ecx, %eax
1022 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1023 ; SSE2-NEXT:    andl $1, %ecx
1024 ; SSE2-NEXT:    shll $6, %ecx
1025 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1026 ; SSE2-NEXT:    andl $1, %edx
1027 ; SSE2-NEXT:    shll $7, %edx
1028 ; SSE2-NEXT:    orl %ecx, %edx
1029 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1030 ; SSE2-NEXT:    andl $1, %ecx
1031 ; SSE2-NEXT:    shll $8, %ecx
1032 ; SSE2-NEXT:    orl %edx, %ecx
1033 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1034 ; SSE2-NEXT:    andl $1, %edx
1035 ; SSE2-NEXT:    shll $9, %edx
1036 ; SSE2-NEXT:    orl %ecx, %edx
1037 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1038 ; SSE2-NEXT:    andl $1, %ecx
1039 ; SSE2-NEXT:    shll $10, %ecx
1040 ; SSE2-NEXT:    orl %edx, %ecx
1041 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1042 ; SSE2-NEXT:    andl $1, %edx
1043 ; SSE2-NEXT:    shll $11, %edx
1044 ; SSE2-NEXT:    orl %ecx, %edx
1045 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1046 ; SSE2-NEXT:    andl $1, %ecx
1047 ; SSE2-NEXT:    shll $12, %ecx
1048 ; SSE2-NEXT:    orl %edx, %ecx
1049 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1050 ; SSE2-NEXT:    andl $1, %edx
1051 ; SSE2-NEXT:    shll $13, %edx
1052 ; SSE2-NEXT:    orl %ecx, %edx
1053 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1054 ; SSE2-NEXT:    andl $1, %ecx
1055 ; SSE2-NEXT:    shll $14, %ecx
1056 ; SSE2-NEXT:    orl %edx, %ecx
1057 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1058 ; SSE2-NEXT:    shll $15, %edx
1059 ; SSE2-NEXT:    orl %ecx, %edx
1060 ; SSE2-NEXT:    orl %eax, %edx
1061 ; SSE2-NEXT:    movw %dx, (%rdi)
1062 ; SSE2-NEXT:    movq %rdi, %rax
1063 ; SSE2-NEXT:    retq
1064 ;
1065 ; SSE42-LABEL: test_cmp_v32i16:
1066 ; SSE42:       # %bb.0:
1067 ; SSE42-NEXT:    pcmpgtw %xmm5, %xmm1
1068 ; SSE42-NEXT:    pcmpgtw %xmm4, %xmm0
1069 ; SSE42-NEXT:    pcmpgtw %xmm7, %xmm3
1070 ; SSE42-NEXT:    pcmpgtw %xmm6, %xmm2
1071 ; SSE42-NEXT:    pextrb $2, %xmm2, %eax
1072 ; SSE42-NEXT:    andl $1, %eax
1073 ; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
1074 ; SSE42-NEXT:    andl $1, %ecx
1075 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
1076 ; SSE42-NEXT:    pextrb $4, %xmm2, %ecx
1077 ; SSE42-NEXT:    andl $1, %ecx
1078 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
1079 ; SSE42-NEXT:    pextrb $6, %xmm2, %ecx
1080 ; SSE42-NEXT:    andl $1, %ecx
1081 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
1082 ; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
1083 ; SSE42-NEXT:    andl $1, %ecx
1084 ; SSE42-NEXT:    shll $4, %ecx
1085 ; SSE42-NEXT:    orl %eax, %ecx
1086 ; SSE42-NEXT:    pextrb $10, %xmm2, %eax
1087 ; SSE42-NEXT:    andl $1, %eax
1088 ; SSE42-NEXT:    shll $5, %eax
1089 ; SSE42-NEXT:    orl %ecx, %eax
1090 ; SSE42-NEXT:    pextrb $12, %xmm2, %ecx
1091 ; SSE42-NEXT:    andl $1, %ecx
1092 ; SSE42-NEXT:    shll $6, %ecx
1093 ; SSE42-NEXT:    pextrb $14, %xmm2, %edx
1094 ; SSE42-NEXT:    andl $1, %edx
1095 ; SSE42-NEXT:    shll $7, %edx
1096 ; SSE42-NEXT:    orl %ecx, %edx
1097 ; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
1098 ; SSE42-NEXT:    andl $1, %ecx
1099 ; SSE42-NEXT:    shll $8, %ecx
1100 ; SSE42-NEXT:    orl %edx, %ecx
1101 ; SSE42-NEXT:    pextrb $2, %xmm3, %edx
1102 ; SSE42-NEXT:    andl $1, %edx
1103 ; SSE42-NEXT:    shll $9, %edx
1104 ; SSE42-NEXT:    orl %ecx, %edx
1105 ; SSE42-NEXT:    pextrb $4, %xmm3, %ecx
1106 ; SSE42-NEXT:    andl $1, %ecx
1107 ; SSE42-NEXT:    shll $10, %ecx
1108 ; SSE42-NEXT:    orl %edx, %ecx
1109 ; SSE42-NEXT:    pextrb $6, %xmm3, %edx
1110 ; SSE42-NEXT:    andl $1, %edx
1111 ; SSE42-NEXT:    shll $11, %edx
1112 ; SSE42-NEXT:    orl %ecx, %edx
1113 ; SSE42-NEXT:    pextrb $8, %xmm3, %ecx
1114 ; SSE42-NEXT:    andl $1, %ecx
1115 ; SSE42-NEXT:    shll $12, %ecx
1116 ; SSE42-NEXT:    orl %edx, %ecx
1117 ; SSE42-NEXT:    pextrb $10, %xmm3, %edx
1118 ; SSE42-NEXT:    andl $1, %edx
1119 ; SSE42-NEXT:    shll $13, %edx
1120 ; SSE42-NEXT:    orl %ecx, %edx
1121 ; SSE42-NEXT:    pextrb $12, %xmm3, %ecx
1122 ; SSE42-NEXT:    andl $1, %ecx
1123 ; SSE42-NEXT:    shll $14, %ecx
1124 ; SSE42-NEXT:    orl %edx, %ecx
1125 ; SSE42-NEXT:    pextrb $14, %xmm3, %edx
1126 ; SSE42-NEXT:    shll $15, %edx
1127 ; SSE42-NEXT:    orl %ecx, %edx
1128 ; SSE42-NEXT:    orl %eax, %edx
1129 ; SSE42-NEXT:    movw %dx, 2(%rdi)
1130 ; SSE42-NEXT:    pextrb $2, %xmm0, %eax
1131 ; SSE42-NEXT:    andl $1, %eax
1132 ; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
1133 ; SSE42-NEXT:    andl $1, %ecx
1134 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
1135 ; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
1136 ; SSE42-NEXT:    andl $1, %ecx
1137 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
1138 ; SSE42-NEXT:    pextrb $6, %xmm0, %ecx
1139 ; SSE42-NEXT:    andl $1, %ecx
1140 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
1141 ; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
1142 ; SSE42-NEXT:    andl $1, %ecx
1143 ; SSE42-NEXT:    shll $4, %ecx
1144 ; SSE42-NEXT:    orl %eax, %ecx
1145 ; SSE42-NEXT:    pextrb $10, %xmm0, %eax
1146 ; SSE42-NEXT:    andl $1, %eax
1147 ; SSE42-NEXT:    shll $5, %eax
1148 ; SSE42-NEXT:    orl %ecx, %eax
1149 ; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
1150 ; SSE42-NEXT:    andl $1, %ecx
1151 ; SSE42-NEXT:    shll $6, %ecx
1152 ; SSE42-NEXT:    pextrb $14, %xmm0, %edx
1153 ; SSE42-NEXT:    andl $1, %edx
1154 ; SSE42-NEXT:    shll $7, %edx
1155 ; SSE42-NEXT:    orl %ecx, %edx
1156 ; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
1157 ; SSE42-NEXT:    andl $1, %ecx
1158 ; SSE42-NEXT:    shll $8, %ecx
1159 ; SSE42-NEXT:    orl %edx, %ecx
1160 ; SSE42-NEXT:    pextrb $2, %xmm1, %edx
1161 ; SSE42-NEXT:    andl $1, %edx
1162 ; SSE42-NEXT:    shll $9, %edx
1163 ; SSE42-NEXT:    orl %ecx, %edx
1164 ; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
1165 ; SSE42-NEXT:    andl $1, %ecx
1166 ; SSE42-NEXT:    shll $10, %ecx
1167 ; SSE42-NEXT:    orl %edx, %ecx
1168 ; SSE42-NEXT:    pextrb $6, %xmm1, %edx
1169 ; SSE42-NEXT:    andl $1, %edx
1170 ; SSE42-NEXT:    shll $11, %edx
1171 ; SSE42-NEXT:    orl %ecx, %edx
1172 ; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
1173 ; SSE42-NEXT:    andl $1, %ecx
1174 ; SSE42-NEXT:    shll $12, %ecx
1175 ; SSE42-NEXT:    orl %edx, %ecx
1176 ; SSE42-NEXT:    pextrb $10, %xmm1, %edx
1177 ; SSE42-NEXT:    andl $1, %edx
1178 ; SSE42-NEXT:    shll $13, %edx
1179 ; SSE42-NEXT:    orl %ecx, %edx
1180 ; SSE42-NEXT:    pextrb $12, %xmm1, %ecx
1181 ; SSE42-NEXT:    andl $1, %ecx
1182 ; SSE42-NEXT:    shll $14, %ecx
1183 ; SSE42-NEXT:    orl %edx, %ecx
1184 ; SSE42-NEXT:    pextrb $14, %xmm1, %edx
1185 ; SSE42-NEXT:    shll $15, %edx
1186 ; SSE42-NEXT:    orl %ecx, %edx
1187 ; SSE42-NEXT:    orl %eax, %edx
1188 ; SSE42-NEXT:    movw %dx, (%rdi)
1189 ; SSE42-NEXT:    movq %rdi, %rax
1190 ; SSE42-NEXT:    retq
1191 ;
1192 ; AVX1-LABEL: test_cmp_v32i16:
1193 ; AVX1:       # %bb.0:
1194 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1195 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
1196 ; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm5, %xmm4
1197 ; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm1, %xmm1
1198 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
1199 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
1200 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
1201 ; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm4, %xmm3
1202 ; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm0, %xmm0
1203 ; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
1204 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1205 ; AVX1-NEXT:    retq
1206 ;
1207 ; AVX2-LABEL: test_cmp_v32i16:
1208 ; AVX2:       # %bb.0:
1209 ; AVX2-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1210 ; AVX2-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1211 ; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
1212 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1213 ; AVX2-NEXT:    retq
1214 ;
1215 ; AVX512F-LABEL: test_cmp_v32i16:
1216 ; AVX512F:       # %bb.0:
1217 ; AVX512F-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1218 ; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
1219 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
1220 ; AVX512F-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1221 ; AVX512F-NEXT:    vpmovsxwd %ymm1, %zmm1
1222 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
1223 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1224 ; AVX512F-NEXT:    retq
1225 ;
1226 ; AVX512DQ-LABEL: test_cmp_v32i16:
1227 ; AVX512DQ:       # %bb.0:
1228 ; AVX512DQ-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1229 ; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm0
1230 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
1231 ; AVX512DQ-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1232 ; AVX512DQ-NEXT:    vpmovsxwd %ymm1, %zmm1
1233 ; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm1
1234 ; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1235 ; AVX512DQ-NEXT:    retq
1236 ;
1237 ; AVX512BW-LABEL: test_cmp_v32i16:
1238 ; AVX512BW:       # %bb.0:
1239 ; AVX512BW-NEXT:    vpcmpgtw %zmm1, %zmm0, %k0
1240 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
1241 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
1242 ; AVX512BW-NEXT:    retq
1243   %1 = icmp sgt <32 x i16> %a0, %a1
1244   ret <32 x i1> %1
1245 }
1246
1247 define <64 x i1> @test_cmp_v64i8(<64 x i8> %a0, <64 x i8> %a1) nounwind {
1248 ; SSE2-LABEL: test_cmp_v64i8:
1249 ; SSE2:       # %bb.0:
1250 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm0
1251 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm1
1252 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm2
1253 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
1254 ; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
1255 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1256 ; SSE2-NEXT:    andl $1, %eax
1257 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1258 ; SSE2-NEXT:    andl $1, %ecx
1259 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
1260 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1261 ; SSE2-NEXT:    andl $1, %ecx
1262 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
1263 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1264 ; SSE2-NEXT:    andl $1, %ecx
1265 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
1266 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1267 ; SSE2-NEXT:    andl $1, %ecx
1268 ; SSE2-NEXT:    shll $4, %ecx
1269 ; SSE2-NEXT:    orl %eax, %ecx
1270 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1271 ; SSE2-NEXT:    andl $1, %eax
1272 ; SSE2-NEXT:    shll $5, %eax
1273 ; SSE2-NEXT:    orl %ecx, %eax
1274 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1275 ; SSE2-NEXT:    andl $1, %ecx
1276 ; SSE2-NEXT:    shll $6, %ecx
1277 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1278 ; SSE2-NEXT:    andl $1, %edx
1279 ; SSE2-NEXT:    shll $7, %edx
1280 ; SSE2-NEXT:    orl %ecx, %edx
1281 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1282 ; SSE2-NEXT:    andl $1, %ecx
1283 ; SSE2-NEXT:    shll $8, %ecx
1284 ; SSE2-NEXT:    orl %edx, %ecx
1285 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1286 ; SSE2-NEXT:    andl $1, %edx
1287 ; SSE2-NEXT:    shll $9, %edx
1288 ; SSE2-NEXT:    orl %ecx, %edx
1289 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1290 ; SSE2-NEXT:    andl $1, %ecx
1291 ; SSE2-NEXT:    shll $10, %ecx
1292 ; SSE2-NEXT:    orl %edx, %ecx
1293 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1294 ; SSE2-NEXT:    andl $1, %edx
1295 ; SSE2-NEXT:    shll $11, %edx
1296 ; SSE2-NEXT:    orl %ecx, %edx
1297 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1298 ; SSE2-NEXT:    andl $1, %ecx
1299 ; SSE2-NEXT:    shll $12, %ecx
1300 ; SSE2-NEXT:    orl %edx, %ecx
1301 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1302 ; SSE2-NEXT:    andl $1, %edx
1303 ; SSE2-NEXT:    shll $13, %edx
1304 ; SSE2-NEXT:    orl %ecx, %edx
1305 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1306 ; SSE2-NEXT:    andl $1, %ecx
1307 ; SSE2-NEXT:    shll $14, %ecx
1308 ; SSE2-NEXT:    orl %edx, %ecx
1309 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1310 ; SSE2-NEXT:    shll $15, %edx
1311 ; SSE2-NEXT:    orl %ecx, %edx
1312 ; SSE2-NEXT:    orl %eax, %edx
1313 ; SSE2-NEXT:    movw %dx, 6(%rdi)
1314 ; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
1315 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1316 ; SSE2-NEXT:    andl $1, %eax
1317 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1318 ; SSE2-NEXT:    andl $1, %ecx
1319 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
1320 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1321 ; SSE2-NEXT:    andl $1, %ecx
1322 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
1323 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1324 ; SSE2-NEXT:    andl $1, %ecx
1325 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
1326 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1327 ; SSE2-NEXT:    andl $1, %ecx
1328 ; SSE2-NEXT:    shll $4, %ecx
1329 ; SSE2-NEXT:    orl %eax, %ecx
1330 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1331 ; SSE2-NEXT:    andl $1, %eax
1332 ; SSE2-NEXT:    shll $5, %eax
1333 ; SSE2-NEXT:    orl %ecx, %eax
1334 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1335 ; SSE2-NEXT:    andl $1, %ecx
1336 ; SSE2-NEXT:    shll $6, %ecx
1337 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1338 ; SSE2-NEXT:    andl $1, %edx
1339 ; SSE2-NEXT:    shll $7, %edx
1340 ; SSE2-NEXT:    orl %ecx, %edx
1341 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1342 ; SSE2-NEXT:    andl $1, %ecx
1343 ; SSE2-NEXT:    shll $8, %ecx
1344 ; SSE2-NEXT:    orl %edx, %ecx
1345 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1346 ; SSE2-NEXT:    andl $1, %edx
1347 ; SSE2-NEXT:    shll $9, %edx
1348 ; SSE2-NEXT:    orl %ecx, %edx
1349 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1350 ; SSE2-NEXT:    andl $1, %ecx
1351 ; SSE2-NEXT:    shll $10, %ecx
1352 ; SSE2-NEXT:    orl %edx, %ecx
1353 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1354 ; SSE2-NEXT:    andl $1, %edx
1355 ; SSE2-NEXT:    shll $11, %edx
1356 ; SSE2-NEXT:    orl %ecx, %edx
1357 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1358 ; SSE2-NEXT:    andl $1, %ecx
1359 ; SSE2-NEXT:    shll $12, %ecx
1360 ; SSE2-NEXT:    orl %edx, %ecx
1361 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1362 ; SSE2-NEXT:    andl $1, %edx
1363 ; SSE2-NEXT:    shll $13, %edx
1364 ; SSE2-NEXT:    orl %ecx, %edx
1365 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1366 ; SSE2-NEXT:    andl $1, %ecx
1367 ; SSE2-NEXT:    shll $14, %ecx
1368 ; SSE2-NEXT:    orl %edx, %ecx
1369 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1370 ; SSE2-NEXT:    shll $15, %edx
1371 ; SSE2-NEXT:    orl %ecx, %edx
1372 ; SSE2-NEXT:    orl %eax, %edx
1373 ; SSE2-NEXT:    movw %dx, 4(%rdi)
1374 ; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
1375 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1376 ; SSE2-NEXT:    andl $1, %eax
1377 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1378 ; SSE2-NEXT:    andl $1, %ecx
1379 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
1380 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1381 ; SSE2-NEXT:    andl $1, %ecx
1382 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
1383 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1384 ; SSE2-NEXT:    andl $1, %ecx
1385 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
1386 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1387 ; SSE2-NEXT:    andl $1, %ecx
1388 ; SSE2-NEXT:    shll $4, %ecx
1389 ; SSE2-NEXT:    orl %eax, %ecx
1390 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1391 ; SSE2-NEXT:    andl $1, %eax
1392 ; SSE2-NEXT:    shll $5, %eax
1393 ; SSE2-NEXT:    orl %ecx, %eax
1394 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1395 ; SSE2-NEXT:    andl $1, %ecx
1396 ; SSE2-NEXT:    shll $6, %ecx
1397 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1398 ; SSE2-NEXT:    andl $1, %edx
1399 ; SSE2-NEXT:    shll $7, %edx
1400 ; SSE2-NEXT:    orl %ecx, %edx
1401 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1402 ; SSE2-NEXT:    andl $1, %ecx
1403 ; SSE2-NEXT:    shll $8, %ecx
1404 ; SSE2-NEXT:    orl %edx, %ecx
1405 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1406 ; SSE2-NEXT:    andl $1, %edx
1407 ; SSE2-NEXT:    shll $9, %edx
1408 ; SSE2-NEXT:    orl %ecx, %edx
1409 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1410 ; SSE2-NEXT:    andl $1, %ecx
1411 ; SSE2-NEXT:    shll $10, %ecx
1412 ; SSE2-NEXT:    orl %edx, %ecx
1413 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1414 ; SSE2-NEXT:    andl $1, %edx
1415 ; SSE2-NEXT:    shll $11, %edx
1416 ; SSE2-NEXT:    orl %ecx, %edx
1417 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1418 ; SSE2-NEXT:    andl $1, %ecx
1419 ; SSE2-NEXT:    shll $12, %ecx
1420 ; SSE2-NEXT:    orl %edx, %ecx
1421 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1422 ; SSE2-NEXT:    andl $1, %edx
1423 ; SSE2-NEXT:    shll $13, %edx
1424 ; SSE2-NEXT:    orl %ecx, %edx
1425 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1426 ; SSE2-NEXT:    andl $1, %ecx
1427 ; SSE2-NEXT:    shll $14, %ecx
1428 ; SSE2-NEXT:    orl %edx, %ecx
1429 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1430 ; SSE2-NEXT:    shll $15, %edx
1431 ; SSE2-NEXT:    orl %ecx, %edx
1432 ; SSE2-NEXT:    orl %eax, %edx
1433 ; SSE2-NEXT:    movw %dx, 2(%rdi)
1434 ; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
1435 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1436 ; SSE2-NEXT:    andl $1, %eax
1437 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1438 ; SSE2-NEXT:    andl $1, %ecx
1439 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
1440 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1441 ; SSE2-NEXT:    andl $1, %ecx
1442 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
1443 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1444 ; SSE2-NEXT:    andl $1, %ecx
1445 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
1446 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1447 ; SSE2-NEXT:    andl $1, %ecx
1448 ; SSE2-NEXT:    shll $4, %ecx
1449 ; SSE2-NEXT:    orl %eax, %ecx
1450 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1451 ; SSE2-NEXT:    andl $1, %eax
1452 ; SSE2-NEXT:    shll $5, %eax
1453 ; SSE2-NEXT:    orl %ecx, %eax
1454 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1455 ; SSE2-NEXT:    andl $1, %ecx
1456 ; SSE2-NEXT:    shll $6, %ecx
1457 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1458 ; SSE2-NEXT:    andl $1, %edx
1459 ; SSE2-NEXT:    shll $7, %edx
1460 ; SSE2-NEXT:    orl %ecx, %edx
1461 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1462 ; SSE2-NEXT:    andl $1, %ecx
1463 ; SSE2-NEXT:    shll $8, %ecx
1464 ; SSE2-NEXT:    orl %edx, %ecx
1465 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1466 ; SSE2-NEXT:    andl $1, %edx
1467 ; SSE2-NEXT:    shll $9, %edx
1468 ; SSE2-NEXT:    orl %ecx, %edx
1469 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1470 ; SSE2-NEXT:    andl $1, %ecx
1471 ; SSE2-NEXT:    shll $10, %ecx
1472 ; SSE2-NEXT:    orl %edx, %ecx
1473 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1474 ; SSE2-NEXT:    andl $1, %edx
1475 ; SSE2-NEXT:    shll $11, %edx
1476 ; SSE2-NEXT:    orl %ecx, %edx
1477 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1478 ; SSE2-NEXT:    andl $1, %ecx
1479 ; SSE2-NEXT:    shll $12, %ecx
1480 ; SSE2-NEXT:    orl %edx, %ecx
1481 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1482 ; SSE2-NEXT:    andl $1, %edx
1483 ; SSE2-NEXT:    shll $13, %edx
1484 ; SSE2-NEXT:    orl %ecx, %edx
1485 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1486 ; SSE2-NEXT:    andl $1, %ecx
1487 ; SSE2-NEXT:    shll $14, %ecx
1488 ; SSE2-NEXT:    orl %edx, %ecx
1489 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1490 ; SSE2-NEXT:    shll $15, %edx
1491 ; SSE2-NEXT:    orl %ecx, %edx
1492 ; SSE2-NEXT:    orl %eax, %edx
1493 ; SSE2-NEXT:    movw %dx, (%rdi)
1494 ; SSE2-NEXT:    movq %rdi, %rax
1495 ; SSE2-NEXT:    retq
1496 ;
1497 ; SSE42-LABEL: test_cmp_v64i8:
1498 ; SSE42:       # %bb.0:
1499 ; SSE42-NEXT:    pcmpgtb %xmm4, %xmm0
1500 ; SSE42-NEXT:    pcmpgtb %xmm5, %xmm1
1501 ; SSE42-NEXT:    pcmpgtb %xmm6, %xmm2
1502 ; SSE42-NEXT:    pcmpgtb %xmm7, %xmm3
1503 ; SSE42-NEXT:    pextrb $1, %xmm3, %eax
1504 ; SSE42-NEXT:    andl $1, %eax
1505 ; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
1506 ; SSE42-NEXT:    andl $1, %ecx
1507 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
1508 ; SSE42-NEXT:    pextrb $2, %xmm3, %ecx
1509 ; SSE42-NEXT:    andl $1, %ecx
1510 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
1511 ; SSE42-NEXT:    pextrb $3, %xmm3, %ecx
1512 ; SSE42-NEXT:    andl $1, %ecx
1513 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
1514 ; SSE42-NEXT:    pextrb $4, %xmm3, %ecx
1515 ; SSE42-NEXT:    andl $1, %ecx
1516 ; SSE42-NEXT:    shll $4, %ecx
1517 ; SSE42-NEXT:    orl %eax, %ecx
1518 ; SSE42-NEXT:    pextrb $5, %xmm3, %eax
1519 ; SSE42-NEXT:    andl $1, %eax
1520 ; SSE42-NEXT:    shll $5, %eax
1521 ; SSE42-NEXT:    orl %ecx, %eax
1522 ; SSE42-NEXT:    pextrb $6, %xmm3, %ecx
1523 ; SSE42-NEXT:    andl $1, %ecx
1524 ; SSE42-NEXT:    shll $6, %ecx
1525 ; SSE42-NEXT:    pextrb $7, %xmm3, %edx
1526 ; SSE42-NEXT:    andl $1, %edx
1527 ; SSE42-NEXT:    shll $7, %edx
1528 ; SSE42-NEXT:    orl %ecx, %edx
1529 ; SSE42-NEXT:    pextrb $8, %xmm3, %ecx
1530 ; SSE42-NEXT:    andl $1, %ecx
1531 ; SSE42-NEXT:    shll $8, %ecx
1532 ; SSE42-NEXT:    orl %edx, %ecx
1533 ; SSE42-NEXT:    pextrb $9, %xmm3, %edx
1534 ; SSE42-NEXT:    andl $1, %edx
1535 ; SSE42-NEXT:    shll $9, %edx
1536 ; SSE42-NEXT:    orl %ecx, %edx
1537 ; SSE42-NEXT:    pextrb $10, %xmm3, %ecx
1538 ; SSE42-NEXT:    andl $1, %ecx
1539 ; SSE42-NEXT:    shll $10, %ecx
1540 ; SSE42-NEXT:    orl %edx, %ecx
1541 ; SSE42-NEXT:    pextrb $11, %xmm3, %edx
1542 ; SSE42-NEXT:    andl $1, %edx
1543 ; SSE42-NEXT:    shll $11, %edx
1544 ; SSE42-NEXT:    orl %ecx, %edx
1545 ; SSE42-NEXT:    pextrb $12, %xmm3, %ecx
1546 ; SSE42-NEXT:    andl $1, %ecx
1547 ; SSE42-NEXT:    shll $12, %ecx
1548 ; SSE42-NEXT:    orl %edx, %ecx
1549 ; SSE42-NEXT:    pextrb $13, %xmm3, %edx
1550 ; SSE42-NEXT:    andl $1, %edx
1551 ; SSE42-NEXT:    shll $13, %edx
1552 ; SSE42-NEXT:    orl %ecx, %edx
1553 ; SSE42-NEXT:    pextrb $14, %xmm3, %ecx
1554 ; SSE42-NEXT:    andl $1, %ecx
1555 ; SSE42-NEXT:    shll $14, %ecx
1556 ; SSE42-NEXT:    orl %edx, %ecx
1557 ; SSE42-NEXT:    pextrb $15, %xmm3, %edx
1558 ; SSE42-NEXT:    shll $15, %edx
1559 ; SSE42-NEXT:    orl %ecx, %edx
1560 ; SSE42-NEXT:    orl %eax, %edx
1561 ; SSE42-NEXT:    movw %dx, 6(%rdi)
1562 ; SSE42-NEXT:    pextrb $1, %xmm2, %eax
1563 ; SSE42-NEXT:    andl $1, %eax
1564 ; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
1565 ; SSE42-NEXT:    andl $1, %ecx
1566 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
1567 ; SSE42-NEXT:    pextrb $2, %xmm2, %ecx
1568 ; SSE42-NEXT:    andl $1, %ecx
1569 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
1570 ; SSE42-NEXT:    pextrb $3, %xmm2, %ecx
1571 ; SSE42-NEXT:    andl $1, %ecx
1572 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
1573 ; SSE42-NEXT:    pextrb $4, %xmm2, %ecx
1574 ; SSE42-NEXT:    andl $1, %ecx
1575 ; SSE42-NEXT:    shll $4, %ecx
1576 ; SSE42-NEXT:    orl %eax, %ecx
1577 ; SSE42-NEXT:    pextrb $5, %xmm2, %eax
1578 ; SSE42-NEXT:    andl $1, %eax
1579 ; SSE42-NEXT:    shll $5, %eax
1580 ; SSE42-NEXT:    orl %ecx, %eax
1581 ; SSE42-NEXT:    pextrb $6, %xmm2, %ecx
1582 ; SSE42-NEXT:    andl $1, %ecx
1583 ; SSE42-NEXT:    shll $6, %ecx
1584 ; SSE42-NEXT:    pextrb $7, %xmm2, %edx
1585 ; SSE42-NEXT:    andl $1, %edx
1586 ; SSE42-NEXT:    shll $7, %edx
1587 ; SSE42-NEXT:    orl %ecx, %edx
1588 ; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
1589 ; SSE42-NEXT:    andl $1, %ecx
1590 ; SSE42-NEXT:    shll $8, %ecx
1591 ; SSE42-NEXT:    orl %edx, %ecx
1592 ; SSE42-NEXT:    pextrb $9, %xmm2, %edx
1593 ; SSE42-NEXT:    andl $1, %edx
1594 ; SSE42-NEXT:    shll $9, %edx
1595 ; SSE42-NEXT:    orl %ecx, %edx
1596 ; SSE42-NEXT:    pextrb $10, %xmm2, %ecx
1597 ; SSE42-NEXT:    andl $1, %ecx
1598 ; SSE42-NEXT:    shll $10, %ecx
1599 ; SSE42-NEXT:    orl %edx, %ecx
1600 ; SSE42-NEXT:    pextrb $11, %xmm2, %edx
1601 ; SSE42-NEXT:    andl $1, %edx
1602 ; SSE42-NEXT:    shll $11, %edx
1603 ; SSE42-NEXT:    orl %ecx, %edx
1604 ; SSE42-NEXT:    pextrb $12, %xmm2, %ecx
1605 ; SSE42-NEXT:    andl $1, %ecx
1606 ; SSE42-NEXT:    shll $12, %ecx
1607 ; SSE42-NEXT:    orl %edx, %ecx
1608 ; SSE42-NEXT:    pextrb $13, %xmm2, %edx
1609 ; SSE42-NEXT:    andl $1, %edx
1610 ; SSE42-NEXT:    shll $13, %edx
1611 ; SSE42-NEXT:    orl %ecx, %edx
1612 ; SSE42-NEXT:    pextrb $14, %xmm2, %ecx
1613 ; SSE42-NEXT:    andl $1, %ecx
1614 ; SSE42-NEXT:    shll $14, %ecx
1615 ; SSE42-NEXT:    orl %edx, %ecx
1616 ; SSE42-NEXT:    pextrb $15, %xmm2, %edx
1617 ; SSE42-NEXT:    shll $15, %edx
1618 ; SSE42-NEXT:    orl %ecx, %edx
1619 ; SSE42-NEXT:    orl %eax, %edx
1620 ; SSE42-NEXT:    movw %dx, 4(%rdi)
1621 ; SSE42-NEXT:    pextrb $1, %xmm1, %eax
1622 ; SSE42-NEXT:    andl $1, %eax
1623 ; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
1624 ; SSE42-NEXT:    andl $1, %ecx
1625 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
1626 ; SSE42-NEXT:    pextrb $2, %xmm1, %ecx
1627 ; SSE42-NEXT:    andl $1, %ecx
1628 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
1629 ; SSE42-NEXT:    pextrb $3, %xmm1, %ecx
1630 ; SSE42-NEXT:    andl $1, %ecx
1631 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
1632 ; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
1633 ; SSE42-NEXT:    andl $1, %ecx
1634 ; SSE42-NEXT:    shll $4, %ecx
1635 ; SSE42-NEXT:    orl %eax, %ecx
1636 ; SSE42-NEXT:    pextrb $5, %xmm1, %eax
1637 ; SSE42-NEXT:    andl $1, %eax
1638 ; SSE42-NEXT:    shll $5, %eax
1639 ; SSE42-NEXT:    orl %ecx, %eax
1640 ; SSE42-NEXT:    pextrb $6, %xmm1, %ecx
1641 ; SSE42-NEXT:    andl $1, %ecx
1642 ; SSE42-NEXT:    shll $6, %ecx
1643 ; SSE42-NEXT:    pextrb $7, %xmm1, %edx
1644 ; SSE42-NEXT:    andl $1, %edx
1645 ; SSE42-NEXT:    shll $7, %edx
1646 ; SSE42-NEXT:    orl %ecx, %edx
1647 ; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
1648 ; SSE42-NEXT:    andl $1, %ecx
1649 ; SSE42-NEXT:    shll $8, %ecx
1650 ; SSE42-NEXT:    orl %edx, %ecx
1651 ; SSE42-NEXT:    pextrb $9, %xmm1, %edx
1652 ; SSE42-NEXT:    andl $1, %edx
1653 ; SSE42-NEXT:    shll $9, %edx
1654 ; SSE42-NEXT:    orl %ecx, %edx
1655 ; SSE42-NEXT:    pextrb $10, %xmm1, %ecx
1656 ; SSE42-NEXT:    andl $1, %ecx
1657 ; SSE42-NEXT:    shll $10, %ecx
1658 ; SSE42-NEXT:    orl %edx, %ecx
1659 ; SSE42-NEXT:    pextrb $11, %xmm1, %edx
1660 ; SSE42-NEXT:    andl $1, %edx
1661 ; SSE42-NEXT:    shll $11, %edx
1662 ; SSE42-NEXT:    orl %ecx, %edx
1663 ; SSE42-NEXT:    pextrb $12, %xmm1, %ecx
1664 ; SSE42-NEXT:    andl $1, %ecx
1665 ; SSE42-NEXT:    shll $12, %ecx
1666 ; SSE42-NEXT:    orl %edx, %ecx
1667 ; SSE42-NEXT:    pextrb $13, %xmm1, %edx
1668 ; SSE42-NEXT:    andl $1, %edx
1669 ; SSE42-NEXT:    shll $13, %edx
1670 ; SSE42-NEXT:    orl %ecx, %edx
1671 ; SSE42-NEXT:    pextrb $14, %xmm1, %ecx
1672 ; SSE42-NEXT:    andl $1, %ecx
1673 ; SSE42-NEXT:    shll $14, %ecx
1674 ; SSE42-NEXT:    orl %edx, %ecx
1675 ; SSE42-NEXT:    pextrb $15, %xmm1, %edx
1676 ; SSE42-NEXT:    shll $15, %edx
1677 ; SSE42-NEXT:    orl %ecx, %edx
1678 ; SSE42-NEXT:    orl %eax, %edx
1679 ; SSE42-NEXT:    movw %dx, 2(%rdi)
1680 ; SSE42-NEXT:    pextrb $1, %xmm0, %eax
1681 ; SSE42-NEXT:    andl $1, %eax
1682 ; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
1683 ; SSE42-NEXT:    andl $1, %ecx
1684 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
1685 ; SSE42-NEXT:    pextrb $2, %xmm0, %ecx
1686 ; SSE42-NEXT:    andl $1, %ecx
1687 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
1688 ; SSE42-NEXT:    pextrb $3, %xmm0, %ecx
1689 ; SSE42-NEXT:    andl $1, %ecx
1690 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
1691 ; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
1692 ; SSE42-NEXT:    andl $1, %ecx
1693 ; SSE42-NEXT:    shll $4, %ecx
1694 ; SSE42-NEXT:    orl %eax, %ecx
1695 ; SSE42-NEXT:    pextrb $5, %xmm0, %eax
1696 ; SSE42-NEXT:    andl $1, %eax
1697 ; SSE42-NEXT:    shll $5, %eax
1698 ; SSE42-NEXT:    orl %ecx, %eax
1699 ; SSE42-NEXT:    pextrb $6, %xmm0, %ecx
1700 ; SSE42-NEXT:    andl $1, %ecx
1701 ; SSE42-NEXT:    shll $6, %ecx
1702 ; SSE42-NEXT:    pextrb $7, %xmm0, %edx
1703 ; SSE42-NEXT:    andl $1, %edx
1704 ; SSE42-NEXT:    shll $7, %edx
1705 ; SSE42-NEXT:    orl %ecx, %edx
1706 ; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
1707 ; SSE42-NEXT:    andl $1, %ecx
1708 ; SSE42-NEXT:    shll $8, %ecx
1709 ; SSE42-NEXT:    orl %edx, %ecx
1710 ; SSE42-NEXT:    pextrb $9, %xmm0, %edx
1711 ; SSE42-NEXT:    andl $1, %edx
1712 ; SSE42-NEXT:    shll $9, %edx
1713 ; SSE42-NEXT:    orl %ecx, %edx
1714 ; SSE42-NEXT:    pextrb $10, %xmm0, %ecx
1715 ; SSE42-NEXT:    andl $1, %ecx
1716 ; SSE42-NEXT:    shll $10, %ecx
1717 ; SSE42-NEXT:    orl %edx, %ecx
1718 ; SSE42-NEXT:    pextrb $11, %xmm0, %edx
1719 ; SSE42-NEXT:    andl $1, %edx
1720 ; SSE42-NEXT:    shll $11, %edx
1721 ; SSE42-NEXT:    orl %ecx, %edx
1722 ; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
1723 ; SSE42-NEXT:    andl $1, %ecx
1724 ; SSE42-NEXT:    shll $12, %ecx
1725 ; SSE42-NEXT:    orl %edx, %ecx
1726 ; SSE42-NEXT:    pextrb $13, %xmm0, %edx
1727 ; SSE42-NEXT:    andl $1, %edx
1728 ; SSE42-NEXT:    shll $13, %edx
1729 ; SSE42-NEXT:    orl %ecx, %edx
1730 ; SSE42-NEXT:    pextrb $14, %xmm0, %ecx
1731 ; SSE42-NEXT:    andl $1, %ecx
1732 ; SSE42-NEXT:    shll $14, %ecx
1733 ; SSE42-NEXT:    orl %edx, %ecx
1734 ; SSE42-NEXT:    pextrb $15, %xmm0, %edx
1735 ; SSE42-NEXT:    shll $15, %edx
1736 ; SSE42-NEXT:    orl %ecx, %edx
1737 ; SSE42-NEXT:    orl %eax, %edx
1738 ; SSE42-NEXT:    movw %dx, (%rdi)
1739 ; SSE42-NEXT:    movq %rdi, %rax
1740 ; SSE42-NEXT:    retq
1741 ;
1742 ; AVX1-LABEL: test_cmp_v64i8:
1743 ; AVX1:       # %bb.0:
1744 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
1745 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
1746 ; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm5, %xmm4
1747 ; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm0
1748 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
1749 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
1750 ; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm5, %xmm2
1751 ; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm1
1752 ; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
1753 ; AVX1-NEXT:    andl $1, %eax
1754 ; AVX1-NEXT:    vpextrb $0, %xmm1, %ecx
1755 ; AVX1-NEXT:    andl $1, %ecx
1756 ; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
1757 ; AVX1-NEXT:    vpextrb $2, %xmm1, %ecx
1758 ; AVX1-NEXT:    andl $1, %ecx
1759 ; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
1760 ; AVX1-NEXT:    vpextrb $3, %xmm1, %ecx
1761 ; AVX1-NEXT:    andl $1, %ecx
1762 ; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
1763 ; AVX1-NEXT:    vpextrb $4, %xmm1, %ecx
1764 ; AVX1-NEXT:    andl $1, %ecx
1765 ; AVX1-NEXT:    shll $4, %ecx
1766 ; AVX1-NEXT:    orl %eax, %ecx
1767 ; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
1768 ; AVX1-NEXT:    andl $1, %eax
1769 ; AVX1-NEXT:    shll $5, %eax
1770 ; AVX1-NEXT:    orl %ecx, %eax
1771 ; AVX1-NEXT:    vpextrb $6, %xmm1, %ecx
1772 ; AVX1-NEXT:    andl $1, %ecx
1773 ; AVX1-NEXT:    shll $6, %ecx
1774 ; AVX1-NEXT:    vpextrb $7, %xmm1, %edx
1775 ; AVX1-NEXT:    andl $1, %edx
1776 ; AVX1-NEXT:    shll $7, %edx
1777 ; AVX1-NEXT:    orl %ecx, %edx
1778 ; AVX1-NEXT:    vpextrb $8, %xmm1, %ecx
1779 ; AVX1-NEXT:    andl $1, %ecx
1780 ; AVX1-NEXT:    shll $8, %ecx
1781 ; AVX1-NEXT:    orl %edx, %ecx
1782 ; AVX1-NEXT:    vpextrb $9, %xmm1, %edx
1783 ; AVX1-NEXT:    andl $1, %edx
1784 ; AVX1-NEXT:    shll $9, %edx
1785 ; AVX1-NEXT:    orl %ecx, %edx
1786 ; AVX1-NEXT:    vpextrb $10, %xmm1, %ecx
1787 ; AVX1-NEXT:    andl $1, %ecx
1788 ; AVX1-NEXT:    shll $10, %ecx
1789 ; AVX1-NEXT:    orl %edx, %ecx
1790 ; AVX1-NEXT:    vpextrb $11, %xmm1, %edx
1791 ; AVX1-NEXT:    andl $1, %edx
1792 ; AVX1-NEXT:    shll $11, %edx
1793 ; AVX1-NEXT:    orl %ecx, %edx
1794 ; AVX1-NEXT:    vpextrb $12, %xmm1, %ecx
1795 ; AVX1-NEXT:    andl $1, %ecx
1796 ; AVX1-NEXT:    shll $12, %ecx
1797 ; AVX1-NEXT:    orl %edx, %ecx
1798 ; AVX1-NEXT:    vpextrb $13, %xmm1, %edx
1799 ; AVX1-NEXT:    andl $1, %edx
1800 ; AVX1-NEXT:    shll $13, %edx
1801 ; AVX1-NEXT:    orl %ecx, %edx
1802 ; AVX1-NEXT:    vpextrb $14, %xmm1, %ecx
1803 ; AVX1-NEXT:    andl $1, %ecx
1804 ; AVX1-NEXT:    shll $14, %ecx
1805 ; AVX1-NEXT:    orl %edx, %ecx
1806 ; AVX1-NEXT:    vpextrb $15, %xmm1, %edx
1807 ; AVX1-NEXT:    andl $1, %edx
1808 ; AVX1-NEXT:    shll $15, %edx
1809 ; AVX1-NEXT:    orl %ecx, %edx
1810 ; AVX1-NEXT:    vpextrb $0, %xmm2, %ecx
1811 ; AVX1-NEXT:    andl $1, %ecx
1812 ; AVX1-NEXT:    shll $16, %ecx
1813 ; AVX1-NEXT:    orl %edx, %ecx
1814 ; AVX1-NEXT:    vpextrb $1, %xmm2, %edx
1815 ; AVX1-NEXT:    andl $1, %edx
1816 ; AVX1-NEXT:    shll $17, %edx
1817 ; AVX1-NEXT:    orl %ecx, %edx
1818 ; AVX1-NEXT:    vpextrb $2, %xmm2, %ecx
1819 ; AVX1-NEXT:    andl $1, %ecx
1820 ; AVX1-NEXT:    shll $18, %ecx
1821 ; AVX1-NEXT:    orl %edx, %ecx
1822 ; AVX1-NEXT:    vpextrb $3, %xmm2, %edx
1823 ; AVX1-NEXT:    andl $1, %edx
1824 ; AVX1-NEXT:    shll $19, %edx
1825 ; AVX1-NEXT:    orl %ecx, %edx
1826 ; AVX1-NEXT:    vpextrb $4, %xmm2, %ecx
1827 ; AVX1-NEXT:    andl $1, %ecx
1828 ; AVX1-NEXT:    shll $20, %ecx
1829 ; AVX1-NEXT:    orl %edx, %ecx
1830 ; AVX1-NEXT:    vpextrb $5, %xmm2, %edx
1831 ; AVX1-NEXT:    andl $1, %edx
1832 ; AVX1-NEXT:    shll $21, %edx
1833 ; AVX1-NEXT:    orl %ecx, %edx
1834 ; AVX1-NEXT:    vpextrb $6, %xmm2, %ecx
1835 ; AVX1-NEXT:    andl $1, %ecx
1836 ; AVX1-NEXT:    shll $22, %ecx
1837 ; AVX1-NEXT:    orl %edx, %ecx
1838 ; AVX1-NEXT:    vpextrb $7, %xmm2, %edx
1839 ; AVX1-NEXT:    andl $1, %edx
1840 ; AVX1-NEXT:    shll $23, %edx
1841 ; AVX1-NEXT:    orl %ecx, %edx
1842 ; AVX1-NEXT:    vpextrb $8, %xmm2, %ecx
1843 ; AVX1-NEXT:    andl $1, %ecx
1844 ; AVX1-NEXT:    shll $24, %ecx
1845 ; AVX1-NEXT:    orl %edx, %ecx
1846 ; AVX1-NEXT:    vpextrb $9, %xmm2, %edx
1847 ; AVX1-NEXT:    andl $1, %edx
1848 ; AVX1-NEXT:    shll $25, %edx
1849 ; AVX1-NEXT:    orl %ecx, %edx
1850 ; AVX1-NEXT:    vpextrb $10, %xmm2, %ecx
1851 ; AVX1-NEXT:    andl $1, %ecx
1852 ; AVX1-NEXT:    shll $26, %ecx
1853 ; AVX1-NEXT:    orl %edx, %ecx
1854 ; AVX1-NEXT:    vpextrb $11, %xmm2, %edx
1855 ; AVX1-NEXT:    andl $1, %edx
1856 ; AVX1-NEXT:    shll $27, %edx
1857 ; AVX1-NEXT:    orl %ecx, %edx
1858 ; AVX1-NEXT:    vpextrb $12, %xmm2, %ecx
1859 ; AVX1-NEXT:    andl $1, %ecx
1860 ; AVX1-NEXT:    shll $28, %ecx
1861 ; AVX1-NEXT:    orl %edx, %ecx
1862 ; AVX1-NEXT:    vpextrb $13, %xmm2, %edx
1863 ; AVX1-NEXT:    andl $1, %edx
1864 ; AVX1-NEXT:    shll $29, %edx
1865 ; AVX1-NEXT:    orl %ecx, %edx
1866 ; AVX1-NEXT:    vpextrb $14, %xmm2, %ecx
1867 ; AVX1-NEXT:    andl $1, %ecx
1868 ; AVX1-NEXT:    shll $30, %ecx
1869 ; AVX1-NEXT:    orl %edx, %ecx
1870 ; AVX1-NEXT:    vpextrb $15, %xmm2, %edx
1871 ; AVX1-NEXT:    shll $31, %edx
1872 ; AVX1-NEXT:    orl %ecx, %edx
1873 ; AVX1-NEXT:    orl %eax, %edx
1874 ; AVX1-NEXT:    movl %edx, 4(%rdi)
1875 ; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
1876 ; AVX1-NEXT:    andl $1, %eax
1877 ; AVX1-NEXT:    vpextrb $0, %xmm0, %ecx
1878 ; AVX1-NEXT:    andl $1, %ecx
1879 ; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
1880 ; AVX1-NEXT:    vpextrb $2, %xmm0, %ecx
1881 ; AVX1-NEXT:    andl $1, %ecx
1882 ; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
1883 ; AVX1-NEXT:    vpextrb $3, %xmm0, %ecx
1884 ; AVX1-NEXT:    andl $1, %ecx
1885 ; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
1886 ; AVX1-NEXT:    vpextrb $4, %xmm0, %ecx
1887 ; AVX1-NEXT:    andl $1, %ecx
1888 ; AVX1-NEXT:    shll $4, %ecx
1889 ; AVX1-NEXT:    orl %eax, %ecx
1890 ; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
1891 ; AVX1-NEXT:    andl $1, %eax
1892 ; AVX1-NEXT:    shll $5, %eax
1893 ; AVX1-NEXT:    orl %ecx, %eax
1894 ; AVX1-NEXT:    vpextrb $6, %xmm0, %ecx
1895 ; AVX1-NEXT:    andl $1, %ecx
1896 ; AVX1-NEXT:    shll $6, %ecx
1897 ; AVX1-NEXT:    vpextrb $7, %xmm0, %edx
1898 ; AVX1-NEXT:    andl $1, %edx
1899 ; AVX1-NEXT:    shll $7, %edx
1900 ; AVX1-NEXT:    orl %ecx, %edx
1901 ; AVX1-NEXT:    vpextrb $8, %xmm0, %ecx
1902 ; AVX1-NEXT:    andl $1, %ecx
1903 ; AVX1-NEXT:    shll $8, %ecx
1904 ; AVX1-NEXT:    orl %edx, %ecx
1905 ; AVX1-NEXT:    vpextrb $9, %xmm0, %edx
1906 ; AVX1-NEXT:    andl $1, %edx
1907 ; AVX1-NEXT:    shll $9, %edx
1908 ; AVX1-NEXT:    orl %ecx, %edx
1909 ; AVX1-NEXT:    vpextrb $10, %xmm0, %ecx
1910 ; AVX1-NEXT:    andl $1, %ecx
1911 ; AVX1-NEXT:    shll $10, %ecx
1912 ; AVX1-NEXT:    orl %edx, %ecx
1913 ; AVX1-NEXT:    vpextrb $11, %xmm0, %edx
1914 ; AVX1-NEXT:    andl $1, %edx
1915 ; AVX1-NEXT:    shll $11, %edx
1916 ; AVX1-NEXT:    orl %ecx, %edx
1917 ; AVX1-NEXT:    vpextrb $12, %xmm0, %ecx
1918 ; AVX1-NEXT:    andl $1, %ecx
1919 ; AVX1-NEXT:    shll $12, %ecx
1920 ; AVX1-NEXT:    orl %edx, %ecx
1921 ; AVX1-NEXT:    vpextrb $13, %xmm0, %edx
1922 ; AVX1-NEXT:    andl $1, %edx
1923 ; AVX1-NEXT:    shll $13, %edx
1924 ; AVX1-NEXT:    orl %ecx, %edx
1925 ; AVX1-NEXT:    vpextrb $14, %xmm0, %ecx
1926 ; AVX1-NEXT:    andl $1, %ecx
1927 ; AVX1-NEXT:    shll $14, %ecx
1928 ; AVX1-NEXT:    orl %edx, %ecx
1929 ; AVX1-NEXT:    vpextrb $15, %xmm0, %edx
1930 ; AVX1-NEXT:    andl $1, %edx
1931 ; AVX1-NEXT:    shll $15, %edx
1932 ; AVX1-NEXT:    orl %ecx, %edx
1933 ; AVX1-NEXT:    vpextrb $0, %xmm4, %ecx
1934 ; AVX1-NEXT:    andl $1, %ecx
1935 ; AVX1-NEXT:    shll $16, %ecx
1936 ; AVX1-NEXT:    orl %edx, %ecx
1937 ; AVX1-NEXT:    vpextrb $1, %xmm4, %edx
1938 ; AVX1-NEXT:    andl $1, %edx
1939 ; AVX1-NEXT:    shll $17, %edx
1940 ; AVX1-NEXT:    orl %ecx, %edx
1941 ; AVX1-NEXT:    vpextrb $2, %xmm4, %ecx
1942 ; AVX1-NEXT:    andl $1, %ecx
1943 ; AVX1-NEXT:    shll $18, %ecx
1944 ; AVX1-NEXT:    orl %edx, %ecx
1945 ; AVX1-NEXT:    vpextrb $3, %xmm4, %edx
1946 ; AVX1-NEXT:    andl $1, %edx
1947 ; AVX1-NEXT:    shll $19, %edx
1948 ; AVX1-NEXT:    orl %ecx, %edx
1949 ; AVX1-NEXT:    vpextrb $4, %xmm4, %ecx
1950 ; AVX1-NEXT:    andl $1, %ecx
1951 ; AVX1-NEXT:    shll $20, %ecx
1952 ; AVX1-NEXT:    orl %edx, %ecx
1953 ; AVX1-NEXT:    vpextrb $5, %xmm4, %edx
1954 ; AVX1-NEXT:    andl $1, %edx
1955 ; AVX1-NEXT:    shll $21, %edx
1956 ; AVX1-NEXT:    orl %ecx, %edx
1957 ; AVX1-NEXT:    vpextrb $6, %xmm4, %ecx
1958 ; AVX1-NEXT:    andl $1, %ecx
1959 ; AVX1-NEXT:    shll $22, %ecx
1960 ; AVX1-NEXT:    orl %edx, %ecx
1961 ; AVX1-NEXT:    vpextrb $7, %xmm4, %edx
1962 ; AVX1-NEXT:    andl $1, %edx
1963 ; AVX1-NEXT:    shll $23, %edx
1964 ; AVX1-NEXT:    orl %ecx, %edx
1965 ; AVX1-NEXT:    vpextrb $8, %xmm4, %ecx
1966 ; AVX1-NEXT:    andl $1, %ecx
1967 ; AVX1-NEXT:    shll $24, %ecx
1968 ; AVX1-NEXT:    orl %edx, %ecx
1969 ; AVX1-NEXT:    vpextrb $9, %xmm4, %edx
1970 ; AVX1-NEXT:    andl $1, %edx
1971 ; AVX1-NEXT:    shll $25, %edx
1972 ; AVX1-NEXT:    orl %ecx, %edx
1973 ; AVX1-NEXT:    vpextrb $10, %xmm4, %ecx
1974 ; AVX1-NEXT:    andl $1, %ecx
1975 ; AVX1-NEXT:    shll $26, %ecx
1976 ; AVX1-NEXT:    orl %edx, %ecx
1977 ; AVX1-NEXT:    vpextrb $11, %xmm4, %edx
1978 ; AVX1-NEXT:    andl $1, %edx
1979 ; AVX1-NEXT:    shll $27, %edx
1980 ; AVX1-NEXT:    orl %ecx, %edx
1981 ; AVX1-NEXT:    vpextrb $12, %xmm4, %ecx
1982 ; AVX1-NEXT:    andl $1, %ecx
1983 ; AVX1-NEXT:    shll $28, %ecx
1984 ; AVX1-NEXT:    orl %edx, %ecx
1985 ; AVX1-NEXT:    vpextrb $13, %xmm4, %edx
1986 ; AVX1-NEXT:    andl $1, %edx
1987 ; AVX1-NEXT:    shll $29, %edx
1988 ; AVX1-NEXT:    orl %ecx, %edx
1989 ; AVX1-NEXT:    vpextrb $14, %xmm4, %ecx
1990 ; AVX1-NEXT:    andl $1, %ecx
1991 ; AVX1-NEXT:    shll $30, %ecx
1992 ; AVX1-NEXT:    orl %edx, %ecx
1993 ; AVX1-NEXT:    vpextrb $15, %xmm4, %edx
1994 ; AVX1-NEXT:    shll $31, %edx
1995 ; AVX1-NEXT:    orl %ecx, %edx
1996 ; AVX1-NEXT:    orl %eax, %edx
1997 ; AVX1-NEXT:    movl %edx, (%rdi)
1998 ; AVX1-NEXT:    movq %rdi, %rax
1999 ; AVX1-NEXT:    vzeroupper
2000 ; AVX1-NEXT:    retq
2001 ;
2002 ; AVX2-LABEL: test_cmp_v64i8:
2003 ; AVX2:       # %bb.0:
2004 ; AVX2-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
2005 ; AVX2-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm1
2006 ; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
2007 ; AVX2-NEXT:    andl $1, %eax
2008 ; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
2009 ; AVX2-NEXT:    andl $1, %ecx
2010 ; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
2011 ; AVX2-NEXT:    vpextrb $2, %xmm1, %ecx
2012 ; AVX2-NEXT:    andl $1, %ecx
2013 ; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
2014 ; AVX2-NEXT:    vpextrb $3, %xmm1, %ecx
2015 ; AVX2-NEXT:    andl $1, %ecx
2016 ; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
2017 ; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
2018 ; AVX2-NEXT:    andl $1, %ecx
2019 ; AVX2-NEXT:    shll $4, %ecx
2020 ; AVX2-NEXT:    orl %eax, %ecx
2021 ; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
2022 ; AVX2-NEXT:    andl $1, %eax
2023 ; AVX2-NEXT:    shll $5, %eax
2024 ; AVX2-NEXT:    orl %ecx, %eax
2025 ; AVX2-NEXT:    vpextrb $6, %xmm1, %ecx
2026 ; AVX2-NEXT:    andl $1, %ecx
2027 ; AVX2-NEXT:    shll $6, %ecx
2028 ; AVX2-NEXT:    vpextrb $7, %xmm1, %edx
2029 ; AVX2-NEXT:    andl $1, %edx
2030 ; AVX2-NEXT:    shll $7, %edx
2031 ; AVX2-NEXT:    orl %ecx, %edx
2032 ; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
2033 ; AVX2-NEXT:    andl $1, %ecx
2034 ; AVX2-NEXT:    shll $8, %ecx
2035 ; AVX2-NEXT:    orl %edx, %ecx
2036 ; AVX2-NEXT:    vpextrb $9, %xmm1, %edx
2037 ; AVX2-NEXT:    andl $1, %edx
2038 ; AVX2-NEXT:    shll $9, %edx
2039 ; AVX2-NEXT:    orl %ecx, %edx
2040 ; AVX2-NEXT:    vpextrb $10, %xmm1, %ecx
2041 ; AVX2-NEXT:    andl $1, %ecx
2042 ; AVX2-NEXT:    shll $10, %ecx
2043 ; AVX2-NEXT:    orl %edx, %ecx
2044 ; AVX2-NEXT:    vpextrb $11, %xmm1, %edx
2045 ; AVX2-NEXT:    andl $1, %edx
2046 ; AVX2-NEXT:    shll $11, %edx
2047 ; AVX2-NEXT:    orl %ecx, %edx
2048 ; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
2049 ; AVX2-NEXT:    andl $1, %ecx
2050 ; AVX2-NEXT:    shll $12, %ecx
2051 ; AVX2-NEXT:    orl %edx, %ecx
2052 ; AVX2-NEXT:    vpextrb $13, %xmm1, %edx
2053 ; AVX2-NEXT:    andl $1, %edx
2054 ; AVX2-NEXT:    shll $13, %edx
2055 ; AVX2-NEXT:    orl %ecx, %edx
2056 ; AVX2-NEXT:    vpextrb $14, %xmm1, %ecx
2057 ; AVX2-NEXT:    andl $1, %ecx
2058 ; AVX2-NEXT:    shll $14, %ecx
2059 ; AVX2-NEXT:    orl %edx, %ecx
2060 ; AVX2-NEXT:    vpextrb $15, %xmm1, %edx
2061 ; AVX2-NEXT:    andl $1, %edx
2062 ; AVX2-NEXT:    shll $15, %edx
2063 ; AVX2-NEXT:    orl %ecx, %edx
2064 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
2065 ; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
2066 ; AVX2-NEXT:    andl $1, %ecx
2067 ; AVX2-NEXT:    shll $16, %ecx
2068 ; AVX2-NEXT:    orl %edx, %ecx
2069 ; AVX2-NEXT:    vpextrb $1, %xmm1, %edx
2070 ; AVX2-NEXT:    andl $1, %edx
2071 ; AVX2-NEXT:    shll $17, %edx
2072 ; AVX2-NEXT:    orl %ecx, %edx
2073 ; AVX2-NEXT:    vpextrb $2, %xmm1, %ecx
2074 ; AVX2-NEXT:    andl $1, %ecx
2075 ; AVX2-NEXT:    shll $18, %ecx
2076 ; AVX2-NEXT:    orl %edx, %ecx
2077 ; AVX2-NEXT:    vpextrb $3, %xmm1, %edx
2078 ; AVX2-NEXT:    andl $1, %edx
2079 ; AVX2-NEXT:    shll $19, %edx
2080 ; AVX2-NEXT:    orl %ecx, %edx
2081 ; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
2082 ; AVX2-NEXT:    andl $1, %ecx
2083 ; AVX2-NEXT:    shll $20, %ecx
2084 ; AVX2-NEXT:    orl %edx, %ecx
2085 ; AVX2-NEXT:    vpextrb $5, %xmm1, %edx
2086 ; AVX2-NEXT:    andl $1, %edx
2087 ; AVX2-NEXT:    shll $21, %edx
2088 ; AVX2-NEXT:    orl %ecx, %edx
2089 ; AVX2-NEXT:    vpextrb $6, %xmm1, %ecx
2090 ; AVX2-NEXT:    andl $1, %ecx
2091 ; AVX2-NEXT:    shll $22, %ecx
2092 ; AVX2-NEXT:    orl %edx, %ecx
2093 ; AVX2-NEXT:    vpextrb $7, %xmm1, %edx
2094 ; AVX2-NEXT:    andl $1, %edx
2095 ; AVX2-NEXT:    shll $23, %edx
2096 ; AVX2-NEXT:    orl %ecx, %edx
2097 ; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
2098 ; AVX2-NEXT:    andl $1, %ecx
2099 ; AVX2-NEXT:    shll $24, %ecx
2100 ; AVX2-NEXT:    orl %edx, %ecx
2101 ; AVX2-NEXT:    vpextrb $9, %xmm1, %edx
2102 ; AVX2-NEXT:    andl $1, %edx
2103 ; AVX2-NEXT:    shll $25, %edx
2104 ; AVX2-NEXT:    orl %ecx, %edx
2105 ; AVX2-NEXT:    vpextrb $10, %xmm1, %ecx
2106 ; AVX2-NEXT:    andl $1, %ecx
2107 ; AVX2-NEXT:    shll $26, %ecx
2108 ; AVX2-NEXT:    orl %edx, %ecx
2109 ; AVX2-NEXT:    vpextrb $11, %xmm1, %edx
2110 ; AVX2-NEXT:    andl $1, %edx
2111 ; AVX2-NEXT:    shll $27, %edx
2112 ; AVX2-NEXT:    orl %ecx, %edx
2113 ; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
2114 ; AVX2-NEXT:    andl $1, %ecx
2115 ; AVX2-NEXT:    shll $28, %ecx
2116 ; AVX2-NEXT:    orl %edx, %ecx
2117 ; AVX2-NEXT:    vpextrb $13, %xmm1, %edx
2118 ; AVX2-NEXT:    andl $1, %edx
2119 ; AVX2-NEXT:    shll $29, %edx
2120 ; AVX2-NEXT:    orl %ecx, %edx
2121 ; AVX2-NEXT:    vpextrb $14, %xmm1, %ecx
2122 ; AVX2-NEXT:    andl $1, %ecx
2123 ; AVX2-NEXT:    shll $30, %ecx
2124 ; AVX2-NEXT:    orl %edx, %ecx
2125 ; AVX2-NEXT:    vpextrb $15, %xmm1, %edx
2126 ; AVX2-NEXT:    shll $31, %edx
2127 ; AVX2-NEXT:    orl %ecx, %edx
2128 ; AVX2-NEXT:    orl %eax, %edx
2129 ; AVX2-NEXT:    movl %edx, 4(%rdi)
2130 ; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
2131 ; AVX2-NEXT:    andl $1, %eax
2132 ; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
2133 ; AVX2-NEXT:    andl $1, %ecx
2134 ; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
2135 ; AVX2-NEXT:    vpextrb $2, %xmm0, %ecx
2136 ; AVX2-NEXT:    andl $1, %ecx
2137 ; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
2138 ; AVX2-NEXT:    vpextrb $3, %xmm0, %ecx
2139 ; AVX2-NEXT:    andl $1, %ecx
2140 ; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
2141 ; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
2142 ; AVX2-NEXT:    andl $1, %ecx
2143 ; AVX2-NEXT:    shll $4, %ecx
2144 ; AVX2-NEXT:    orl %eax, %ecx
2145 ; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
2146 ; AVX2-NEXT:    andl $1, %eax
2147 ; AVX2-NEXT:    shll $5, %eax
2148 ; AVX2-NEXT:    orl %ecx, %eax
2149 ; AVX2-NEXT:    vpextrb $6, %xmm0, %ecx
2150 ; AVX2-NEXT:    andl $1, %ecx
2151 ; AVX2-NEXT:    shll $6, %ecx
2152 ; AVX2-NEXT:    vpextrb $7, %xmm0, %edx
2153 ; AVX2-NEXT:    andl $1, %edx
2154 ; AVX2-NEXT:    shll $7, %edx
2155 ; AVX2-NEXT:    orl %ecx, %edx
2156 ; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
2157 ; AVX2-NEXT:    andl $1, %ecx
2158 ; AVX2-NEXT:    shll $8, %ecx
2159 ; AVX2-NEXT:    orl %edx, %ecx
2160 ; AVX2-NEXT:    vpextrb $9, %xmm0, %edx
2161 ; AVX2-NEXT:    andl $1, %edx
2162 ; AVX2-NEXT:    shll $9, %edx
2163 ; AVX2-NEXT:    orl %ecx, %edx
2164 ; AVX2-NEXT:    vpextrb $10, %xmm0, %ecx
2165 ; AVX2-NEXT:    andl $1, %ecx
2166 ; AVX2-NEXT:    shll $10, %ecx
2167 ; AVX2-NEXT:    orl %edx, %ecx
2168 ; AVX2-NEXT:    vpextrb $11, %xmm0, %edx
2169 ; AVX2-NEXT:    andl $1, %edx
2170 ; AVX2-NEXT:    shll $11, %edx
2171 ; AVX2-NEXT:    orl %ecx, %edx
2172 ; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
2173 ; AVX2-NEXT:    andl $1, %ecx
2174 ; AVX2-NEXT:    shll $12, %ecx
2175 ; AVX2-NEXT:    orl %edx, %ecx
2176 ; AVX2-NEXT:    vpextrb $13, %xmm0, %edx
2177 ; AVX2-NEXT:    andl $1, %edx
2178 ; AVX2-NEXT:    shll $13, %edx
2179 ; AVX2-NEXT:    orl %ecx, %edx
2180 ; AVX2-NEXT:    vpextrb $14, %xmm0, %ecx
2181 ; AVX2-NEXT:    andl $1, %ecx
2182 ; AVX2-NEXT:    shll $14, %ecx
2183 ; AVX2-NEXT:    orl %edx, %ecx
2184 ; AVX2-NEXT:    vpextrb $15, %xmm0, %edx
2185 ; AVX2-NEXT:    andl $1, %edx
2186 ; AVX2-NEXT:    shll $15, %edx
2187 ; AVX2-NEXT:    orl %ecx, %edx
2188 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
2189 ; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
2190 ; AVX2-NEXT:    andl $1, %ecx
2191 ; AVX2-NEXT:    shll $16, %ecx
2192 ; AVX2-NEXT:    orl %edx, %ecx
2193 ; AVX2-NEXT:    vpextrb $1, %xmm0, %edx
2194 ; AVX2-NEXT:    andl $1, %edx
2195 ; AVX2-NEXT:    shll $17, %edx
2196 ; AVX2-NEXT:    orl %ecx, %edx
2197 ; AVX2-NEXT:    vpextrb $2, %xmm0, %ecx
2198 ; AVX2-NEXT:    andl $1, %ecx
2199 ; AVX2-NEXT:    shll $18, %ecx
2200 ; AVX2-NEXT:    orl %edx, %ecx
2201 ; AVX2-NEXT:    vpextrb $3, %xmm0, %edx
2202 ; AVX2-NEXT:    andl $1, %edx
2203 ; AVX2-NEXT:    shll $19, %edx
2204 ; AVX2-NEXT:    orl %ecx, %edx
2205 ; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
2206 ; AVX2-NEXT:    andl $1, %ecx
2207 ; AVX2-NEXT:    shll $20, %ecx
2208 ; AVX2-NEXT:    orl %edx, %ecx
2209 ; AVX2-NEXT:    vpextrb $5, %xmm0, %edx
2210 ; AVX2-NEXT:    andl $1, %edx
2211 ; AVX2-NEXT:    shll $21, %edx
2212 ; AVX2-NEXT:    orl %ecx, %edx
2213 ; AVX2-NEXT:    vpextrb $6, %xmm0, %ecx
2214 ; AVX2-NEXT:    andl $1, %ecx
2215 ; AVX2-NEXT:    shll $22, %ecx
2216 ; AVX2-NEXT:    orl %edx, %ecx
2217 ; AVX2-NEXT:    vpextrb $7, %xmm0, %edx
2218 ; AVX2-NEXT:    andl $1, %edx
2219 ; AVX2-NEXT:    shll $23, %edx
2220 ; AVX2-NEXT:    orl %ecx, %edx
2221 ; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
2222 ; AVX2-NEXT:    andl $1, %ecx
2223 ; AVX2-NEXT:    shll $24, %ecx
2224 ; AVX2-NEXT:    orl %edx, %ecx
2225 ; AVX2-NEXT:    vpextrb $9, %xmm0, %edx
2226 ; AVX2-NEXT:    andl $1, %edx
2227 ; AVX2-NEXT:    shll $25, %edx
2228 ; AVX2-NEXT:    orl %ecx, %edx
2229 ; AVX2-NEXT:    vpextrb $10, %xmm0, %ecx
2230 ; AVX2-NEXT:    andl $1, %ecx
2231 ; AVX2-NEXT:    shll $26, %ecx
2232 ; AVX2-NEXT:    orl %edx, %ecx
2233 ; AVX2-NEXT:    vpextrb $11, %xmm0, %edx
2234 ; AVX2-NEXT:    andl $1, %edx
2235 ; AVX2-NEXT:    shll $27, %edx
2236 ; AVX2-NEXT:    orl %ecx, %edx
2237 ; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
2238 ; AVX2-NEXT:    andl $1, %ecx
2239 ; AVX2-NEXT:    shll $28, %ecx
2240 ; AVX2-NEXT:    orl %edx, %ecx
2241 ; AVX2-NEXT:    vpextrb $13, %xmm0, %edx
2242 ; AVX2-NEXT:    andl $1, %edx
2243 ; AVX2-NEXT:    shll $29, %edx
2244 ; AVX2-NEXT:    orl %ecx, %edx
2245 ; AVX2-NEXT:    vpextrb $14, %xmm0, %ecx
2246 ; AVX2-NEXT:    andl $1, %ecx
2247 ; AVX2-NEXT:    shll $30, %ecx
2248 ; AVX2-NEXT:    orl %edx, %ecx
2249 ; AVX2-NEXT:    vpextrb $15, %xmm0, %edx
2250 ; AVX2-NEXT:    shll $31, %edx
2251 ; AVX2-NEXT:    orl %ecx, %edx
2252 ; AVX2-NEXT:    orl %eax, %edx
2253 ; AVX2-NEXT:    movl %edx, (%rdi)
2254 ; AVX2-NEXT:    movq %rdi, %rax
2255 ; AVX2-NEXT:    vzeroupper
2256 ; AVX2-NEXT:    retq
2257 ;
2258 ; AVX512F-LABEL: test_cmp_v64i8:
2259 ; AVX512F:       # %bb.0:
2260 ; AVX512F-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
2261 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm4
2262 ; AVX512F-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm2
2263 ; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm3
2264 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
2265 ; AVX512F-NEXT:    vmovdqa %xmm4, %xmm1
2266 ; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 killed $ymm2
2267 ; AVX512F-NEXT:    vzeroupper
2268 ; AVX512F-NEXT:    retq
2269 ;
2270 ; AVX512DQ-LABEL: test_cmp_v64i8:
2271 ; AVX512DQ:       # %bb.0:
2272 ; AVX512DQ-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
2273 ; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm4
2274 ; AVX512DQ-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm2
2275 ; AVX512DQ-NEXT:    vextracti128 $1, %ymm2, %xmm3
2276 ; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
2277 ; AVX512DQ-NEXT:    vmovdqa %xmm4, %xmm1
2278 ; AVX512DQ-NEXT:    # kill: def $xmm2 killed $xmm2 killed $ymm2
2279 ; AVX512DQ-NEXT:    vzeroupper
2280 ; AVX512DQ-NEXT:    retq
2281 ;
2282 ; AVX512BW-LABEL: test_cmp_v64i8:
2283 ; AVX512BW:       # %bb.0:
2284 ; AVX512BW-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0
2285 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
2286 ; AVX512BW-NEXT:    retq
2287   %1 = icmp sgt <64 x i8> %a0, %a1
2288   ret <64 x i1> %1
2289 }
2290
2291 ;
2292 ; 1024-bit vector comparisons
2293 ;
2294
2295 define <16 x i1> @test_cmp_v16f64(<16 x double> %a0, <16 x double> %a1) nounwind {
2296 ; SSE-LABEL: test_cmp_v16f64:
2297 ; SSE:       # %bb.0:
2298 ; SSE-NEXT:    movapd %xmm0, %xmm8
2299 ; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
2300 ; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm11
2301 ; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm10
2302 ; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm12
2303 ; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm9
2304 ; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm13
2305 ; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm14
2306 ; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm15
2307 ; SSE-NEXT:    cmpltpd %xmm7, %xmm15
2308 ; SSE-NEXT:    cmpltpd %xmm6, %xmm14
2309 ; SSE-NEXT:    packssdw %xmm15, %xmm14
2310 ; SSE-NEXT:    cmpltpd %xmm5, %xmm13
2311 ; SSE-NEXT:    cmpltpd %xmm4, %xmm9
2312 ; SSE-NEXT:    packssdw %xmm13, %xmm9
2313 ; SSE-NEXT:    packssdw %xmm14, %xmm9
2314 ; SSE-NEXT:    cmpltpd %xmm3, %xmm12
2315 ; SSE-NEXT:    cmpltpd %xmm2, %xmm10
2316 ; SSE-NEXT:    packssdw %xmm12, %xmm10
2317 ; SSE-NEXT:    cmpltpd %xmm1, %xmm11
2318 ; SSE-NEXT:    cmpltpd %xmm8, %xmm0
2319 ; SSE-NEXT:    packssdw %xmm11, %xmm0
2320 ; SSE-NEXT:    packssdw %xmm10, %xmm0
2321 ; SSE-NEXT:    packsswb %xmm9, %xmm0
2322 ; SSE-NEXT:    retq
2323 ;
2324 ; AVX1-LABEL: test_cmp_v16f64:
2325 ; AVX1:       # %bb.0:
2326 ; AVX1-NEXT:    vcmpltpd %ymm3, %ymm7, %ymm3
2327 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
2328 ; AVX1-NEXT:    vpackssdw %xmm7, %xmm3, %xmm3
2329 ; AVX1-NEXT:    vcmpltpd %ymm2, %ymm6, %ymm2
2330 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
2331 ; AVX1-NEXT:    vpackssdw %xmm6, %xmm2, %xmm2
2332 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
2333 ; AVX1-NEXT:    vcmpltpd %ymm1, %ymm5, %ymm1
2334 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
2335 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
2336 ; AVX1-NEXT:    vcmpltpd %ymm0, %ymm4, %ymm0
2337 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2338 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
2339 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
2340 ; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
2341 ; AVX1-NEXT:    vzeroupper
2342 ; AVX1-NEXT:    retq
2343 ;
2344 ; AVX2-LABEL: test_cmp_v16f64:
2345 ; AVX2:       # %bb.0:
2346 ; AVX2-NEXT:    vcmpltpd %ymm3, %ymm7, %ymm3
2347 ; AVX2-NEXT:    vcmpltpd %ymm2, %ymm6, %ymm2
2348 ; AVX2-NEXT:    vpackssdw %ymm3, %ymm2, %ymm2
2349 ; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2350 ; AVX2-NEXT:    vcmpltpd %ymm1, %ymm5, %ymm1
2351 ; AVX2-NEXT:    vcmpltpd %ymm0, %ymm4, %ymm0
2352 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
2353 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2354 ; AVX2-NEXT:    vpackssdw %ymm2, %ymm0, %ymm0
2355 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2356 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2357 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2358 ; AVX2-NEXT:    vzeroupper
2359 ; AVX2-NEXT:    retq
2360 ;
2361 ; AVX512F-LABEL: test_cmp_v16f64:
2362 ; AVX512F:       # %bb.0:
2363 ; AVX512F-NEXT:    vcmpltpd %zmm0, %zmm2, %k0
2364 ; AVX512F-NEXT:    vcmpltpd %zmm1, %zmm3, %k1
2365 ; AVX512F-NEXT:    kunpckbw %k0, %k1, %k1
2366 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
2367 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
2368 ; AVX512F-NEXT:    vzeroupper
2369 ; AVX512F-NEXT:    retq
2370 ;
2371 ; AVX512DQ-LABEL: test_cmp_v16f64:
2372 ; AVX512DQ:       # %bb.0:
2373 ; AVX512DQ-NEXT:    vcmpltpd %zmm0, %zmm2, %k0
2374 ; AVX512DQ-NEXT:    vcmpltpd %zmm1, %zmm3, %k1
2375 ; AVX512DQ-NEXT:    kunpckbw %k0, %k1, %k0
2376 ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0
2377 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
2378 ; AVX512DQ-NEXT:    vzeroupper
2379 ; AVX512DQ-NEXT:    retq
2380 ;
2381 ; AVX512BW-LABEL: test_cmp_v16f64:
2382 ; AVX512BW:       # %bb.0:
2383 ; AVX512BW-NEXT:    vcmpltpd %zmm0, %zmm2, %k0
2384 ; AVX512BW-NEXT:    vcmpltpd %zmm1, %zmm3, %k1
2385 ; AVX512BW-NEXT:    kunpckbw %k0, %k1, %k0
2386 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
2387 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2388 ; AVX512BW-NEXT:    vzeroupper
2389 ; AVX512BW-NEXT:    retq
2390   %1 = fcmp ogt <16 x double> %a0, %a1
2391   ret <16 x i1> %1
2392 }
2393
2394 define <32 x i1> @test_cmp_v32f32(<32 x float> %a0, <32 x float> %a1) nounwind {
2395 ; SSE2-LABEL: test_cmp_v32f32:
2396 ; SSE2:       # %bb.0:
2397 ; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
2398 ; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
2399 ; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
2400 ; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
2401 ; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
2402 ; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
2403 ; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
2404 ; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
2405 ; SSE2-NEXT:    cmpltps %xmm3, %xmm15
2406 ; SSE2-NEXT:    movaps {{.*#+}} xmm3 = [255,255,255,255]
2407 ; SSE2-NEXT:    andps %xmm3, %xmm15
2408 ; SSE2-NEXT:    cmpltps %xmm2, %xmm14
2409 ; SSE2-NEXT:    andps %xmm3, %xmm14
2410 ; SSE2-NEXT:    packuswb %xmm15, %xmm14
2411 ; SSE2-NEXT:    cmpltps %xmm1, %xmm13
2412 ; SSE2-NEXT:    andps %xmm3, %xmm13
2413 ; SSE2-NEXT:    cmpltps %xmm0, %xmm8
2414 ; SSE2-NEXT:    andps %xmm3, %xmm8
2415 ; SSE2-NEXT:    packuswb %xmm13, %xmm8
2416 ; SSE2-NEXT:    packuswb %xmm14, %xmm8
2417 ; SSE2-NEXT:    cmpltps %xmm7, %xmm12
2418 ; SSE2-NEXT:    andps %xmm3, %xmm12
2419 ; SSE2-NEXT:    cmpltps %xmm6, %xmm10
2420 ; SSE2-NEXT:    andps %xmm3, %xmm10
2421 ; SSE2-NEXT:    packuswb %xmm12, %xmm10
2422 ; SSE2-NEXT:    cmpltps %xmm5, %xmm11
2423 ; SSE2-NEXT:    andps %xmm3, %xmm11
2424 ; SSE2-NEXT:    cmpltps %xmm4, %xmm9
2425 ; SSE2-NEXT:    andps %xmm3, %xmm9
2426 ; SSE2-NEXT:    packuswb %xmm11, %xmm9
2427 ; SSE2-NEXT:    packuswb %xmm10, %xmm9
2428 ; SSE2-NEXT:    movdqa %xmm9, -{{[0-9]+}}(%rsp)
2429 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
2430 ; SSE2-NEXT:    andl $1, %eax
2431 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2432 ; SSE2-NEXT:    andl $1, %ecx
2433 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
2434 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2435 ; SSE2-NEXT:    andl $1, %ecx
2436 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
2437 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2438 ; SSE2-NEXT:    andl $1, %ecx
2439 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
2440 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2441 ; SSE2-NEXT:    andl $1, %ecx
2442 ; SSE2-NEXT:    shll $4, %ecx
2443 ; SSE2-NEXT:    orl %eax, %ecx
2444 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
2445 ; SSE2-NEXT:    andl $1, %eax
2446 ; SSE2-NEXT:    shll $5, %eax
2447 ; SSE2-NEXT:    orl %ecx, %eax
2448 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2449 ; SSE2-NEXT:    andl $1, %ecx
2450 ; SSE2-NEXT:    shll $6, %ecx
2451 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
2452 ; SSE2-NEXT:    andl $1, %edx
2453 ; SSE2-NEXT:    shll $7, %edx
2454 ; SSE2-NEXT:    orl %ecx, %edx
2455 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2456 ; SSE2-NEXT:    andl $1, %ecx
2457 ; SSE2-NEXT:    shll $8, %ecx
2458 ; SSE2-NEXT:    orl %edx, %ecx
2459 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
2460 ; SSE2-NEXT:    andl $1, %edx
2461 ; SSE2-NEXT:    shll $9, %edx
2462 ; SSE2-NEXT:    orl %ecx, %edx
2463 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2464 ; SSE2-NEXT:    andl $1, %ecx
2465 ; SSE2-NEXT:    shll $10, %ecx
2466 ; SSE2-NEXT:    orl %edx, %ecx
2467 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
2468 ; SSE2-NEXT:    andl $1, %edx
2469 ; SSE2-NEXT:    shll $11, %edx
2470 ; SSE2-NEXT:    orl %ecx, %edx
2471 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2472 ; SSE2-NEXT:    andl $1, %ecx
2473 ; SSE2-NEXT:    shll $12, %ecx
2474 ; SSE2-NEXT:    orl %edx, %ecx
2475 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
2476 ; SSE2-NEXT:    andl $1, %edx
2477 ; SSE2-NEXT:    shll $13, %edx
2478 ; SSE2-NEXT:    orl %ecx, %edx
2479 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2480 ; SSE2-NEXT:    andl $1, %ecx
2481 ; SSE2-NEXT:    shll $14, %ecx
2482 ; SSE2-NEXT:    orl %edx, %ecx
2483 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
2484 ; SSE2-NEXT:    shll $15, %edx
2485 ; SSE2-NEXT:    orl %ecx, %edx
2486 ; SSE2-NEXT:    orl %eax, %edx
2487 ; SSE2-NEXT:    movw %dx, 2(%rdi)
2488 ; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp)
2489 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
2490 ; SSE2-NEXT:    andl $1, %eax
2491 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2492 ; SSE2-NEXT:    andl $1, %ecx
2493 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
2494 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2495 ; SSE2-NEXT:    andl $1, %ecx
2496 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
2497 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2498 ; SSE2-NEXT:    andl $1, %ecx
2499 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
2500 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2501 ; SSE2-NEXT:    andl $1, %ecx
2502 ; SSE2-NEXT:    shll $4, %ecx
2503 ; SSE2-NEXT:    orl %eax, %ecx
2504 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
2505 ; SSE2-NEXT:    andl $1, %eax
2506 ; SSE2-NEXT:    shll $5, %eax
2507 ; SSE2-NEXT:    orl %ecx, %eax
2508 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2509 ; SSE2-NEXT:    andl $1, %ecx
2510 ; SSE2-NEXT:    shll $6, %ecx
2511 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
2512 ; SSE2-NEXT:    andl $1, %edx
2513 ; SSE2-NEXT:    shll $7, %edx
2514 ; SSE2-NEXT:    orl %ecx, %edx
2515 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2516 ; SSE2-NEXT:    andl $1, %ecx
2517 ; SSE2-NEXT:    shll $8, %ecx
2518 ; SSE2-NEXT:    orl %edx, %ecx
2519 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
2520 ; SSE2-NEXT:    andl $1, %edx
2521 ; SSE2-NEXT:    shll $9, %edx
2522 ; SSE2-NEXT:    orl %ecx, %edx
2523 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2524 ; SSE2-NEXT:    andl $1, %ecx
2525 ; SSE2-NEXT:    shll $10, %ecx
2526 ; SSE2-NEXT:    orl %edx, %ecx
2527 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
2528 ; SSE2-NEXT:    andl $1, %edx
2529 ; SSE2-NEXT:    shll $11, %edx
2530 ; SSE2-NEXT:    orl %ecx, %edx
2531 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2532 ; SSE2-NEXT:    andl $1, %ecx
2533 ; SSE2-NEXT:    shll $12, %ecx
2534 ; SSE2-NEXT:    orl %edx, %ecx
2535 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
2536 ; SSE2-NEXT:    andl $1, %edx
2537 ; SSE2-NEXT:    shll $13, %edx
2538 ; SSE2-NEXT:    orl %ecx, %edx
2539 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2540 ; SSE2-NEXT:    andl $1, %ecx
2541 ; SSE2-NEXT:    shll $14, %ecx
2542 ; SSE2-NEXT:    orl %edx, %ecx
2543 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
2544 ; SSE2-NEXT:    shll $15, %edx
2545 ; SSE2-NEXT:    orl %ecx, %edx
2546 ; SSE2-NEXT:    orl %eax, %edx
2547 ; SSE2-NEXT:    movw %dx, (%rdi)
2548 ; SSE2-NEXT:    movq %rdi, %rax
2549 ; SSE2-NEXT:    retq
2550 ;
2551 ; SSE42-LABEL: test_cmp_v32f32:
2552 ; SSE42:       # %bb.0:
2553 ; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
2554 ; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
2555 ; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
2556 ; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
2557 ; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
2558 ; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
2559 ; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
2560 ; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
2561 ; SSE42-NEXT:    cmpltps %xmm3, %xmm8
2562 ; SSE42-NEXT:    cmpltps %xmm2, %xmm9
2563 ; SSE42-NEXT:    cmpltps %xmm1, %xmm10
2564 ; SSE42-NEXT:    cmpltps %xmm0, %xmm11
2565 ; SSE42-NEXT:    cmpltps %xmm7, %xmm12
2566 ; SSE42-NEXT:    cmpltps %xmm6, %xmm13
2567 ; SSE42-NEXT:    cmpltps %xmm5, %xmm14
2568 ; SSE42-NEXT:    cmpltps %xmm4, %xmm15
2569 ; SSE42-NEXT:    pextrb $4, %xmm15, %eax
2570 ; SSE42-NEXT:    andl $1, %eax
2571 ; SSE42-NEXT:    pextrb $0, %xmm15, %ecx
2572 ; SSE42-NEXT:    andl $1, %ecx
2573 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
2574 ; SSE42-NEXT:    pextrb $8, %xmm15, %ecx
2575 ; SSE42-NEXT:    andl $1, %ecx
2576 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
2577 ; SSE42-NEXT:    pextrb $12, %xmm15, %ecx
2578 ; SSE42-NEXT:    andl $1, %ecx
2579 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
2580 ; SSE42-NEXT:    pextrb $0, %xmm14, %ecx
2581 ; SSE42-NEXT:    andl $1, %ecx
2582 ; SSE42-NEXT:    shll $4, %ecx
2583 ; SSE42-NEXT:    orl %eax, %ecx
2584 ; SSE42-NEXT:    pextrb $4, %xmm14, %eax
2585 ; SSE42-NEXT:    andl $1, %eax
2586 ; SSE42-NEXT:    shll $5, %eax
2587 ; SSE42-NEXT:    orl %ecx, %eax
2588 ; SSE42-NEXT:    pextrb $8, %xmm14, %ecx
2589 ; SSE42-NEXT:    andl $1, %ecx
2590 ; SSE42-NEXT:    shll $6, %ecx
2591 ; SSE42-NEXT:    pextrb $12, %xmm14, %edx
2592 ; SSE42-NEXT:    andl $1, %edx
2593 ; SSE42-NEXT:    shll $7, %edx
2594 ; SSE42-NEXT:    orl %ecx, %edx
2595 ; SSE42-NEXT:    pextrb $0, %xmm13, %ecx
2596 ; SSE42-NEXT:    andl $1, %ecx
2597 ; SSE42-NEXT:    shll $8, %ecx
2598 ; SSE42-NEXT:    orl %edx, %ecx
2599 ; SSE42-NEXT:    pextrb $4, %xmm13, %edx
2600 ; SSE42-NEXT:    andl $1, %edx
2601 ; SSE42-NEXT:    shll $9, %edx
2602 ; SSE42-NEXT:    orl %ecx, %edx
2603 ; SSE42-NEXT:    pextrb $8, %xmm13, %ecx
2604 ; SSE42-NEXT:    andl $1, %ecx
2605 ; SSE42-NEXT:    shll $10, %ecx
2606 ; SSE42-NEXT:    orl %edx, %ecx
2607 ; SSE42-NEXT:    pextrb $12, %xmm13, %edx
2608 ; SSE42-NEXT:    andl $1, %edx
2609 ; SSE42-NEXT:    shll $11, %edx
2610 ; SSE42-NEXT:    orl %ecx, %edx
2611 ; SSE42-NEXT:    pextrb $0, %xmm12, %ecx
2612 ; SSE42-NEXT:    andl $1, %ecx
2613 ; SSE42-NEXT:    shll $12, %ecx
2614 ; SSE42-NEXT:    orl %edx, %ecx
2615 ; SSE42-NEXT:    pextrb $4, %xmm12, %edx
2616 ; SSE42-NEXT:    andl $1, %edx
2617 ; SSE42-NEXT:    shll $13, %edx
2618 ; SSE42-NEXT:    orl %ecx, %edx
2619 ; SSE42-NEXT:    pextrb $8, %xmm12, %ecx
2620 ; SSE42-NEXT:    andl $1, %ecx
2621 ; SSE42-NEXT:    shll $14, %ecx
2622 ; SSE42-NEXT:    orl %edx, %ecx
2623 ; SSE42-NEXT:    pextrb $12, %xmm12, %edx
2624 ; SSE42-NEXT:    shll $15, %edx
2625 ; SSE42-NEXT:    orl %ecx, %edx
2626 ; SSE42-NEXT:    orl %eax, %edx
2627 ; SSE42-NEXT:    movw %dx, 2(%rdi)
2628 ; SSE42-NEXT:    pextrb $4, %xmm11, %eax
2629 ; SSE42-NEXT:    andl $1, %eax
2630 ; SSE42-NEXT:    pextrb $0, %xmm11, %ecx
2631 ; SSE42-NEXT:    andl $1, %ecx
2632 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
2633 ; SSE42-NEXT:    pextrb $8, %xmm11, %ecx
2634 ; SSE42-NEXT:    andl $1, %ecx
2635 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
2636 ; SSE42-NEXT:    pextrb $12, %xmm11, %ecx
2637 ; SSE42-NEXT:    andl $1, %ecx
2638 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
2639 ; SSE42-NEXT:    pextrb $0, %xmm10, %ecx
2640 ; SSE42-NEXT:    andl $1, %ecx
2641 ; SSE42-NEXT:    shll $4, %ecx
2642 ; SSE42-NEXT:    orl %eax, %ecx
2643 ; SSE42-NEXT:    pextrb $4, %xmm10, %eax
2644 ; SSE42-NEXT:    andl $1, %eax
2645 ; SSE42-NEXT:    shll $5, %eax
2646 ; SSE42-NEXT:    orl %ecx, %eax
2647 ; SSE42-NEXT:    pextrb $8, %xmm10, %ecx
2648 ; SSE42-NEXT:    andl $1, %ecx
2649 ; SSE42-NEXT:    shll $6, %ecx
2650 ; SSE42-NEXT:    pextrb $12, %xmm10, %edx
2651 ; SSE42-NEXT:    andl $1, %edx
2652 ; SSE42-NEXT:    shll $7, %edx
2653 ; SSE42-NEXT:    orl %ecx, %edx
2654 ; SSE42-NEXT:    pextrb $0, %xmm9, %ecx
2655 ; SSE42-NEXT:    andl $1, %ecx
2656 ; SSE42-NEXT:    shll $8, %ecx
2657 ; SSE42-NEXT:    orl %edx, %ecx
2658 ; SSE42-NEXT:    pextrb $4, %xmm9, %edx
2659 ; SSE42-NEXT:    andl $1, %edx
2660 ; SSE42-NEXT:    shll $9, %edx
2661 ; SSE42-NEXT:    orl %ecx, %edx
2662 ; SSE42-NEXT:    pextrb $8, %xmm9, %ecx
2663 ; SSE42-NEXT:    andl $1, %ecx
2664 ; SSE42-NEXT:    shll $10, %ecx
2665 ; SSE42-NEXT:    orl %edx, %ecx
2666 ; SSE42-NEXT:    pextrb $12, %xmm9, %edx
2667 ; SSE42-NEXT:    andl $1, %edx
2668 ; SSE42-NEXT:    shll $11, %edx
2669 ; SSE42-NEXT:    orl %ecx, %edx
2670 ; SSE42-NEXT:    pextrb $0, %xmm8, %ecx
2671 ; SSE42-NEXT:    andl $1, %ecx
2672 ; SSE42-NEXT:    shll $12, %ecx
2673 ; SSE42-NEXT:    orl %edx, %ecx
2674 ; SSE42-NEXT:    pextrb $4, %xmm8, %edx
2675 ; SSE42-NEXT:    andl $1, %edx
2676 ; SSE42-NEXT:    shll $13, %edx
2677 ; SSE42-NEXT:    orl %ecx, %edx
2678 ; SSE42-NEXT:    pextrb $8, %xmm8, %ecx
2679 ; SSE42-NEXT:    andl $1, %ecx
2680 ; SSE42-NEXT:    shll $14, %ecx
2681 ; SSE42-NEXT:    orl %edx, %ecx
2682 ; SSE42-NEXT:    pextrb $12, %xmm8, %edx
2683 ; SSE42-NEXT:    shll $15, %edx
2684 ; SSE42-NEXT:    orl %ecx, %edx
2685 ; SSE42-NEXT:    orl %eax, %edx
2686 ; SSE42-NEXT:    movw %dx, (%rdi)
2687 ; SSE42-NEXT:    movq %rdi, %rax
2688 ; SSE42-NEXT:    retq
2689 ;
2690 ; AVX1-LABEL: test_cmp_v32f32:
2691 ; AVX1:       # %bb.0:
2692 ; AVX1-NEXT:    vcmpltps %ymm3, %ymm7, %ymm3
2693 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
2694 ; AVX1-NEXT:    vpackssdw %xmm7, %xmm3, %xmm3
2695 ; AVX1-NEXT:    vcmpltps %ymm2, %ymm6, %ymm2
2696 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
2697 ; AVX1-NEXT:    vpackssdw %xmm6, %xmm2, %xmm2
2698 ; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
2699 ; AVX1-NEXT:    vcmpltps %ymm1, %ymm5, %ymm1
2700 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
2701 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
2702 ; AVX1-NEXT:    vcmpltps %ymm0, %ymm4, %ymm0
2703 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2704 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
2705 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2706 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2707 ; AVX1-NEXT:    retq
2708 ;
2709 ; AVX2-LABEL: test_cmp_v32f32:
2710 ; AVX2:       # %bb.0:
2711 ; AVX2-NEXT:    vcmpltps %ymm3, %ymm7, %ymm3
2712 ; AVX2-NEXT:    vcmpltps %ymm2, %ymm6, %ymm2
2713 ; AVX2-NEXT:    vpackssdw %ymm3, %ymm2, %ymm2
2714 ; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2715 ; AVX2-NEXT:    vcmpltps %ymm1, %ymm5, %ymm1
2716 ; AVX2-NEXT:    vcmpltps %ymm0, %ymm4, %ymm0
2717 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
2718 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2719 ; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
2720 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2721 ; AVX2-NEXT:    retq
2722 ;
2723 ; AVX512F-LABEL: test_cmp_v32f32:
2724 ; AVX512F:       # %bb.0:
2725 ; AVX512F-NEXT:    vcmpltps %zmm1, %zmm3, %k1
2726 ; AVX512F-NEXT:    vcmpltps %zmm0, %zmm2, %k2
2727 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
2728 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
2729 ; AVX512F-NEXT:    vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}
2730 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
2731 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
2732 ; AVX512F-NEXT:    retq
2733 ;
2734 ; AVX512DQ-LABEL: test_cmp_v32f32:
2735 ; AVX512DQ:       # %bb.0:
2736 ; AVX512DQ-NEXT:    vcmpltps %zmm1, %zmm3, %k0
2737 ; AVX512DQ-NEXT:    vcmpltps %zmm0, %zmm2, %k1
2738 ; AVX512DQ-NEXT:    vpmovm2d %k1, %zmm0
2739 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
2740 ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm1
2741 ; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm1
2742 ; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
2743 ; AVX512DQ-NEXT:    retq
2744 ;
2745 ; AVX512BW-LABEL: test_cmp_v32f32:
2746 ; AVX512BW:       # %bb.0:
2747 ; AVX512BW-NEXT:    vcmpltps %zmm0, %zmm2, %k0
2748 ; AVX512BW-NEXT:    vcmpltps %zmm1, %zmm3, %k1
2749 ; AVX512BW-NEXT:    kunpckwd %k0, %k1, %k0
2750 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
2751 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
2752 ; AVX512BW-NEXT:    retq
2753   %1 = fcmp ogt <32 x float> %a0, %a1
2754   ret <32 x i1> %1
2755 }
2756
2757 define <16 x i1> @test_cmp_v16i64(<16 x i64> %a0, <16 x i64> %a1) nounwind {
2758 ; SSE2-LABEL: test_cmp_v16i64:
2759 ; SSE2:       # %bb.0:
2760 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
2761 ; SSE2-NEXT:    pxor %xmm8, %xmm7
2762 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
2763 ; SSE2-NEXT:    pxor %xmm8, %xmm9
2764 ; SSE2-NEXT:    movdqa %xmm7, %xmm10
2765 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
2766 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
2767 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm9
2768 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
2769 ; SSE2-NEXT:    pand %xmm11, %xmm7
2770 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
2771 ; SSE2-NEXT:    por %xmm7, %xmm9
2772 ; SSE2-NEXT:    pxor %xmm8, %xmm6
2773 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
2774 ; SSE2-NEXT:    pxor %xmm8, %xmm7
2775 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
2776 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm10
2777 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
2778 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
2779 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
2780 ; SSE2-NEXT:    pand %xmm11, %xmm7
2781 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
2782 ; SSE2-NEXT:    por %xmm7, %xmm10
2783 ; SSE2-NEXT:    packssdw %xmm9, %xmm10
2784 ; SSE2-NEXT:    pxor %xmm8, %xmm5
2785 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
2786 ; SSE2-NEXT:    pxor %xmm8, %xmm7
2787 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
2788 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
2789 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2]
2790 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm7
2791 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
2792 ; SSE2-NEXT:    pand %xmm9, %xmm5
2793 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2794 ; SSE2-NEXT:    por %xmm5, %xmm6
2795 ; SSE2-NEXT:    pxor %xmm8, %xmm4
2796 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
2797 ; SSE2-NEXT:    pxor %xmm8, %xmm5
2798 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
2799 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
2800 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,0,2,2]
2801 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
2802 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2803 ; SSE2-NEXT:    pand %xmm9, %xmm5
2804 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
2805 ; SSE2-NEXT:    por %xmm5, %xmm4
2806 ; SSE2-NEXT:    packssdw %xmm6, %xmm4
2807 ; SSE2-NEXT:    packssdw %xmm10, %xmm4
2808 ; SSE2-NEXT:    pxor %xmm8, %xmm3
2809 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
2810 ; SSE2-NEXT:    pxor %xmm8, %xmm5
2811 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
2812 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2813 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2814 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm5
2815 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
2816 ; SSE2-NEXT:    pand %xmm7, %xmm3
2817 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
2818 ; SSE2-NEXT:    por %xmm3, %xmm5
2819 ; SSE2-NEXT:    pxor %xmm8, %xmm2
2820 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
2821 ; SSE2-NEXT:    pxor %xmm8, %xmm3
2822 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
2823 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
2824 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2825 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
2826 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2827 ; SSE2-NEXT:    pand %xmm7, %xmm3
2828 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
2829 ; SSE2-NEXT:    por %xmm3, %xmm2
2830 ; SSE2-NEXT:    packssdw %xmm5, %xmm2
2831 ; SSE2-NEXT:    pxor %xmm8, %xmm1
2832 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
2833 ; SSE2-NEXT:    pxor %xmm8, %xmm3
2834 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
2835 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
2836 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
2837 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
2838 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
2839 ; SSE2-NEXT:    pand %xmm6, %xmm1
2840 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
2841 ; SSE2-NEXT:    por %xmm1, %xmm3
2842 ; SSE2-NEXT:    pxor %xmm8, %xmm0
2843 ; SSE2-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm8
2844 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2845 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm1
2846 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
2847 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm8
2848 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[1,1,3,3]
2849 ; SSE2-NEXT:    pand %xmm5, %xmm6
2850 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
2851 ; SSE2-NEXT:    por %xmm6, %xmm0
2852 ; SSE2-NEXT:    packssdw %xmm3, %xmm0
2853 ; SSE2-NEXT:    packssdw %xmm2, %xmm0
2854 ; SSE2-NEXT:    packsswb %xmm4, %xmm0
2855 ; SSE2-NEXT:    retq
2856 ;
2857 ; SSE42-LABEL: test_cmp_v16i64:
2858 ; SSE42:       # %bb.0:
2859 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm7
2860 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm6
2861 ; SSE42-NEXT:    packssdw %xmm7, %xmm6
2862 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm5
2863 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm4
2864 ; SSE42-NEXT:    packssdw %xmm5, %xmm4
2865 ; SSE42-NEXT:    packssdw %xmm6, %xmm4
2866 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm3
2867 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm2
2868 ; SSE42-NEXT:    packssdw %xmm3, %xmm2
2869 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
2870 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm0
2871 ; SSE42-NEXT:    packssdw %xmm1, %xmm0
2872 ; SSE42-NEXT:    packssdw %xmm2, %xmm0
2873 ; SSE42-NEXT:    packsswb %xmm4, %xmm0
2874 ; SSE42-NEXT:    retq
2875 ;
2876 ; AVX1-LABEL: test_cmp_v16i64:
2877 ; AVX1:       # %bb.0:
2878 ; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm8
2879 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm9
2880 ; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm9, %xmm8
2881 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm3, %xmm3
2882 ; AVX1-NEXT:    vpackssdw %xmm8, %xmm3, %xmm8
2883 ; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
2884 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
2885 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm3, %xmm3
2886 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm2, %xmm2
2887 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
2888 ; AVX1-NEXT:    vpackssdw %xmm8, %xmm2, %xmm2
2889 ; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
2890 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
2891 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm3
2892 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm1, %xmm1
2893 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
2894 ; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm3
2895 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
2896 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3
2897 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm0
2898 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
2899 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
2900 ; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
2901 ; AVX1-NEXT:    vzeroupper
2902 ; AVX1-NEXT:    retq
2903 ;
2904 ; AVX2-LABEL: test_cmp_v16i64:
2905 ; AVX2:       # %bb.0:
2906 ; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm3, %ymm3
2907 ; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm2, %ymm2
2908 ; AVX2-NEXT:    vpackssdw %ymm3, %ymm2, %ymm2
2909 ; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2910 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm1, %ymm1
2911 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm0
2912 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
2913 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2914 ; AVX2-NEXT:    vpackssdw %ymm2, %ymm0, %ymm0
2915 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2916 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2917 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2918 ; AVX2-NEXT:    vzeroupper
2919 ; AVX2-NEXT:    retq
2920 ;
2921 ; AVX512F-LABEL: test_cmp_v16i64:
2922 ; AVX512F:       # %bb.0:
2923 ; AVX512F-NEXT:    vpcmpgtq %zmm2, %zmm0, %k0
2924 ; AVX512F-NEXT:    vpcmpgtq %zmm3, %zmm1, %k1
2925 ; AVX512F-NEXT:    kunpckbw %k0, %k1, %k1
2926 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
2927 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
2928 ; AVX512F-NEXT:    vzeroupper
2929 ; AVX512F-NEXT:    retq
2930 ;
2931 ; AVX512DQ-LABEL: test_cmp_v16i64:
2932 ; AVX512DQ:       # %bb.0:
2933 ; AVX512DQ-NEXT:    vpcmpgtq %zmm2, %zmm0, %k0
2934 ; AVX512DQ-NEXT:    vpcmpgtq %zmm3, %zmm1, %k1
2935 ; AVX512DQ-NEXT:    kunpckbw %k0, %k1, %k0
2936 ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0
2937 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
2938 ; AVX512DQ-NEXT:    vzeroupper
2939 ; AVX512DQ-NEXT:    retq
2940 ;
2941 ; AVX512BW-LABEL: test_cmp_v16i64:
2942 ; AVX512BW:       # %bb.0:
2943 ; AVX512BW-NEXT:    vpcmpgtq %zmm2, %zmm0, %k0
2944 ; AVX512BW-NEXT:    vpcmpgtq %zmm3, %zmm1, %k1
2945 ; AVX512BW-NEXT:    kunpckbw %k0, %k1, %k0
2946 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
2947 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2948 ; AVX512BW-NEXT:    vzeroupper
2949 ; AVX512BW-NEXT:    retq
2950   %1 = icmp sgt <16 x i64> %a0, %a1
2951   ret <16 x i1> %1
2952 }
2953
2954 define <32 x i1> @test_cmp_v32i32(<32 x i32> %a0, <32 x i32> %a1) nounwind {
2955 ; SSE2-LABEL: test_cmp_v32i32:
2956 ; SSE2:       # %bb.0:
2957 ; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
2958 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [255,255,255,255]
2959 ; SSE2-NEXT:    pand %xmm8, %xmm3
2960 ; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
2961 ; SSE2-NEXT:    pand %xmm8, %xmm2
2962 ; SSE2-NEXT:    packuswb %xmm3, %xmm2
2963 ; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
2964 ; SSE2-NEXT:    pand %xmm8, %xmm1
2965 ; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
2966 ; SSE2-NEXT:    pand %xmm8, %xmm0
2967 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
2968 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
2969 ; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
2970 ; SSE2-NEXT:    pand %xmm8, %xmm7
2971 ; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
2972 ; SSE2-NEXT:    pand %xmm8, %xmm6
2973 ; SSE2-NEXT:    packuswb %xmm7, %xmm6
2974 ; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
2975 ; SSE2-NEXT:    pand %xmm8, %xmm5
2976 ; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
2977 ; SSE2-NEXT:    pand %xmm8, %xmm4
2978 ; SSE2-NEXT:    packuswb %xmm5, %xmm4
2979 ; SSE2-NEXT:    packuswb %xmm6, %xmm4
2980 ; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
2981 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
2982 ; SSE2-NEXT:    andl $1, %eax
2983 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2984 ; SSE2-NEXT:    andl $1, %ecx
2985 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
2986 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2987 ; SSE2-NEXT:    andl $1, %ecx
2988 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
2989 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2990 ; SSE2-NEXT:    andl $1, %ecx
2991 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
2992 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
2993 ; SSE2-NEXT:    andl $1, %ecx
2994 ; SSE2-NEXT:    shll $4, %ecx
2995 ; SSE2-NEXT:    orl %eax, %ecx
2996 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
2997 ; SSE2-NEXT:    andl $1, %eax
2998 ; SSE2-NEXT:    shll $5, %eax
2999 ; SSE2-NEXT:    orl %ecx, %eax
3000 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3001 ; SSE2-NEXT:    andl $1, %ecx
3002 ; SSE2-NEXT:    shll $6, %ecx
3003 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3004 ; SSE2-NEXT:    andl $1, %edx
3005 ; SSE2-NEXT:    shll $7, %edx
3006 ; SSE2-NEXT:    orl %ecx, %edx
3007 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3008 ; SSE2-NEXT:    andl $1, %ecx
3009 ; SSE2-NEXT:    shll $8, %ecx
3010 ; SSE2-NEXT:    orl %edx, %ecx
3011 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3012 ; SSE2-NEXT:    andl $1, %edx
3013 ; SSE2-NEXT:    shll $9, %edx
3014 ; SSE2-NEXT:    orl %ecx, %edx
3015 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3016 ; SSE2-NEXT:    andl $1, %ecx
3017 ; SSE2-NEXT:    shll $10, %ecx
3018 ; SSE2-NEXT:    orl %edx, %ecx
3019 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3020 ; SSE2-NEXT:    andl $1, %edx
3021 ; SSE2-NEXT:    shll $11, %edx
3022 ; SSE2-NEXT:    orl %ecx, %edx
3023 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3024 ; SSE2-NEXT:    andl $1, %ecx
3025 ; SSE2-NEXT:    shll $12, %ecx
3026 ; SSE2-NEXT:    orl %edx, %ecx
3027 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3028 ; SSE2-NEXT:    andl $1, %edx
3029 ; SSE2-NEXT:    shll $13, %edx
3030 ; SSE2-NEXT:    orl %ecx, %edx
3031 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3032 ; SSE2-NEXT:    andl $1, %ecx
3033 ; SSE2-NEXT:    shll $14, %ecx
3034 ; SSE2-NEXT:    orl %edx, %ecx
3035 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3036 ; SSE2-NEXT:    shll $15, %edx
3037 ; SSE2-NEXT:    orl %ecx, %edx
3038 ; SSE2-NEXT:    orl %eax, %edx
3039 ; SSE2-NEXT:    movw %dx, 2(%rdi)
3040 ; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
3041 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3042 ; SSE2-NEXT:    andl $1, %eax
3043 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3044 ; SSE2-NEXT:    andl $1, %ecx
3045 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
3046 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3047 ; SSE2-NEXT:    andl $1, %ecx
3048 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
3049 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3050 ; SSE2-NEXT:    andl $1, %ecx
3051 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
3052 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3053 ; SSE2-NEXT:    andl $1, %ecx
3054 ; SSE2-NEXT:    shll $4, %ecx
3055 ; SSE2-NEXT:    orl %eax, %ecx
3056 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3057 ; SSE2-NEXT:    andl $1, %eax
3058 ; SSE2-NEXT:    shll $5, %eax
3059 ; SSE2-NEXT:    orl %ecx, %eax
3060 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3061 ; SSE2-NEXT:    andl $1, %ecx
3062 ; SSE2-NEXT:    shll $6, %ecx
3063 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3064 ; SSE2-NEXT:    andl $1, %edx
3065 ; SSE2-NEXT:    shll $7, %edx
3066 ; SSE2-NEXT:    orl %ecx, %edx
3067 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3068 ; SSE2-NEXT:    andl $1, %ecx
3069 ; SSE2-NEXT:    shll $8, %ecx
3070 ; SSE2-NEXT:    orl %edx, %ecx
3071 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3072 ; SSE2-NEXT:    andl $1, %edx
3073 ; SSE2-NEXT:    shll $9, %edx
3074 ; SSE2-NEXT:    orl %ecx, %edx
3075 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3076 ; SSE2-NEXT:    andl $1, %ecx
3077 ; SSE2-NEXT:    shll $10, %ecx
3078 ; SSE2-NEXT:    orl %edx, %ecx
3079 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3080 ; SSE2-NEXT:    andl $1, %edx
3081 ; SSE2-NEXT:    shll $11, %edx
3082 ; SSE2-NEXT:    orl %ecx, %edx
3083 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3084 ; SSE2-NEXT:    andl $1, %ecx
3085 ; SSE2-NEXT:    shll $12, %ecx
3086 ; SSE2-NEXT:    orl %edx, %ecx
3087 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3088 ; SSE2-NEXT:    andl $1, %edx
3089 ; SSE2-NEXT:    shll $13, %edx
3090 ; SSE2-NEXT:    orl %ecx, %edx
3091 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3092 ; SSE2-NEXT:    andl $1, %ecx
3093 ; SSE2-NEXT:    shll $14, %ecx
3094 ; SSE2-NEXT:    orl %edx, %ecx
3095 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3096 ; SSE2-NEXT:    shll $15, %edx
3097 ; SSE2-NEXT:    orl %ecx, %edx
3098 ; SSE2-NEXT:    orl %eax, %edx
3099 ; SSE2-NEXT:    movw %dx, (%rdi)
3100 ; SSE2-NEXT:    movq %rdi, %rax
3101 ; SSE2-NEXT:    retq
3102 ;
3103 ; SSE42-LABEL: test_cmp_v32i32:
3104 ; SSE42:       # %bb.0:
3105 ; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
3106 ; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
3107 ; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
3108 ; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
3109 ; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
3110 ; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
3111 ; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
3112 ; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
3113 ; SSE42-NEXT:    pextrb $4, %xmm4, %eax
3114 ; SSE42-NEXT:    andl $1, %eax
3115 ; SSE42-NEXT:    pextrb $0, %xmm4, %ecx
3116 ; SSE42-NEXT:    andl $1, %ecx
3117 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
3118 ; SSE42-NEXT:    pextrb $8, %xmm4, %ecx
3119 ; SSE42-NEXT:    andl $1, %ecx
3120 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
3121 ; SSE42-NEXT:    pextrb $12, %xmm4, %ecx
3122 ; SSE42-NEXT:    andl $1, %ecx
3123 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
3124 ; SSE42-NEXT:    pextrb $0, %xmm5, %ecx
3125 ; SSE42-NEXT:    andl $1, %ecx
3126 ; SSE42-NEXT:    shll $4, %ecx
3127 ; SSE42-NEXT:    orl %eax, %ecx
3128 ; SSE42-NEXT:    pextrb $4, %xmm5, %eax
3129 ; SSE42-NEXT:    andl $1, %eax
3130 ; SSE42-NEXT:    shll $5, %eax
3131 ; SSE42-NEXT:    orl %ecx, %eax
3132 ; SSE42-NEXT:    pextrb $8, %xmm5, %ecx
3133 ; SSE42-NEXT:    andl $1, %ecx
3134 ; SSE42-NEXT:    shll $6, %ecx
3135 ; SSE42-NEXT:    pextrb $12, %xmm5, %edx
3136 ; SSE42-NEXT:    andl $1, %edx
3137 ; SSE42-NEXT:    shll $7, %edx
3138 ; SSE42-NEXT:    orl %ecx, %edx
3139 ; SSE42-NEXT:    pextrb $0, %xmm6, %ecx
3140 ; SSE42-NEXT:    andl $1, %ecx
3141 ; SSE42-NEXT:    shll $8, %ecx
3142 ; SSE42-NEXT:    orl %edx, %ecx
3143 ; SSE42-NEXT:    pextrb $4, %xmm6, %edx
3144 ; SSE42-NEXT:    andl $1, %edx
3145 ; SSE42-NEXT:    shll $9, %edx
3146 ; SSE42-NEXT:    orl %ecx, %edx
3147 ; SSE42-NEXT:    pextrb $8, %xmm6, %ecx
3148 ; SSE42-NEXT:    andl $1, %ecx
3149 ; SSE42-NEXT:    shll $10, %ecx
3150 ; SSE42-NEXT:    orl %edx, %ecx
3151 ; SSE42-NEXT:    pextrb $12, %xmm6, %edx
3152 ; SSE42-NEXT:    andl $1, %edx
3153 ; SSE42-NEXT:    shll $11, %edx
3154 ; SSE42-NEXT:    orl %ecx, %edx
3155 ; SSE42-NEXT:    pextrb $0, %xmm7, %ecx
3156 ; SSE42-NEXT:    andl $1, %ecx
3157 ; SSE42-NEXT:    shll $12, %ecx
3158 ; SSE42-NEXT:    orl %edx, %ecx
3159 ; SSE42-NEXT:    pextrb $4, %xmm7, %edx
3160 ; SSE42-NEXT:    andl $1, %edx
3161 ; SSE42-NEXT:    shll $13, %edx
3162 ; SSE42-NEXT:    orl %ecx, %edx
3163 ; SSE42-NEXT:    pextrb $8, %xmm7, %ecx
3164 ; SSE42-NEXT:    andl $1, %ecx
3165 ; SSE42-NEXT:    shll $14, %ecx
3166 ; SSE42-NEXT:    orl %edx, %ecx
3167 ; SSE42-NEXT:    pextrb $12, %xmm7, %edx
3168 ; SSE42-NEXT:    shll $15, %edx
3169 ; SSE42-NEXT:    orl %ecx, %edx
3170 ; SSE42-NEXT:    orl %eax, %edx
3171 ; SSE42-NEXT:    movw %dx, 2(%rdi)
3172 ; SSE42-NEXT:    pextrb $4, %xmm0, %eax
3173 ; SSE42-NEXT:    andl $1, %eax
3174 ; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
3175 ; SSE42-NEXT:    andl $1, %ecx
3176 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
3177 ; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
3178 ; SSE42-NEXT:    andl $1, %ecx
3179 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
3180 ; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
3181 ; SSE42-NEXT:    andl $1, %ecx
3182 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
3183 ; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
3184 ; SSE42-NEXT:    andl $1, %ecx
3185 ; SSE42-NEXT:    shll $4, %ecx
3186 ; SSE42-NEXT:    orl %eax, %ecx
3187 ; SSE42-NEXT:    pextrb $4, %xmm1, %eax
3188 ; SSE42-NEXT:    andl $1, %eax
3189 ; SSE42-NEXT:    shll $5, %eax
3190 ; SSE42-NEXT:    orl %ecx, %eax
3191 ; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
3192 ; SSE42-NEXT:    andl $1, %ecx
3193 ; SSE42-NEXT:    shll $6, %ecx
3194 ; SSE42-NEXT:    pextrb $12, %xmm1, %edx
3195 ; SSE42-NEXT:    andl $1, %edx
3196 ; SSE42-NEXT:    shll $7, %edx
3197 ; SSE42-NEXT:    orl %ecx, %edx
3198 ; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
3199 ; SSE42-NEXT:    andl $1, %ecx
3200 ; SSE42-NEXT:    shll $8, %ecx
3201 ; SSE42-NEXT:    orl %edx, %ecx
3202 ; SSE42-NEXT:    pextrb $4, %xmm2, %edx
3203 ; SSE42-NEXT:    andl $1, %edx
3204 ; SSE42-NEXT:    shll $9, %edx
3205 ; SSE42-NEXT:    orl %ecx, %edx
3206 ; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
3207 ; SSE42-NEXT:    andl $1, %ecx
3208 ; SSE42-NEXT:    shll $10, %ecx
3209 ; SSE42-NEXT:    orl %edx, %ecx
3210 ; SSE42-NEXT:    pextrb $12, %xmm2, %edx
3211 ; SSE42-NEXT:    andl $1, %edx
3212 ; SSE42-NEXT:    shll $11, %edx
3213 ; SSE42-NEXT:    orl %ecx, %edx
3214 ; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
3215 ; SSE42-NEXT:    andl $1, %ecx
3216 ; SSE42-NEXT:    shll $12, %ecx
3217 ; SSE42-NEXT:    orl %edx, %ecx
3218 ; SSE42-NEXT:    pextrb $4, %xmm3, %edx
3219 ; SSE42-NEXT:    andl $1, %edx
3220 ; SSE42-NEXT:    shll $13, %edx
3221 ; SSE42-NEXT:    orl %ecx, %edx
3222 ; SSE42-NEXT:    pextrb $8, %xmm3, %ecx
3223 ; SSE42-NEXT:    andl $1, %ecx
3224 ; SSE42-NEXT:    shll $14, %ecx
3225 ; SSE42-NEXT:    orl %edx, %ecx
3226 ; SSE42-NEXT:    pextrb $12, %xmm3, %edx
3227 ; SSE42-NEXT:    shll $15, %edx
3228 ; SSE42-NEXT:    orl %ecx, %edx
3229 ; SSE42-NEXT:    orl %eax, %edx
3230 ; SSE42-NEXT:    movw %dx, (%rdi)
3231 ; SSE42-NEXT:    movq %rdi, %rax
3232 ; SSE42-NEXT:    retq
3233 ;
3234 ; AVX1-LABEL: test_cmp_v32i32:
3235 ; AVX1:       # %bb.0:
3236 ; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm8
3237 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm9
3238 ; AVX1-NEXT:    vpcmpgtd %xmm8, %xmm9, %xmm8
3239 ; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm3, %xmm3
3240 ; AVX1-NEXT:    vpackssdw %xmm8, %xmm3, %xmm8
3241 ; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
3242 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
3243 ; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm3, %xmm3
3244 ; AVX1-NEXT:    vpcmpgtd %xmm6, %xmm2, %xmm2
3245 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
3246 ; AVX1-NEXT:    vpacksswb %xmm8, %xmm2, %xmm2
3247 ; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
3248 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
3249 ; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm6, %xmm3
3250 ; AVX1-NEXT:    vpcmpgtd %xmm5, %xmm1, %xmm1
3251 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
3252 ; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm3
3253 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3254 ; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm5, %xmm3
3255 ; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm0, %xmm0
3256 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
3257 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
3258 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3259 ; AVX1-NEXT:    retq
3260 ;
3261 ; AVX2-LABEL: test_cmp_v32i32:
3262 ; AVX2:       # %bb.0:
3263 ; AVX2-NEXT:    vpcmpgtd %ymm7, %ymm3, %ymm3
3264 ; AVX2-NEXT:    vpcmpgtd %ymm6, %ymm2, %ymm2
3265 ; AVX2-NEXT:    vpackssdw %ymm3, %ymm2, %ymm2
3266 ; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
3267 ; AVX2-NEXT:    vpcmpgtd %ymm5, %ymm1, %ymm1
3268 ; AVX2-NEXT:    vpcmpgtd %ymm4, %ymm0, %ymm0
3269 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
3270 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3271 ; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
3272 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3273 ; AVX2-NEXT:    retq
3274 ;
3275 ; AVX512F-LABEL: test_cmp_v32i32:
3276 ; AVX512F:       # %bb.0:
3277 ; AVX512F-NEXT:    vpcmpgtd %zmm3, %zmm1, %k1
3278 ; AVX512F-NEXT:    vpcmpgtd %zmm2, %zmm0, %k2
3279 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
3280 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
3281 ; AVX512F-NEXT:    vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}
3282 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
3283 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3284 ; AVX512F-NEXT:    retq
3285 ;
3286 ; AVX512DQ-LABEL: test_cmp_v32i32:
3287 ; AVX512DQ:       # %bb.0:
3288 ; AVX512DQ-NEXT:    vpcmpgtd %zmm3, %zmm1, %k0
3289 ; AVX512DQ-NEXT:    vpcmpgtd %zmm2, %zmm0, %k1
3290 ; AVX512DQ-NEXT:    vpmovm2d %k1, %zmm0
3291 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
3292 ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm1
3293 ; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm1
3294 ; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3295 ; AVX512DQ-NEXT:    retq
3296 ;
3297 ; AVX512BW-LABEL: test_cmp_v32i32:
3298 ; AVX512BW:       # %bb.0:
3299 ; AVX512BW-NEXT:    vpcmpgtd %zmm2, %zmm0, %k0
3300 ; AVX512BW-NEXT:    vpcmpgtd %zmm3, %zmm1, %k1
3301 ; AVX512BW-NEXT:    kunpckwd %k0, %k1, %k0
3302 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
3303 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
3304 ; AVX512BW-NEXT:    retq
3305   %1 = icmp sgt <32 x i32> %a0, %a1
3306   ret <32 x i1> %1
3307 }
3308
3309 define <64 x i1> @test_cmp_v64i16(<64 x i16> %a0, <64 x i16> %a1) nounwind {
3310 ; SSE2-LABEL: test_cmp_v64i16:
3311 ; SSE2:       # %bb.0:
3312 ; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
3313 ; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
3314 ; SSE2-NEXT:    packsswb %xmm1, %xmm0
3315 ; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
3316 ; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
3317 ; SSE2-NEXT:    packsswb %xmm3, %xmm2
3318 ; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
3319 ; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
3320 ; SSE2-NEXT:    packsswb %xmm5, %xmm4
3321 ; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
3322 ; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
3323 ; SSE2-NEXT:    packsswb %xmm7, %xmm6
3324 ; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
3325 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3326 ; SSE2-NEXT:    andl $1, %eax
3327 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3328 ; SSE2-NEXT:    andl $1, %ecx
3329 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
3330 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3331 ; SSE2-NEXT:    andl $1, %ecx
3332 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
3333 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3334 ; SSE2-NEXT:    andl $1, %ecx
3335 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
3336 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3337 ; SSE2-NEXT:    andl $1, %ecx
3338 ; SSE2-NEXT:    shll $4, %ecx
3339 ; SSE2-NEXT:    orl %eax, %ecx
3340 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3341 ; SSE2-NEXT:    andl $1, %eax
3342 ; SSE2-NEXT:    shll $5, %eax
3343 ; SSE2-NEXT:    orl %ecx, %eax
3344 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3345 ; SSE2-NEXT:    andl $1, %ecx
3346 ; SSE2-NEXT:    shll $6, %ecx
3347 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3348 ; SSE2-NEXT:    andl $1, %edx
3349 ; SSE2-NEXT:    shll $7, %edx
3350 ; SSE2-NEXT:    orl %ecx, %edx
3351 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3352 ; SSE2-NEXT:    andl $1, %ecx
3353 ; SSE2-NEXT:    shll $8, %ecx
3354 ; SSE2-NEXT:    orl %edx, %ecx
3355 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3356 ; SSE2-NEXT:    andl $1, %edx
3357 ; SSE2-NEXT:    shll $9, %edx
3358 ; SSE2-NEXT:    orl %ecx, %edx
3359 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3360 ; SSE2-NEXT:    andl $1, %ecx
3361 ; SSE2-NEXT:    shll $10, %ecx
3362 ; SSE2-NEXT:    orl %edx, %ecx
3363 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3364 ; SSE2-NEXT:    andl $1, %edx
3365 ; SSE2-NEXT:    shll $11, %edx
3366 ; SSE2-NEXT:    orl %ecx, %edx
3367 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3368 ; SSE2-NEXT:    andl $1, %ecx
3369 ; SSE2-NEXT:    shll $12, %ecx
3370 ; SSE2-NEXT:    orl %edx, %ecx
3371 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3372 ; SSE2-NEXT:    andl $1, %edx
3373 ; SSE2-NEXT:    shll $13, %edx
3374 ; SSE2-NEXT:    orl %ecx, %edx
3375 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3376 ; SSE2-NEXT:    andl $1, %ecx
3377 ; SSE2-NEXT:    shll $14, %ecx
3378 ; SSE2-NEXT:    orl %edx, %ecx
3379 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3380 ; SSE2-NEXT:    shll $15, %edx
3381 ; SSE2-NEXT:    orl %ecx, %edx
3382 ; SSE2-NEXT:    orl %eax, %edx
3383 ; SSE2-NEXT:    movw %dx, 6(%rdi)
3384 ; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
3385 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3386 ; SSE2-NEXT:    andl $1, %eax
3387 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3388 ; SSE2-NEXT:    andl $1, %ecx
3389 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
3390 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3391 ; SSE2-NEXT:    andl $1, %ecx
3392 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
3393 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3394 ; SSE2-NEXT:    andl $1, %ecx
3395 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
3396 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3397 ; SSE2-NEXT:    andl $1, %ecx
3398 ; SSE2-NEXT:    shll $4, %ecx
3399 ; SSE2-NEXT:    orl %eax, %ecx
3400 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3401 ; SSE2-NEXT:    andl $1, %eax
3402 ; SSE2-NEXT:    shll $5, %eax
3403 ; SSE2-NEXT:    orl %ecx, %eax
3404 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3405 ; SSE2-NEXT:    andl $1, %ecx
3406 ; SSE2-NEXT:    shll $6, %ecx
3407 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3408 ; SSE2-NEXT:    andl $1, %edx
3409 ; SSE2-NEXT:    shll $7, %edx
3410 ; SSE2-NEXT:    orl %ecx, %edx
3411 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3412 ; SSE2-NEXT:    andl $1, %ecx
3413 ; SSE2-NEXT:    shll $8, %ecx
3414 ; SSE2-NEXT:    orl %edx, %ecx
3415 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3416 ; SSE2-NEXT:    andl $1, %edx
3417 ; SSE2-NEXT:    shll $9, %edx
3418 ; SSE2-NEXT:    orl %ecx, %edx
3419 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3420 ; SSE2-NEXT:    andl $1, %ecx
3421 ; SSE2-NEXT:    shll $10, %ecx
3422 ; SSE2-NEXT:    orl %edx, %ecx
3423 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3424 ; SSE2-NEXT:    andl $1, %edx
3425 ; SSE2-NEXT:    shll $11, %edx
3426 ; SSE2-NEXT:    orl %ecx, %edx
3427 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3428 ; SSE2-NEXT:    andl $1, %ecx
3429 ; SSE2-NEXT:    shll $12, %ecx
3430 ; SSE2-NEXT:    orl %edx, %ecx
3431 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3432 ; SSE2-NEXT:    andl $1, %edx
3433 ; SSE2-NEXT:    shll $13, %edx
3434 ; SSE2-NEXT:    orl %ecx, %edx
3435 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3436 ; SSE2-NEXT:    andl $1, %ecx
3437 ; SSE2-NEXT:    shll $14, %ecx
3438 ; SSE2-NEXT:    orl %edx, %ecx
3439 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3440 ; SSE2-NEXT:    shll $15, %edx
3441 ; SSE2-NEXT:    orl %ecx, %edx
3442 ; SSE2-NEXT:    orl %eax, %edx
3443 ; SSE2-NEXT:    movw %dx, 4(%rdi)
3444 ; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
3445 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3446 ; SSE2-NEXT:    andl $1, %eax
3447 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3448 ; SSE2-NEXT:    andl $1, %ecx
3449 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
3450 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3451 ; SSE2-NEXT:    andl $1, %ecx
3452 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
3453 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3454 ; SSE2-NEXT:    andl $1, %ecx
3455 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
3456 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3457 ; SSE2-NEXT:    andl $1, %ecx
3458 ; SSE2-NEXT:    shll $4, %ecx
3459 ; SSE2-NEXT:    orl %eax, %ecx
3460 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3461 ; SSE2-NEXT:    andl $1, %eax
3462 ; SSE2-NEXT:    shll $5, %eax
3463 ; SSE2-NEXT:    orl %ecx, %eax
3464 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3465 ; SSE2-NEXT:    andl $1, %ecx
3466 ; SSE2-NEXT:    shll $6, %ecx
3467 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3468 ; SSE2-NEXT:    andl $1, %edx
3469 ; SSE2-NEXT:    shll $7, %edx
3470 ; SSE2-NEXT:    orl %ecx, %edx
3471 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3472 ; SSE2-NEXT:    andl $1, %ecx
3473 ; SSE2-NEXT:    shll $8, %ecx
3474 ; SSE2-NEXT:    orl %edx, %ecx
3475 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3476 ; SSE2-NEXT:    andl $1, %edx
3477 ; SSE2-NEXT:    shll $9, %edx
3478 ; SSE2-NEXT:    orl %ecx, %edx
3479 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3480 ; SSE2-NEXT:    andl $1, %ecx
3481 ; SSE2-NEXT:    shll $10, %ecx
3482 ; SSE2-NEXT:    orl %edx, %ecx
3483 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3484 ; SSE2-NEXT:    andl $1, %edx
3485 ; SSE2-NEXT:    shll $11, %edx
3486 ; SSE2-NEXT:    orl %ecx, %edx
3487 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3488 ; SSE2-NEXT:    andl $1, %ecx
3489 ; SSE2-NEXT:    shll $12, %ecx
3490 ; SSE2-NEXT:    orl %edx, %ecx
3491 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3492 ; SSE2-NEXT:    andl $1, %edx
3493 ; SSE2-NEXT:    shll $13, %edx
3494 ; SSE2-NEXT:    orl %ecx, %edx
3495 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3496 ; SSE2-NEXT:    andl $1, %ecx
3497 ; SSE2-NEXT:    shll $14, %ecx
3498 ; SSE2-NEXT:    orl %edx, %ecx
3499 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3500 ; SSE2-NEXT:    shll $15, %edx
3501 ; SSE2-NEXT:    orl %ecx, %edx
3502 ; SSE2-NEXT:    orl %eax, %edx
3503 ; SSE2-NEXT:    movw %dx, 2(%rdi)
3504 ; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
3505 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3506 ; SSE2-NEXT:    andl $1, %eax
3507 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3508 ; SSE2-NEXT:    andl $1, %ecx
3509 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
3510 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3511 ; SSE2-NEXT:    andl $1, %ecx
3512 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
3513 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3514 ; SSE2-NEXT:    andl $1, %ecx
3515 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
3516 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3517 ; SSE2-NEXT:    andl $1, %ecx
3518 ; SSE2-NEXT:    shll $4, %ecx
3519 ; SSE2-NEXT:    orl %eax, %ecx
3520 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3521 ; SSE2-NEXT:    andl $1, %eax
3522 ; SSE2-NEXT:    shll $5, %eax
3523 ; SSE2-NEXT:    orl %ecx, %eax
3524 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3525 ; SSE2-NEXT:    andl $1, %ecx
3526 ; SSE2-NEXT:    shll $6, %ecx
3527 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3528 ; SSE2-NEXT:    andl $1, %edx
3529 ; SSE2-NEXT:    shll $7, %edx
3530 ; SSE2-NEXT:    orl %ecx, %edx
3531 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3532 ; SSE2-NEXT:    andl $1, %ecx
3533 ; SSE2-NEXT:    shll $8, %ecx
3534 ; SSE2-NEXT:    orl %edx, %ecx
3535 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3536 ; SSE2-NEXT:    andl $1, %edx
3537 ; SSE2-NEXT:    shll $9, %edx
3538 ; SSE2-NEXT:    orl %ecx, %edx
3539 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3540 ; SSE2-NEXT:    andl $1, %ecx
3541 ; SSE2-NEXT:    shll $10, %ecx
3542 ; SSE2-NEXT:    orl %edx, %ecx
3543 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3544 ; SSE2-NEXT:    andl $1, %edx
3545 ; SSE2-NEXT:    shll $11, %edx
3546 ; SSE2-NEXT:    orl %ecx, %edx
3547 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3548 ; SSE2-NEXT:    andl $1, %ecx
3549 ; SSE2-NEXT:    shll $12, %ecx
3550 ; SSE2-NEXT:    orl %edx, %ecx
3551 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3552 ; SSE2-NEXT:    andl $1, %edx
3553 ; SSE2-NEXT:    shll $13, %edx
3554 ; SSE2-NEXT:    orl %ecx, %edx
3555 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3556 ; SSE2-NEXT:    andl $1, %ecx
3557 ; SSE2-NEXT:    shll $14, %ecx
3558 ; SSE2-NEXT:    orl %edx, %ecx
3559 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
3560 ; SSE2-NEXT:    shll $15, %edx
3561 ; SSE2-NEXT:    orl %ecx, %edx
3562 ; SSE2-NEXT:    orl %eax, %edx
3563 ; SSE2-NEXT:    movw %dx, (%rdi)
3564 ; SSE2-NEXT:    movq %rdi, %rax
3565 ; SSE2-NEXT:    retq
3566 ;
3567 ; SSE42-LABEL: test_cmp_v64i16:
3568 ; SSE42:       # %bb.0:
3569 ; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
3570 ; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
3571 ; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
3572 ; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
3573 ; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
3574 ; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
3575 ; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
3576 ; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
3577 ; SSE42-NEXT:    pextrb $2, %xmm6, %eax
3578 ; SSE42-NEXT:    andl $1, %eax
3579 ; SSE42-NEXT:    pextrb $0, %xmm6, %ecx
3580 ; SSE42-NEXT:    andl $1, %ecx
3581 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
3582 ; SSE42-NEXT:    pextrb $4, %xmm6, %ecx
3583 ; SSE42-NEXT:    andl $1, %ecx
3584 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
3585 ; SSE42-NEXT:    pextrb $6, %xmm6, %ecx
3586 ; SSE42-NEXT:    andl $1, %ecx
3587 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
3588 ; SSE42-NEXT:    pextrb $8, %xmm6, %ecx
3589 ; SSE42-NEXT:    andl $1, %ecx
3590 ; SSE42-NEXT:    shll $4, %ecx
3591 ; SSE42-NEXT:    orl %eax, %ecx
3592 ; SSE42-NEXT:    pextrb $10, %xmm6, %eax
3593 ; SSE42-NEXT:    andl $1, %eax
3594 ; SSE42-NEXT:    shll $5, %eax
3595 ; SSE42-NEXT:    orl %ecx, %eax
3596 ; SSE42-NEXT:    pextrb $12, %xmm6, %ecx
3597 ; SSE42-NEXT:    andl $1, %ecx
3598 ; SSE42-NEXT:    shll $6, %ecx
3599 ; SSE42-NEXT:    pextrb $14, %xmm6, %edx
3600 ; SSE42-NEXT:    andl $1, %edx
3601 ; SSE42-NEXT:    shll $7, %edx
3602 ; SSE42-NEXT:    orl %ecx, %edx
3603 ; SSE42-NEXT:    pextrb $0, %xmm7, %ecx
3604 ; SSE42-NEXT:    andl $1, %ecx
3605 ; SSE42-NEXT:    shll $8, %ecx
3606 ; SSE42-NEXT:    orl %edx, %ecx
3607 ; SSE42-NEXT:    pextrb $2, %xmm7, %edx
3608 ; SSE42-NEXT:    andl $1, %edx
3609 ; SSE42-NEXT:    shll $9, %edx
3610 ; SSE42-NEXT:    orl %ecx, %edx
3611 ; SSE42-NEXT:    pextrb $4, %xmm7, %ecx
3612 ; SSE42-NEXT:    andl $1, %ecx
3613 ; SSE42-NEXT:    shll $10, %ecx
3614 ; SSE42-NEXT:    orl %edx, %ecx
3615 ; SSE42-NEXT:    pextrb $6, %xmm7, %edx
3616 ; SSE42-NEXT:    andl $1, %edx
3617 ; SSE42-NEXT:    shll $11, %edx
3618 ; SSE42-NEXT:    orl %ecx, %edx
3619 ; SSE42-NEXT:    pextrb $8, %xmm7, %ecx
3620 ; SSE42-NEXT:    andl $1, %ecx
3621 ; SSE42-NEXT:    shll $12, %ecx
3622 ; SSE42-NEXT:    orl %edx, %ecx
3623 ; SSE42-NEXT:    pextrb $10, %xmm7, %edx
3624 ; SSE42-NEXT:    andl $1, %edx
3625 ; SSE42-NEXT:    shll $13, %edx
3626 ; SSE42-NEXT:    orl %ecx, %edx
3627 ; SSE42-NEXT:    pextrb $12, %xmm7, %ecx
3628 ; SSE42-NEXT:    andl $1, %ecx
3629 ; SSE42-NEXT:    shll $14, %ecx
3630 ; SSE42-NEXT:    orl %edx, %ecx
3631 ; SSE42-NEXT:    pextrb $14, %xmm7, %edx
3632 ; SSE42-NEXT:    shll $15, %edx
3633 ; SSE42-NEXT:    orl %ecx, %edx
3634 ; SSE42-NEXT:    orl %eax, %edx
3635 ; SSE42-NEXT:    movw %dx, 6(%rdi)
3636 ; SSE42-NEXT:    pextrb $2, %xmm4, %eax
3637 ; SSE42-NEXT:    andl $1, %eax
3638 ; SSE42-NEXT:    pextrb $0, %xmm4, %ecx
3639 ; SSE42-NEXT:    andl $1, %ecx
3640 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
3641 ; SSE42-NEXT:    pextrb $4, %xmm4, %ecx
3642 ; SSE42-NEXT:    andl $1, %ecx
3643 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
3644 ; SSE42-NEXT:    pextrb $6, %xmm4, %ecx
3645 ; SSE42-NEXT:    andl $1, %ecx
3646 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
3647 ; SSE42-NEXT:    pextrb $8, %xmm4, %ecx
3648 ; SSE42-NEXT:    andl $1, %ecx
3649 ; SSE42-NEXT:    shll $4, %ecx
3650 ; SSE42-NEXT:    orl %eax, %ecx
3651 ; SSE42-NEXT:    pextrb $10, %xmm4, %eax
3652 ; SSE42-NEXT:    andl $1, %eax
3653 ; SSE42-NEXT:    shll $5, %eax
3654 ; SSE42-NEXT:    orl %ecx, %eax
3655 ; SSE42-NEXT:    pextrb $12, %xmm4, %ecx
3656 ; SSE42-NEXT:    andl $1, %ecx
3657 ; SSE42-NEXT:    shll $6, %ecx
3658 ; SSE42-NEXT:    pextrb $14, %xmm4, %edx
3659 ; SSE42-NEXT:    andl $1, %edx
3660 ; SSE42-NEXT:    shll $7, %edx
3661 ; SSE42-NEXT:    orl %ecx, %edx
3662 ; SSE42-NEXT:    pextrb $0, %xmm5, %ecx
3663 ; SSE42-NEXT:    andl $1, %ecx
3664 ; SSE42-NEXT:    shll $8, %ecx
3665 ; SSE42-NEXT:    orl %edx, %ecx
3666 ; SSE42-NEXT:    pextrb $2, %xmm5, %edx
3667 ; SSE42-NEXT:    andl $1, %edx
3668 ; SSE42-NEXT:    shll $9, %edx
3669 ; SSE42-NEXT:    orl %ecx, %edx
3670 ; SSE42-NEXT:    pextrb $4, %xmm5, %ecx
3671 ; SSE42-NEXT:    andl $1, %ecx
3672 ; SSE42-NEXT:    shll $10, %ecx
3673 ; SSE42-NEXT:    orl %edx, %ecx
3674 ; SSE42-NEXT:    pextrb $6, %xmm5, %edx
3675 ; SSE42-NEXT:    andl $1, %edx
3676 ; SSE42-NEXT:    shll $11, %edx
3677 ; SSE42-NEXT:    orl %ecx, %edx
3678 ; SSE42-NEXT:    pextrb $8, %xmm5, %ecx
3679 ; SSE42-NEXT:    andl $1, %ecx
3680 ; SSE42-NEXT:    shll $12, %ecx
3681 ; SSE42-NEXT:    orl %edx, %ecx
3682 ; SSE42-NEXT:    pextrb $10, %xmm5, %edx
3683 ; SSE42-NEXT:    andl $1, %edx
3684 ; SSE42-NEXT:    shll $13, %edx
3685 ; SSE42-NEXT:    orl %ecx, %edx
3686 ; SSE42-NEXT:    pextrb $12, %xmm5, %ecx
3687 ; SSE42-NEXT:    andl $1, %ecx
3688 ; SSE42-NEXT:    shll $14, %ecx
3689 ; SSE42-NEXT:    orl %edx, %ecx
3690 ; SSE42-NEXT:    pextrb $14, %xmm5, %edx
3691 ; SSE42-NEXT:    shll $15, %edx
3692 ; SSE42-NEXT:    orl %ecx, %edx
3693 ; SSE42-NEXT:    orl %eax, %edx
3694 ; SSE42-NEXT:    movw %dx, 4(%rdi)
3695 ; SSE42-NEXT:    pextrb $2, %xmm2, %eax
3696 ; SSE42-NEXT:    andl $1, %eax
3697 ; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
3698 ; SSE42-NEXT:    andl $1, %ecx
3699 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
3700 ; SSE42-NEXT:    pextrb $4, %xmm2, %ecx
3701 ; SSE42-NEXT:    andl $1, %ecx
3702 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
3703 ; SSE42-NEXT:    pextrb $6, %xmm2, %ecx
3704 ; SSE42-NEXT:    andl $1, %ecx
3705 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
3706 ; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
3707 ; SSE42-NEXT:    andl $1, %ecx
3708 ; SSE42-NEXT:    shll $4, %ecx
3709 ; SSE42-NEXT:    orl %eax, %ecx
3710 ; SSE42-NEXT:    pextrb $10, %xmm2, %eax
3711 ; SSE42-NEXT:    andl $1, %eax
3712 ; SSE42-NEXT:    shll $5, %eax
3713 ; SSE42-NEXT:    orl %ecx, %eax
3714 ; SSE42-NEXT:    pextrb $12, %xmm2, %ecx
3715 ; SSE42-NEXT:    andl $1, %ecx
3716 ; SSE42-NEXT:    shll $6, %ecx
3717 ; SSE42-NEXT:    pextrb $14, %xmm2, %edx
3718 ; SSE42-NEXT:    andl $1, %edx
3719 ; SSE42-NEXT:    shll $7, %edx
3720 ; SSE42-NEXT:    orl %ecx, %edx
3721 ; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
3722 ; SSE42-NEXT:    andl $1, %ecx
3723 ; SSE42-NEXT:    shll $8, %ecx
3724 ; SSE42-NEXT:    orl %edx, %ecx
3725 ; SSE42-NEXT:    pextrb $2, %xmm3, %edx
3726 ; SSE42-NEXT:    andl $1, %edx
3727 ; SSE42-NEXT:    shll $9, %edx
3728 ; SSE42-NEXT:    orl %ecx, %edx
3729 ; SSE42-NEXT:    pextrb $4, %xmm3, %ecx
3730 ; SSE42-NEXT:    andl $1, %ecx
3731 ; SSE42-NEXT:    shll $10, %ecx
3732 ; SSE42-NEXT:    orl %edx, %ecx
3733 ; SSE42-NEXT:    pextrb $6, %xmm3, %edx
3734 ; SSE42-NEXT:    andl $1, %edx
3735 ; SSE42-NEXT:    shll $11, %edx
3736 ; SSE42-NEXT:    orl %ecx, %edx
3737 ; SSE42-NEXT:    pextrb $8, %xmm3, %ecx
3738 ; SSE42-NEXT:    andl $1, %ecx
3739 ; SSE42-NEXT:    shll $12, %ecx
3740 ; SSE42-NEXT:    orl %edx, %ecx
3741 ; SSE42-NEXT:    pextrb $10, %xmm3, %edx
3742 ; SSE42-NEXT:    andl $1, %edx
3743 ; SSE42-NEXT:    shll $13, %edx
3744 ; SSE42-NEXT:    orl %ecx, %edx
3745 ; SSE42-NEXT:    pextrb $12, %xmm3, %ecx
3746 ; SSE42-NEXT:    andl $1, %ecx
3747 ; SSE42-NEXT:    shll $14, %ecx
3748 ; SSE42-NEXT:    orl %edx, %ecx
3749 ; SSE42-NEXT:    pextrb $14, %xmm3, %edx
3750 ; SSE42-NEXT:    shll $15, %edx
3751 ; SSE42-NEXT:    orl %ecx, %edx
3752 ; SSE42-NEXT:    orl %eax, %edx
3753 ; SSE42-NEXT:    movw %dx, 2(%rdi)
3754 ; SSE42-NEXT:    pextrb $2, %xmm0, %eax
3755 ; SSE42-NEXT:    andl $1, %eax
3756 ; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
3757 ; SSE42-NEXT:    andl $1, %ecx
3758 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
3759 ; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
3760 ; SSE42-NEXT:    andl $1, %ecx
3761 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
3762 ; SSE42-NEXT:    pextrb $6, %xmm0, %ecx
3763 ; SSE42-NEXT:    andl $1, %ecx
3764 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
3765 ; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
3766 ; SSE42-NEXT:    andl $1, %ecx
3767 ; SSE42-NEXT:    shll $4, %ecx
3768 ; SSE42-NEXT:    orl %eax, %ecx
3769 ; SSE42-NEXT:    pextrb $10, %xmm0, %eax
3770 ; SSE42-NEXT:    andl $1, %eax
3771 ; SSE42-NEXT:    shll $5, %eax
3772 ; SSE42-NEXT:    orl %ecx, %eax
3773 ; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
3774 ; SSE42-NEXT:    andl $1, %ecx
3775 ; SSE42-NEXT:    shll $6, %ecx
3776 ; SSE42-NEXT:    pextrb $14, %xmm0, %edx
3777 ; SSE42-NEXT:    andl $1, %edx
3778 ; SSE42-NEXT:    shll $7, %edx
3779 ; SSE42-NEXT:    orl %ecx, %edx
3780 ; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
3781 ; SSE42-NEXT:    andl $1, %ecx
3782 ; SSE42-NEXT:    shll $8, %ecx
3783 ; SSE42-NEXT:    orl %edx, %ecx
3784 ; SSE42-NEXT:    pextrb $2, %xmm1, %edx
3785 ; SSE42-NEXT:    andl $1, %edx
3786 ; SSE42-NEXT:    shll $9, %edx
3787 ; SSE42-NEXT:    orl %ecx, %edx
3788 ; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
3789 ; SSE42-NEXT:    andl $1, %ecx
3790 ; SSE42-NEXT:    shll $10, %ecx
3791 ; SSE42-NEXT:    orl %edx, %ecx
3792 ; SSE42-NEXT:    pextrb $6, %xmm1, %edx
3793 ; SSE42-NEXT:    andl $1, %edx
3794 ; SSE42-NEXT:    shll $11, %edx
3795 ; SSE42-NEXT:    orl %ecx, %edx
3796 ; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
3797 ; SSE42-NEXT:    andl $1, %ecx
3798 ; SSE42-NEXT:    shll $12, %ecx
3799 ; SSE42-NEXT:    orl %edx, %ecx
3800 ; SSE42-NEXT:    pextrb $10, %xmm1, %edx
3801 ; SSE42-NEXT:    andl $1, %edx
3802 ; SSE42-NEXT:    shll $13, %edx
3803 ; SSE42-NEXT:    orl %ecx, %edx
3804 ; SSE42-NEXT:    pextrb $12, %xmm1, %ecx
3805 ; SSE42-NEXT:    andl $1, %ecx
3806 ; SSE42-NEXT:    shll $14, %ecx
3807 ; SSE42-NEXT:    orl %edx, %ecx
3808 ; SSE42-NEXT:    pextrb $14, %xmm1, %edx
3809 ; SSE42-NEXT:    shll $15, %edx
3810 ; SSE42-NEXT:    orl %ecx, %edx
3811 ; SSE42-NEXT:    orl %eax, %edx
3812 ; SSE42-NEXT:    movw %dx, (%rdi)
3813 ; SSE42-NEXT:    movq %rdi, %rax
3814 ; SSE42-NEXT:    retq
3815 ;
3816 ; AVX1-LABEL: test_cmp_v64i16:
3817 ; AVX1:       # %bb.0:
3818 ; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm8
3819 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm9
3820 ; AVX1-NEXT:    vpcmpgtw %xmm8, %xmm9, %xmm8
3821 ; AVX1-NEXT:    vpcmpgtw %xmm5, %xmm1, %xmm9
3822 ; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm5
3823 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3824 ; AVX1-NEXT:    vpcmpgtw %xmm5, %xmm1, %xmm5
3825 ; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm0, %xmm0
3826 ; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm1
3827 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
3828 ; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm4, %xmm4
3829 ; AVX1-NEXT:    vpcmpgtw %xmm7, %xmm3, %xmm3
3830 ; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm1
3831 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
3832 ; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm7, %xmm7
3833 ; AVX1-NEXT:    vpcmpgtw %xmm6, %xmm2, %xmm2
3834 ; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
3835 ; AVX1-NEXT:    andl $1, %eax
3836 ; AVX1-NEXT:    vpextrb $0, %xmm2, %ecx
3837 ; AVX1-NEXT:    andl $1, %ecx
3838 ; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
3839 ; AVX1-NEXT:    vpextrb $4, %xmm2, %ecx
3840 ; AVX1-NEXT:    andl $1, %ecx
3841 ; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
3842 ; AVX1-NEXT:    vpextrb $6, %xmm2, %ecx
3843 ; AVX1-NEXT:    andl $1, %ecx
3844 ; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
3845 ; AVX1-NEXT:    vpextrb $8, %xmm2, %ecx
3846 ; AVX1-NEXT:    andl $1, %ecx
3847 ; AVX1-NEXT:    shll $4, %ecx
3848 ; AVX1-NEXT:    orl %eax, %ecx
3849 ; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
3850 ; AVX1-NEXT:    andl $1, %eax
3851 ; AVX1-NEXT:    shll $5, %eax
3852 ; AVX1-NEXT:    orl %ecx, %eax
3853 ; AVX1-NEXT:    vpextrb $12, %xmm2, %ecx
3854 ; AVX1-NEXT:    andl $1, %ecx
3855 ; AVX1-NEXT:    shll $6, %ecx
3856 ; AVX1-NEXT:    vpextrb $14, %xmm2, %edx
3857 ; AVX1-NEXT:    andl $1, %edx
3858 ; AVX1-NEXT:    shll $7, %edx
3859 ; AVX1-NEXT:    orl %ecx, %edx
3860 ; AVX1-NEXT:    vpextrb $0, %xmm7, %ecx
3861 ; AVX1-NEXT:    andl $1, %ecx
3862 ; AVX1-NEXT:    shll $8, %ecx
3863 ; AVX1-NEXT:    orl %edx, %ecx
3864 ; AVX1-NEXT:    vpextrb $2, %xmm7, %edx
3865 ; AVX1-NEXT:    andl $1, %edx
3866 ; AVX1-NEXT:    shll $9, %edx
3867 ; AVX1-NEXT:    orl %ecx, %edx
3868 ; AVX1-NEXT:    vpextrb $4, %xmm7, %ecx
3869 ; AVX1-NEXT:    andl $1, %ecx
3870 ; AVX1-NEXT:    shll $10, %ecx
3871 ; AVX1-NEXT:    orl %edx, %ecx
3872 ; AVX1-NEXT:    vpextrb $6, %xmm7, %edx
3873 ; AVX1-NEXT:    andl $1, %edx
3874 ; AVX1-NEXT:    shll $11, %edx
3875 ; AVX1-NEXT:    orl %ecx, %edx
3876 ; AVX1-NEXT:    vpextrb $8, %xmm7, %ecx
3877 ; AVX1-NEXT:    andl $1, %ecx
3878 ; AVX1-NEXT:    shll $12, %ecx
3879 ; AVX1-NEXT:    orl %edx, %ecx
3880 ; AVX1-NEXT:    vpextrb $10, %xmm7, %edx
3881 ; AVX1-NEXT:    andl $1, %edx
3882 ; AVX1-NEXT:    shll $13, %edx
3883 ; AVX1-NEXT:    orl %ecx, %edx
3884 ; AVX1-NEXT:    vpextrb $12, %xmm7, %ecx
3885 ; AVX1-NEXT:    andl $1, %ecx
3886 ; AVX1-NEXT:    shll $14, %ecx
3887 ; AVX1-NEXT:    orl %edx, %ecx
3888 ; AVX1-NEXT:    vpextrb $14, %xmm7, %edx
3889 ; AVX1-NEXT:    andl $1, %edx
3890 ; AVX1-NEXT:    shll $15, %edx
3891 ; AVX1-NEXT:    orl %ecx, %edx
3892 ; AVX1-NEXT:    vpextrb $0, %xmm3, %ecx
3893 ; AVX1-NEXT:    andl $1, %ecx
3894 ; AVX1-NEXT:    shll $16, %ecx
3895 ; AVX1-NEXT:    orl %edx, %ecx
3896 ; AVX1-NEXT:    vpextrb $2, %xmm3, %edx
3897 ; AVX1-NEXT:    andl $1, %edx
3898 ; AVX1-NEXT:    shll $17, %edx
3899 ; AVX1-NEXT:    orl %ecx, %edx
3900 ; AVX1-NEXT:    vpextrb $4, %xmm3, %ecx
3901 ; AVX1-NEXT:    andl $1, %ecx
3902 ; AVX1-NEXT:    shll $18, %ecx
3903 ; AVX1-NEXT:    orl %edx, %ecx
3904 ; AVX1-NEXT:    vpextrb $6, %xmm3, %edx
3905 ; AVX1-NEXT:    andl $1, %edx
3906 ; AVX1-NEXT:    shll $19, %edx
3907 ; AVX1-NEXT:    orl %ecx, %edx
3908 ; AVX1-NEXT:    vpextrb $8, %xmm3, %ecx
3909 ; AVX1-NEXT:    andl $1, %ecx
3910 ; AVX1-NEXT:    shll $20, %ecx
3911 ; AVX1-NEXT:    orl %edx, %ecx
3912 ; AVX1-NEXT:    vpextrb $10, %xmm3, %edx
3913 ; AVX1-NEXT:    andl $1, %edx
3914 ; AVX1-NEXT:    shll $21, %edx
3915 ; AVX1-NEXT:    orl %ecx, %edx
3916 ; AVX1-NEXT:    vpextrb $12, %xmm3, %ecx
3917 ; AVX1-NEXT:    andl $1, %ecx
3918 ; AVX1-NEXT:    shll $22, %ecx
3919 ; AVX1-NEXT:    orl %edx, %ecx
3920 ; AVX1-NEXT:    vpextrb $14, %xmm3, %edx
3921 ; AVX1-NEXT:    andl $1, %edx
3922 ; AVX1-NEXT:    shll $23, %edx
3923 ; AVX1-NEXT:    orl %ecx, %edx
3924 ; AVX1-NEXT:    vpextrb $0, %xmm4, %ecx
3925 ; AVX1-NEXT:    andl $1, %ecx
3926 ; AVX1-NEXT:    shll $24, %ecx
3927 ; AVX1-NEXT:    orl %edx, %ecx
3928 ; AVX1-NEXT:    vpextrb $2, %xmm4, %edx
3929 ; AVX1-NEXT:    andl $1, %edx
3930 ; AVX1-NEXT:    shll $25, %edx
3931 ; AVX1-NEXT:    orl %ecx, %edx
3932 ; AVX1-NEXT:    vpextrb $4, %xmm4, %ecx
3933 ; AVX1-NEXT:    andl $1, %ecx
3934 ; AVX1-NEXT:    shll $26, %ecx
3935 ; AVX1-NEXT:    orl %edx, %ecx
3936 ; AVX1-NEXT:    vpextrb $6, %xmm4, %edx
3937 ; AVX1-NEXT:    andl $1, %edx
3938 ; AVX1-NEXT:    shll $27, %edx
3939 ; AVX1-NEXT:    orl %ecx, %edx
3940 ; AVX1-NEXT:    vpextrb $8, %xmm4, %ecx
3941 ; AVX1-NEXT:    andl $1, %ecx
3942 ; AVX1-NEXT:    shll $28, %ecx
3943 ; AVX1-NEXT:    orl %edx, %ecx
3944 ; AVX1-NEXT:    vpextrb $10, %xmm4, %edx
3945 ; AVX1-NEXT:    andl $1, %edx
3946 ; AVX1-NEXT:    shll $29, %edx
3947 ; AVX1-NEXT:    orl %ecx, %edx
3948 ; AVX1-NEXT:    vpextrb $12, %xmm4, %ecx
3949 ; AVX1-NEXT:    andl $1, %ecx
3950 ; AVX1-NEXT:    shll $30, %ecx
3951 ; AVX1-NEXT:    orl %edx, %ecx
3952 ; AVX1-NEXT:    vpextrb $14, %xmm4, %edx
3953 ; AVX1-NEXT:    shll $31, %edx
3954 ; AVX1-NEXT:    orl %ecx, %edx
3955 ; AVX1-NEXT:    orl %eax, %edx
3956 ; AVX1-NEXT:    movl %edx, 4(%rdi)
3957 ; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
3958 ; AVX1-NEXT:    andl $1, %eax
3959 ; AVX1-NEXT:    vpextrb $0, %xmm0, %ecx
3960 ; AVX1-NEXT:    andl $1, %ecx
3961 ; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
3962 ; AVX1-NEXT:    vpextrb $4, %xmm0, %ecx
3963 ; AVX1-NEXT:    andl $1, %ecx
3964 ; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
3965 ; AVX1-NEXT:    vpextrb $6, %xmm0, %ecx
3966 ; AVX1-NEXT:    andl $1, %ecx
3967 ; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
3968 ; AVX1-NEXT:    vpextrb $8, %xmm0, %ecx
3969 ; AVX1-NEXT:    andl $1, %ecx
3970 ; AVX1-NEXT:    shll $4, %ecx
3971 ; AVX1-NEXT:    orl %eax, %ecx
3972 ; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
3973 ; AVX1-NEXT:    andl $1, %eax
3974 ; AVX1-NEXT:    shll $5, %eax
3975 ; AVX1-NEXT:    orl %ecx, %eax
3976 ; AVX1-NEXT:    vpextrb $12, %xmm0, %ecx
3977 ; AVX1-NEXT:    andl $1, %ecx
3978 ; AVX1-NEXT:    shll $6, %ecx
3979 ; AVX1-NEXT:    vpextrb $14, %xmm0, %edx
3980 ; AVX1-NEXT:    andl $1, %edx
3981 ; AVX1-NEXT:    shll $7, %edx
3982 ; AVX1-NEXT:    orl %ecx, %edx
3983 ; AVX1-NEXT:    vpextrb $0, %xmm5, %ecx
3984 ; AVX1-NEXT:    andl $1, %ecx
3985 ; AVX1-NEXT:    shll $8, %ecx
3986 ; AVX1-NEXT:    orl %edx, %ecx
3987 ; AVX1-NEXT:    vpextrb $2, %xmm5, %edx
3988 ; AVX1-NEXT:    andl $1, %edx
3989 ; AVX1-NEXT:    shll $9, %edx
3990 ; AVX1-NEXT:    orl %ecx, %edx
3991 ; AVX1-NEXT:    vpextrb $4, %xmm5, %ecx
3992 ; AVX1-NEXT:    andl $1, %ecx
3993 ; AVX1-NEXT:    shll $10, %ecx
3994 ; AVX1-NEXT:    orl %edx, %ecx
3995 ; AVX1-NEXT:    vpextrb $6, %xmm5, %edx
3996 ; AVX1-NEXT:    andl $1, %edx
3997 ; AVX1-NEXT:    shll $11, %edx
3998 ; AVX1-NEXT:    orl %ecx, %edx
3999 ; AVX1-NEXT:    vpextrb $8, %xmm5, %ecx
4000 ; AVX1-NEXT:    andl $1, %ecx
4001 ; AVX1-NEXT:    shll $12, %ecx
4002 ; AVX1-NEXT:    orl %edx, %ecx
4003 ; AVX1-NEXT:    vpextrb $10, %xmm5, %edx
4004 ; AVX1-NEXT:    andl $1, %edx
4005 ; AVX1-NEXT:    shll $13, %edx
4006 ; AVX1-NEXT:    orl %ecx, %edx
4007 ; AVX1-NEXT:    vpextrb $12, %xmm5, %ecx
4008 ; AVX1-NEXT:    andl $1, %ecx
4009 ; AVX1-NEXT:    shll $14, %ecx
4010 ; AVX1-NEXT:    orl %edx, %ecx
4011 ; AVX1-NEXT:    vpextrb $14, %xmm5, %edx
4012 ; AVX1-NEXT:    andl $1, %edx
4013 ; AVX1-NEXT:    shll $15, %edx
4014 ; AVX1-NEXT:    orl %ecx, %edx
4015 ; AVX1-NEXT:    vpextrb $0, %xmm9, %ecx
4016 ; AVX1-NEXT:    andl $1, %ecx
4017 ; AVX1-NEXT:    shll $16, %ecx
4018 ; AVX1-NEXT:    orl %edx, %ecx
4019 ; AVX1-NEXT:    vpextrb $2, %xmm9, %edx
4020 ; AVX1-NEXT:    andl $1, %edx
4021 ; AVX1-NEXT:    shll $17, %edx
4022 ; AVX1-NEXT:    orl %ecx, %edx
4023 ; AVX1-NEXT:    vpextrb $4, %xmm9, %ecx
4024 ; AVX1-NEXT:    andl $1, %ecx
4025 ; AVX1-NEXT:    shll $18, %ecx
4026 ; AVX1-NEXT:    orl %edx, %ecx
4027 ; AVX1-NEXT:    vpextrb $6, %xmm9, %edx
4028 ; AVX1-NEXT:    andl $1, %edx
4029 ; AVX1-NEXT:    shll $19, %edx
4030 ; AVX1-NEXT:    orl %ecx, %edx
4031 ; AVX1-NEXT:    vpextrb $8, %xmm9, %ecx
4032 ; AVX1-NEXT:    andl $1, %ecx
4033 ; AVX1-NEXT:    shll $20, %ecx
4034 ; AVX1-NEXT:    orl %edx, %ecx
4035 ; AVX1-NEXT:    vpextrb $10, %xmm9, %edx
4036 ; AVX1-NEXT:    andl $1, %edx
4037 ; AVX1-NEXT:    shll $21, %edx
4038 ; AVX1-NEXT:    orl %ecx, %edx
4039 ; AVX1-NEXT:    vpextrb $12, %xmm9, %ecx
4040 ; AVX1-NEXT:    andl $1, %ecx
4041 ; AVX1-NEXT:    shll $22, %ecx
4042 ; AVX1-NEXT:    orl %edx, %ecx
4043 ; AVX1-NEXT:    vpextrb $14, %xmm9, %edx
4044 ; AVX1-NEXT:    andl $1, %edx
4045 ; AVX1-NEXT:    shll $23, %edx
4046 ; AVX1-NEXT:    orl %ecx, %edx
4047 ; AVX1-NEXT:    vpextrb $0, %xmm8, %ecx
4048 ; AVX1-NEXT:    andl $1, %ecx
4049 ; AVX1-NEXT:    shll $24, %ecx
4050 ; AVX1-NEXT:    orl %edx, %ecx
4051 ; AVX1-NEXT:    vpextrb $2, %xmm8, %edx
4052 ; AVX1-NEXT:    andl $1, %edx
4053 ; AVX1-NEXT:    shll $25, %edx
4054 ; AVX1-NEXT:    orl %ecx, %edx
4055 ; AVX1-NEXT:    vpextrb $4, %xmm8, %ecx
4056 ; AVX1-NEXT:    andl $1, %ecx
4057 ; AVX1-NEXT:    shll $26, %ecx
4058 ; AVX1-NEXT:    orl %edx, %ecx
4059 ; AVX1-NEXT:    vpextrb $6, %xmm8, %edx
4060 ; AVX1-NEXT:    andl $1, %edx
4061 ; AVX1-NEXT:    shll $27, %edx
4062 ; AVX1-NEXT:    orl %ecx, %edx
4063 ; AVX1-NEXT:    vpextrb $8, %xmm8, %ecx
4064 ; AVX1-NEXT:    andl $1, %ecx
4065 ; AVX1-NEXT:    shll $28, %ecx
4066 ; AVX1-NEXT:    orl %edx, %ecx
4067 ; AVX1-NEXT:    vpextrb $10, %xmm8, %edx
4068 ; AVX1-NEXT:    andl $1, %edx
4069 ; AVX1-NEXT:    shll $29, %edx
4070 ; AVX1-NEXT:    orl %ecx, %edx
4071 ; AVX1-NEXT:    vpextrb $12, %xmm8, %ecx
4072 ; AVX1-NEXT:    andl $1, %ecx
4073 ; AVX1-NEXT:    shll $30, %ecx
4074 ; AVX1-NEXT:    orl %edx, %ecx
4075 ; AVX1-NEXT:    vpextrb $14, %xmm8, %edx
4076 ; AVX1-NEXT:    shll $31, %edx
4077 ; AVX1-NEXT:    orl %ecx, %edx
4078 ; AVX1-NEXT:    orl %eax, %edx
4079 ; AVX1-NEXT:    movl %edx, (%rdi)
4080 ; AVX1-NEXT:    movq %rdi, %rax
4081 ; AVX1-NEXT:    vzeroupper
4082 ; AVX1-NEXT:    retq
4083 ;
4084 ; AVX2-LABEL: test_cmp_v64i16:
4085 ; AVX2:       # %bb.0:
4086 ; AVX2-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm5
4087 ; AVX2-NEXT:    vextracti128 $1, %ymm5, %xmm1
4088 ; AVX2-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm4
4089 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm0
4090 ; AVX2-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm7
4091 ; AVX2-NEXT:    vextracti128 $1, %ymm7, %xmm3
4092 ; AVX2-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm6
4093 ; AVX2-NEXT:    vextracti128 $1, %ymm6, %xmm2
4094 ; AVX2-NEXT:    vpextrb $2, %xmm6, %eax
4095 ; AVX2-NEXT:    andl $1, %eax
4096 ; AVX2-NEXT:    vpextrb $0, %xmm6, %ecx
4097 ; AVX2-NEXT:    andl $1, %ecx
4098 ; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
4099 ; AVX2-NEXT:    vpextrb $4, %xmm6, %ecx
4100 ; AVX2-NEXT:    andl $1, %ecx
4101 ; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
4102 ; AVX2-NEXT:    vpextrb $6, %xmm6, %ecx
4103 ; AVX2-NEXT:    andl $1, %ecx
4104 ; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
4105 ; AVX2-NEXT:    vpextrb $8, %xmm6, %ecx
4106 ; AVX2-NEXT:    andl $1, %ecx
4107 ; AVX2-NEXT:    shll $4, %ecx
4108 ; AVX2-NEXT:    orl %eax, %ecx
4109 ; AVX2-NEXT:    vpextrb $10, %xmm6, %eax
4110 ; AVX2-NEXT:    andl $1, %eax
4111 ; AVX2-NEXT:    shll $5, %eax
4112 ; AVX2-NEXT:    orl %ecx, %eax
4113 ; AVX2-NEXT:    vpextrb $12, %xmm6, %ecx
4114 ; AVX2-NEXT:    andl $1, %ecx
4115 ; AVX2-NEXT:    shll $6, %ecx
4116 ; AVX2-NEXT:    vpextrb $14, %xmm6, %edx
4117 ; AVX2-NEXT:    andl $1, %edx
4118 ; AVX2-NEXT:    shll $7, %edx
4119 ; AVX2-NEXT:    orl %ecx, %edx
4120 ; AVX2-NEXT:    vpextrb $0, %xmm2, %ecx
4121 ; AVX2-NEXT:    andl $1, %ecx
4122 ; AVX2-NEXT:    shll $8, %ecx
4123 ; AVX2-NEXT:    orl %edx, %ecx
4124 ; AVX2-NEXT:    vpextrb $2, %xmm2, %edx
4125 ; AVX2-NEXT:    andl $1, %edx
4126 ; AVX2-NEXT:    shll $9, %edx
4127 ; AVX2-NEXT:    orl %ecx, %edx
4128 ; AVX2-NEXT:    vpextrb $4, %xmm2, %ecx
4129 ; AVX2-NEXT:    andl $1, %ecx
4130 ; AVX2-NEXT:    shll $10, %ecx
4131 ; AVX2-NEXT:    orl %edx, %ecx
4132 ; AVX2-NEXT:    vpextrb $6, %xmm2, %edx
4133 ; AVX2-NEXT:    andl $1, %edx
4134 ; AVX2-NEXT:    shll $11, %edx
4135 ; AVX2-NEXT:    orl %ecx, %edx
4136 ; AVX2-NEXT:    vpextrb $8, %xmm2, %ecx
4137 ; AVX2-NEXT:    andl $1, %ecx
4138 ; AVX2-NEXT:    shll $12, %ecx
4139 ; AVX2-NEXT:    orl %edx, %ecx
4140 ; AVX2-NEXT:    vpextrb $10, %xmm2, %edx
4141 ; AVX2-NEXT:    andl $1, %edx
4142 ; AVX2-NEXT:    shll $13, %edx
4143 ; AVX2-NEXT:    orl %ecx, %edx
4144 ; AVX2-NEXT:    vpextrb $12, %xmm2, %ecx
4145 ; AVX2-NEXT:    andl $1, %ecx
4146 ; AVX2-NEXT:    shll $14, %ecx
4147 ; AVX2-NEXT:    orl %edx, %ecx
4148 ; AVX2-NEXT:    vpextrb $14, %xmm2, %edx
4149 ; AVX2-NEXT:    andl $1, %edx
4150 ; AVX2-NEXT:    shll $15, %edx
4151 ; AVX2-NEXT:    orl %ecx, %edx
4152 ; AVX2-NEXT:    vpextrb $0, %xmm7, %ecx
4153 ; AVX2-NEXT:    andl $1, %ecx
4154 ; AVX2-NEXT:    shll $16, %ecx
4155 ; AVX2-NEXT:    orl %edx, %ecx
4156 ; AVX2-NEXT:    vpextrb $2, %xmm7, %edx
4157 ; AVX2-NEXT:    andl $1, %edx
4158 ; AVX2-NEXT:    shll $17, %edx
4159 ; AVX2-NEXT:    orl %ecx, %edx
4160 ; AVX2-NEXT:    vpextrb $4, %xmm7, %ecx
4161 ; AVX2-NEXT:    andl $1, %ecx
4162 ; AVX2-NEXT:    shll $18, %ecx
4163 ; AVX2-NEXT:    orl %edx, %ecx
4164 ; AVX2-NEXT:    vpextrb $6, %xmm7, %edx
4165 ; AVX2-NEXT:    andl $1, %edx
4166 ; AVX2-NEXT:    shll $19, %edx
4167 ; AVX2-NEXT:    orl %ecx, %edx
4168 ; AVX2-NEXT:    vpextrb $8, %xmm7, %ecx
4169 ; AVX2-NEXT:    andl $1, %ecx
4170 ; AVX2-NEXT:    shll $20, %ecx
4171 ; AVX2-NEXT:    orl %edx, %ecx
4172 ; AVX2-NEXT:    vpextrb $10, %xmm7, %edx
4173 ; AVX2-NEXT:    andl $1, %edx
4174 ; AVX2-NEXT:    shll $21, %edx
4175 ; AVX2-NEXT:    orl %ecx, %edx
4176 ; AVX2-NEXT:    vpextrb $12, %xmm7, %ecx
4177 ; AVX2-NEXT:    andl $1, %ecx
4178 ; AVX2-NEXT:    shll $22, %ecx
4179 ; AVX2-NEXT:    orl %edx, %ecx
4180 ; AVX2-NEXT:    vpextrb $14, %xmm7, %edx
4181 ; AVX2-NEXT:    andl $1, %edx
4182 ; AVX2-NEXT:    shll $23, %edx
4183 ; AVX2-NEXT:    orl %ecx, %edx
4184 ; AVX2-NEXT:    vpextrb $0, %xmm3, %ecx
4185 ; AVX2-NEXT:    andl $1, %ecx
4186 ; AVX2-NEXT:    shll $24, %ecx
4187 ; AVX2-NEXT:    orl %edx, %ecx
4188 ; AVX2-NEXT:    vpextrb $2, %xmm3, %edx
4189 ; AVX2-NEXT:    andl $1, %edx
4190 ; AVX2-NEXT:    shll $25, %edx
4191 ; AVX2-NEXT:    orl %ecx, %edx
4192 ; AVX2-NEXT:    vpextrb $4, %xmm3, %ecx
4193 ; AVX2-NEXT:    andl $1, %ecx
4194 ; AVX2-NEXT:    shll $26, %ecx
4195 ; AVX2-NEXT:    orl %edx, %ecx
4196 ; AVX2-NEXT:    vpextrb $6, %xmm3, %edx
4197 ; AVX2-NEXT:    andl $1, %edx
4198 ; AVX2-NEXT:    shll $27, %edx
4199 ; AVX2-NEXT:    orl %ecx, %edx
4200 ; AVX2-NEXT:    vpextrb $8, %xmm3, %ecx
4201 ; AVX2-NEXT:    andl $1, %ecx
4202 ; AVX2-NEXT:    shll $28, %ecx
4203 ; AVX2-NEXT:    orl %edx, %ecx
4204 ; AVX2-NEXT:    vpextrb $10, %xmm3, %edx
4205 ; AVX2-NEXT:    andl $1, %edx
4206 ; AVX2-NEXT:    shll $29, %edx
4207 ; AVX2-NEXT:    orl %ecx, %edx
4208 ; AVX2-NEXT:    vpextrb $12, %xmm3, %ecx
4209 ; AVX2-NEXT:    andl $1, %ecx
4210 ; AVX2-NEXT:    shll $30, %ecx
4211 ; AVX2-NEXT:    orl %edx, %ecx
4212 ; AVX2-NEXT:    vpextrb $14, %xmm3, %edx
4213 ; AVX2-NEXT:    shll $31, %edx
4214 ; AVX2-NEXT:    orl %ecx, %edx
4215 ; AVX2-NEXT:    orl %eax, %edx
4216 ; AVX2-NEXT:    movl %edx, 4(%rdi)
4217 ; AVX2-NEXT:    vpextrb $2, %xmm4, %eax
4218 ; AVX2-NEXT:    andl $1, %eax
4219 ; AVX2-NEXT:    vpextrb $0, %xmm4, %ecx
4220 ; AVX2-NEXT:    andl $1, %ecx
4221 ; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
4222 ; AVX2-NEXT:    vpextrb $4, %xmm4, %ecx
4223 ; AVX2-NEXT:    andl $1, %ecx
4224 ; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
4225 ; AVX2-NEXT:    vpextrb $6, %xmm4, %ecx
4226 ; AVX2-NEXT:    andl $1, %ecx
4227 ; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
4228 ; AVX2-NEXT:    vpextrb $8, %xmm4, %ecx
4229 ; AVX2-NEXT:    andl $1, %ecx
4230 ; AVX2-NEXT:    shll $4, %ecx
4231 ; AVX2-NEXT:    orl %eax, %ecx
4232 ; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
4233 ; AVX2-NEXT:    andl $1, %eax
4234 ; AVX2-NEXT:    shll $5, %eax
4235 ; AVX2-NEXT:    orl %ecx, %eax
4236 ; AVX2-NEXT:    vpextrb $12, %xmm4, %ecx
4237 ; AVX2-NEXT:    andl $1, %ecx
4238 ; AVX2-NEXT:    shll $6, %ecx
4239 ; AVX2-NEXT:    vpextrb $14, %xmm4, %edx
4240 ; AVX2-NEXT:    andl $1, %edx
4241 ; AVX2-NEXT:    shll $7, %edx
4242 ; AVX2-NEXT:    orl %ecx, %edx
4243 ; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
4244 ; AVX2-NEXT:    andl $1, %ecx
4245 ; AVX2-NEXT:    shll $8, %ecx
4246 ; AVX2-NEXT:    orl %edx, %ecx
4247 ; AVX2-NEXT:    vpextrb $2, %xmm0, %edx
4248 ; AVX2-NEXT:    andl $1, %edx
4249 ; AVX2-NEXT:    shll $9, %edx
4250 ; AVX2-NEXT:    orl %ecx, %edx
4251 ; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
4252 ; AVX2-NEXT:    andl $1, %ecx
4253 ; AVX2-NEXT:    shll $10, %ecx
4254 ; AVX2-NEXT:    orl %edx, %ecx
4255 ; AVX2-NEXT:    vpextrb $6, %xmm0, %edx
4256 ; AVX2-NEXT:    andl $1, %edx
4257 ; AVX2-NEXT:    shll $11, %edx
4258 ; AVX2-NEXT:    orl %ecx, %edx
4259 ; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
4260 ; AVX2-NEXT:    andl $1, %ecx
4261 ; AVX2-NEXT:    shll $12, %ecx
4262 ; AVX2-NEXT:    orl %edx, %ecx
4263 ; AVX2-NEXT:    vpextrb $10, %xmm0, %edx
4264 ; AVX2-NEXT:    andl $1, %edx
4265 ; AVX2-NEXT:    shll $13, %edx
4266 ; AVX2-NEXT:    orl %ecx, %edx
4267 ; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
4268 ; AVX2-NEXT:    andl $1, %ecx
4269 ; AVX2-NEXT:    shll $14, %ecx
4270 ; AVX2-NEXT:    orl %edx, %ecx
4271 ; AVX2-NEXT:    vpextrb $14, %xmm0, %edx
4272 ; AVX2-NEXT:    andl $1, %edx
4273 ; AVX2-NEXT:    shll $15, %edx
4274 ; AVX2-NEXT:    orl %ecx, %edx
4275 ; AVX2-NEXT:    vpextrb $0, %xmm5, %ecx
4276 ; AVX2-NEXT:    andl $1, %ecx
4277 ; AVX2-NEXT:    shll $16, %ecx
4278 ; AVX2-NEXT:    orl %edx, %ecx
4279 ; AVX2-NEXT:    vpextrb $2, %xmm5, %edx
4280 ; AVX2-NEXT:    andl $1, %edx
4281 ; AVX2-NEXT:    shll $17, %edx
4282 ; AVX2-NEXT:    orl %ecx, %edx
4283 ; AVX2-NEXT:    vpextrb $4, %xmm5, %ecx
4284 ; AVX2-NEXT:    andl $1, %ecx
4285 ; AVX2-NEXT:    shll $18, %ecx
4286 ; AVX2-NEXT:    orl %edx, %ecx
4287 ; AVX2-NEXT:    vpextrb $6, %xmm5, %edx
4288 ; AVX2-NEXT:    andl $1, %edx
4289 ; AVX2-NEXT:    shll $19, %edx
4290 ; AVX2-NEXT:    orl %ecx, %edx
4291 ; AVX2-NEXT:    vpextrb $8, %xmm5, %ecx
4292 ; AVX2-NEXT:    andl $1, %ecx
4293 ; AVX2-NEXT:    shll $20, %ecx
4294 ; AVX2-NEXT:    orl %edx, %ecx
4295 ; AVX2-NEXT:    vpextrb $10, %xmm5, %edx
4296 ; AVX2-NEXT:    andl $1, %edx
4297 ; AVX2-NEXT:    shll $21, %edx
4298 ; AVX2-NEXT:    orl %ecx, %edx
4299 ; AVX2-NEXT:    vpextrb $12, %xmm5, %ecx
4300 ; AVX2-NEXT:    andl $1, %ecx
4301 ; AVX2-NEXT:    shll $22, %ecx
4302 ; AVX2-NEXT:    orl %edx, %ecx
4303 ; AVX2-NEXT:    vpextrb $14, %xmm5, %edx
4304 ; AVX2-NEXT:    andl $1, %edx
4305 ; AVX2-NEXT:    shll $23, %edx
4306 ; AVX2-NEXT:    orl %ecx, %edx
4307 ; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
4308 ; AVX2-NEXT:    andl $1, %ecx
4309 ; AVX2-NEXT:    shll $24, %ecx
4310 ; AVX2-NEXT:    orl %edx, %ecx
4311 ; AVX2-NEXT:    vpextrb $2, %xmm1, %edx
4312 ; AVX2-NEXT:    andl $1, %edx
4313 ; AVX2-NEXT:    shll $25, %edx
4314 ; AVX2-NEXT:    orl %ecx, %edx
4315 ; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
4316 ; AVX2-NEXT:    andl $1, %ecx
4317 ; AVX2-NEXT:    shll $26, %ecx
4318 ; AVX2-NEXT:    orl %edx, %ecx
4319 ; AVX2-NEXT:    vpextrb $6, %xmm1, %edx
4320 ; AVX2-NEXT:    andl $1, %edx
4321 ; AVX2-NEXT:    shll $27, %edx
4322 ; AVX2-NEXT:    orl %ecx, %edx
4323 ; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
4324 ; AVX2-NEXT:    andl $1, %ecx
4325 ; AVX2-NEXT:    shll $28, %ecx
4326 ; AVX2-NEXT:    orl %edx, %ecx
4327 ; AVX2-NEXT:    vpextrb $10, %xmm1, %edx
4328 ; AVX2-NEXT:    andl $1, %edx
4329 ; AVX2-NEXT:    shll $29, %edx
4330 ; AVX2-NEXT:    orl %ecx, %edx
4331 ; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
4332 ; AVX2-NEXT:    andl $1, %ecx
4333 ; AVX2-NEXT:    shll $30, %ecx
4334 ; AVX2-NEXT:    orl %edx, %ecx
4335 ; AVX2-NEXT:    vpextrb $14, %xmm1, %edx
4336 ; AVX2-NEXT:    shll $31, %edx
4337 ; AVX2-NEXT:    orl %ecx, %edx
4338 ; AVX2-NEXT:    orl %eax, %edx
4339 ; AVX2-NEXT:    movl %edx, (%rdi)
4340 ; AVX2-NEXT:    movq %rdi, %rax
4341 ; AVX2-NEXT:    vzeroupper
4342 ; AVX2-NEXT:    retq
4343 ;
4344 ; AVX512F-LABEL: test_cmp_v64i16:
4345 ; AVX512F:       # %bb.0:
4346 ; AVX512F-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
4347 ; AVX512F-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
4348 ; AVX512F-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
4349 ; AVX512F-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
4350 ; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
4351 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
4352 ; AVX512F-NEXT:    vpmovsxwd %ymm1, %zmm1
4353 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
4354 ; AVX512F-NEXT:    vpmovsxwd %ymm2, %zmm2
4355 ; AVX512F-NEXT:    vpmovdb %zmm2, %xmm2
4356 ; AVX512F-NEXT:    vpmovsxwd %ymm3, %zmm3
4357 ; AVX512F-NEXT:    vpmovdb %zmm3, %xmm3
4358 ; AVX512F-NEXT:    vzeroupper
4359 ; AVX512F-NEXT:    retq
4360 ;
4361 ; AVX512DQ-LABEL: test_cmp_v64i16:
4362 ; AVX512DQ:       # %bb.0:
4363 ; AVX512DQ-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
4364 ; AVX512DQ-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
4365 ; AVX512DQ-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
4366 ; AVX512DQ-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
4367 ; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm0
4368 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
4369 ; AVX512DQ-NEXT:    vpmovsxwd %ymm1, %zmm1
4370 ; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm1
4371 ; AVX512DQ-NEXT:    vpmovsxwd %ymm2, %zmm2
4372 ; AVX512DQ-NEXT:    vpmovdb %zmm2, %xmm2
4373 ; AVX512DQ-NEXT:    vpmovsxwd %ymm3, %zmm3
4374 ; AVX512DQ-NEXT:    vpmovdb %zmm3, %xmm3
4375 ; AVX512DQ-NEXT:    vzeroupper
4376 ; AVX512DQ-NEXT:    retq
4377 ;
4378 ; AVX512BW-LABEL: test_cmp_v64i16:
4379 ; AVX512BW:       # %bb.0:
4380 ; AVX512BW-NEXT:    vpcmpgtw %zmm2, %zmm0, %k0
4381 ; AVX512BW-NEXT:    vpcmpgtw %zmm3, %zmm1, %k1
4382 ; AVX512BW-NEXT:    kunpckdq %k0, %k1, %k0
4383 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
4384 ; AVX512BW-NEXT:    retq
4385   %1 = icmp sgt <64 x i16> %a0, %a1
4386   ret <64 x i1> %1
4387 }
4388
4389 define <128 x i1> @test_cmp_v128i8(<128 x i8> %a0, <128 x i8> %a1) nounwind {
4390 ; SSE2-LABEL: test_cmp_v128i8:
4391 ; SSE2:       # %bb.0:
4392 ; SSE2-NEXT:    pushq %rax
4393 ; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
4394 ; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
4395 ; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
4396 ; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
4397 ; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
4398 ; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
4399 ; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
4400 ; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
4401 ; SSE2-NEXT:    movdqa %xmm7, -{{[0-9]+}}(%rsp)
4402 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4403 ; SSE2-NEXT:    andl $1, %eax
4404 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4405 ; SSE2-NEXT:    andl $1, %ecx
4406 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
4407 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4408 ; SSE2-NEXT:    andl $1, %ecx
4409 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
4410 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4411 ; SSE2-NEXT:    andl $1, %ecx
4412 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
4413 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4414 ; SSE2-NEXT:    andl $1, %ecx
4415 ; SSE2-NEXT:    shll $4, %ecx
4416 ; SSE2-NEXT:    orl %eax, %ecx
4417 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4418 ; SSE2-NEXT:    andl $1, %eax
4419 ; SSE2-NEXT:    shll $5, %eax
4420 ; SSE2-NEXT:    orl %ecx, %eax
4421 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4422 ; SSE2-NEXT:    andl $1, %ecx
4423 ; SSE2-NEXT:    shll $6, %ecx
4424 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4425 ; SSE2-NEXT:    andl $1, %edx
4426 ; SSE2-NEXT:    shll $7, %edx
4427 ; SSE2-NEXT:    orl %ecx, %edx
4428 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4429 ; SSE2-NEXT:    andl $1, %ecx
4430 ; SSE2-NEXT:    shll $8, %ecx
4431 ; SSE2-NEXT:    orl %edx, %ecx
4432 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4433 ; SSE2-NEXT:    andl $1, %edx
4434 ; SSE2-NEXT:    shll $9, %edx
4435 ; SSE2-NEXT:    orl %ecx, %edx
4436 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4437 ; SSE2-NEXT:    andl $1, %ecx
4438 ; SSE2-NEXT:    shll $10, %ecx
4439 ; SSE2-NEXT:    orl %edx, %ecx
4440 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4441 ; SSE2-NEXT:    andl $1, %edx
4442 ; SSE2-NEXT:    shll $11, %edx
4443 ; SSE2-NEXT:    orl %ecx, %edx
4444 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4445 ; SSE2-NEXT:    andl $1, %ecx
4446 ; SSE2-NEXT:    shll $12, %ecx
4447 ; SSE2-NEXT:    orl %edx, %ecx
4448 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4449 ; SSE2-NEXT:    andl $1, %edx
4450 ; SSE2-NEXT:    shll $13, %edx
4451 ; SSE2-NEXT:    orl %ecx, %edx
4452 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4453 ; SSE2-NEXT:    andl $1, %ecx
4454 ; SSE2-NEXT:    shll $14, %ecx
4455 ; SSE2-NEXT:    orl %edx, %ecx
4456 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4457 ; SSE2-NEXT:    shll $15, %edx
4458 ; SSE2-NEXT:    orl %ecx, %edx
4459 ; SSE2-NEXT:    orl %eax, %edx
4460 ; SSE2-NEXT:    movw %dx, 14(%rdi)
4461 ; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
4462 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4463 ; SSE2-NEXT:    andl $1, %eax
4464 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4465 ; SSE2-NEXT:    andl $1, %ecx
4466 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
4467 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4468 ; SSE2-NEXT:    andl $1, %ecx
4469 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
4470 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4471 ; SSE2-NEXT:    andl $1, %ecx
4472 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
4473 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4474 ; SSE2-NEXT:    andl $1, %ecx
4475 ; SSE2-NEXT:    shll $4, %ecx
4476 ; SSE2-NEXT:    orl %eax, %ecx
4477 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4478 ; SSE2-NEXT:    andl $1, %eax
4479 ; SSE2-NEXT:    shll $5, %eax
4480 ; SSE2-NEXT:    orl %ecx, %eax
4481 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4482 ; SSE2-NEXT:    andl $1, %ecx
4483 ; SSE2-NEXT:    shll $6, %ecx
4484 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4485 ; SSE2-NEXT:    andl $1, %edx
4486 ; SSE2-NEXT:    shll $7, %edx
4487 ; SSE2-NEXT:    orl %ecx, %edx
4488 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4489 ; SSE2-NEXT:    andl $1, %ecx
4490 ; SSE2-NEXT:    shll $8, %ecx
4491 ; SSE2-NEXT:    orl %edx, %ecx
4492 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4493 ; SSE2-NEXT:    andl $1, %edx
4494 ; SSE2-NEXT:    shll $9, %edx
4495 ; SSE2-NEXT:    orl %ecx, %edx
4496 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4497 ; SSE2-NEXT:    andl $1, %ecx
4498 ; SSE2-NEXT:    shll $10, %ecx
4499 ; SSE2-NEXT:    orl %edx, %ecx
4500 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4501 ; SSE2-NEXT:    andl $1, %edx
4502 ; SSE2-NEXT:    shll $11, %edx
4503 ; SSE2-NEXT:    orl %ecx, %edx
4504 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4505 ; SSE2-NEXT:    andl $1, %ecx
4506 ; SSE2-NEXT:    shll $12, %ecx
4507 ; SSE2-NEXT:    orl %edx, %ecx
4508 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4509 ; SSE2-NEXT:    andl $1, %edx
4510 ; SSE2-NEXT:    shll $13, %edx
4511 ; SSE2-NEXT:    orl %ecx, %edx
4512 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4513 ; SSE2-NEXT:    andl $1, %ecx
4514 ; SSE2-NEXT:    shll $14, %ecx
4515 ; SSE2-NEXT:    orl %edx, %ecx
4516 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4517 ; SSE2-NEXT:    shll $15, %edx
4518 ; SSE2-NEXT:    orl %ecx, %edx
4519 ; SSE2-NEXT:    orl %eax, %edx
4520 ; SSE2-NEXT:    movw %dx, 12(%rdi)
4521 ; SSE2-NEXT:    movdqa %xmm5, -{{[0-9]+}}(%rsp)
4522 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4523 ; SSE2-NEXT:    andl $1, %eax
4524 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4525 ; SSE2-NEXT:    andl $1, %ecx
4526 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
4527 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4528 ; SSE2-NEXT:    andl $1, %ecx
4529 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
4530 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4531 ; SSE2-NEXT:    andl $1, %ecx
4532 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
4533 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4534 ; SSE2-NEXT:    andl $1, %ecx
4535 ; SSE2-NEXT:    shll $4, %ecx
4536 ; SSE2-NEXT:    orl %eax, %ecx
4537 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4538 ; SSE2-NEXT:    andl $1, %eax
4539 ; SSE2-NEXT:    shll $5, %eax
4540 ; SSE2-NEXT:    orl %ecx, %eax
4541 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4542 ; SSE2-NEXT:    andl $1, %ecx
4543 ; SSE2-NEXT:    shll $6, %ecx
4544 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4545 ; SSE2-NEXT:    andl $1, %edx
4546 ; SSE2-NEXT:    shll $7, %edx
4547 ; SSE2-NEXT:    orl %ecx, %edx
4548 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4549 ; SSE2-NEXT:    andl $1, %ecx
4550 ; SSE2-NEXT:    shll $8, %ecx
4551 ; SSE2-NEXT:    orl %edx, %ecx
4552 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4553 ; SSE2-NEXT:    andl $1, %edx
4554 ; SSE2-NEXT:    shll $9, %edx
4555 ; SSE2-NEXT:    orl %ecx, %edx
4556 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4557 ; SSE2-NEXT:    andl $1, %ecx
4558 ; SSE2-NEXT:    shll $10, %ecx
4559 ; SSE2-NEXT:    orl %edx, %ecx
4560 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4561 ; SSE2-NEXT:    andl $1, %edx
4562 ; SSE2-NEXT:    shll $11, %edx
4563 ; SSE2-NEXT:    orl %ecx, %edx
4564 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4565 ; SSE2-NEXT:    andl $1, %ecx
4566 ; SSE2-NEXT:    shll $12, %ecx
4567 ; SSE2-NEXT:    orl %edx, %ecx
4568 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4569 ; SSE2-NEXT:    andl $1, %edx
4570 ; SSE2-NEXT:    shll $13, %edx
4571 ; SSE2-NEXT:    orl %ecx, %edx
4572 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4573 ; SSE2-NEXT:    andl $1, %ecx
4574 ; SSE2-NEXT:    shll $14, %ecx
4575 ; SSE2-NEXT:    orl %edx, %ecx
4576 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4577 ; SSE2-NEXT:    shll $15, %edx
4578 ; SSE2-NEXT:    orl %ecx, %edx
4579 ; SSE2-NEXT:    orl %eax, %edx
4580 ; SSE2-NEXT:    movw %dx, 10(%rdi)
4581 ; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
4582 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4583 ; SSE2-NEXT:    andl $1, %eax
4584 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4585 ; SSE2-NEXT:    andl $1, %ecx
4586 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
4587 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4588 ; SSE2-NEXT:    andl $1, %ecx
4589 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
4590 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4591 ; SSE2-NEXT:    andl $1, %ecx
4592 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
4593 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4594 ; SSE2-NEXT:    andl $1, %ecx
4595 ; SSE2-NEXT:    shll $4, %ecx
4596 ; SSE2-NEXT:    orl %eax, %ecx
4597 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4598 ; SSE2-NEXT:    andl $1, %eax
4599 ; SSE2-NEXT:    shll $5, %eax
4600 ; SSE2-NEXT:    orl %ecx, %eax
4601 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4602 ; SSE2-NEXT:    andl $1, %ecx
4603 ; SSE2-NEXT:    shll $6, %ecx
4604 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4605 ; SSE2-NEXT:    andl $1, %edx
4606 ; SSE2-NEXT:    shll $7, %edx
4607 ; SSE2-NEXT:    orl %ecx, %edx
4608 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4609 ; SSE2-NEXT:    andl $1, %ecx
4610 ; SSE2-NEXT:    shll $8, %ecx
4611 ; SSE2-NEXT:    orl %edx, %ecx
4612 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4613 ; SSE2-NEXT:    andl $1, %edx
4614 ; SSE2-NEXT:    shll $9, %edx
4615 ; SSE2-NEXT:    orl %ecx, %edx
4616 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4617 ; SSE2-NEXT:    andl $1, %ecx
4618 ; SSE2-NEXT:    shll $10, %ecx
4619 ; SSE2-NEXT:    orl %edx, %ecx
4620 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4621 ; SSE2-NEXT:    andl $1, %edx
4622 ; SSE2-NEXT:    shll $11, %edx
4623 ; SSE2-NEXT:    orl %ecx, %edx
4624 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4625 ; SSE2-NEXT:    andl $1, %ecx
4626 ; SSE2-NEXT:    shll $12, %ecx
4627 ; SSE2-NEXT:    orl %edx, %ecx
4628 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4629 ; SSE2-NEXT:    andl $1, %edx
4630 ; SSE2-NEXT:    shll $13, %edx
4631 ; SSE2-NEXT:    orl %ecx, %edx
4632 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4633 ; SSE2-NEXT:    andl $1, %ecx
4634 ; SSE2-NEXT:    shll $14, %ecx
4635 ; SSE2-NEXT:    orl %edx, %ecx
4636 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4637 ; SSE2-NEXT:    shll $15, %edx
4638 ; SSE2-NEXT:    orl %ecx, %edx
4639 ; SSE2-NEXT:    orl %eax, %edx
4640 ; SSE2-NEXT:    movw %dx, 8(%rdi)
4641 ; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
4642 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4643 ; SSE2-NEXT:    andl $1, %eax
4644 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4645 ; SSE2-NEXT:    andl $1, %ecx
4646 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
4647 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4648 ; SSE2-NEXT:    andl $1, %ecx
4649 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
4650 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4651 ; SSE2-NEXT:    andl $1, %ecx
4652 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
4653 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4654 ; SSE2-NEXT:    andl $1, %ecx
4655 ; SSE2-NEXT:    shll $4, %ecx
4656 ; SSE2-NEXT:    orl %eax, %ecx
4657 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4658 ; SSE2-NEXT:    andl $1, %eax
4659 ; SSE2-NEXT:    shll $5, %eax
4660 ; SSE2-NEXT:    orl %ecx, %eax
4661 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4662 ; SSE2-NEXT:    andl $1, %ecx
4663 ; SSE2-NEXT:    shll $6, %ecx
4664 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4665 ; SSE2-NEXT:    andl $1, %edx
4666 ; SSE2-NEXT:    shll $7, %edx
4667 ; SSE2-NEXT:    orl %ecx, %edx
4668 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4669 ; SSE2-NEXT:    andl $1, %ecx
4670 ; SSE2-NEXT:    shll $8, %ecx
4671 ; SSE2-NEXT:    orl %edx, %ecx
4672 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4673 ; SSE2-NEXT:    andl $1, %edx
4674 ; SSE2-NEXT:    shll $9, %edx
4675 ; SSE2-NEXT:    orl %ecx, %edx
4676 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4677 ; SSE2-NEXT:    andl $1, %ecx
4678 ; SSE2-NEXT:    shll $10, %ecx
4679 ; SSE2-NEXT:    orl %edx, %ecx
4680 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4681 ; SSE2-NEXT:    andl $1, %edx
4682 ; SSE2-NEXT:    shll $11, %edx
4683 ; SSE2-NEXT:    orl %ecx, %edx
4684 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4685 ; SSE2-NEXT:    andl $1, %ecx
4686 ; SSE2-NEXT:    shll $12, %ecx
4687 ; SSE2-NEXT:    orl %edx, %ecx
4688 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4689 ; SSE2-NEXT:    andl $1, %edx
4690 ; SSE2-NEXT:    shll $13, %edx
4691 ; SSE2-NEXT:    orl %ecx, %edx
4692 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4693 ; SSE2-NEXT:    andl $1, %ecx
4694 ; SSE2-NEXT:    shll $14, %ecx
4695 ; SSE2-NEXT:    orl %edx, %ecx
4696 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4697 ; SSE2-NEXT:    shll $15, %edx
4698 ; SSE2-NEXT:    orl %ecx, %edx
4699 ; SSE2-NEXT:    orl %eax, %edx
4700 ; SSE2-NEXT:    movw %dx, 6(%rdi)
4701 ; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
4702 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4703 ; SSE2-NEXT:    andl $1, %eax
4704 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4705 ; SSE2-NEXT:    andl $1, %ecx
4706 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
4707 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4708 ; SSE2-NEXT:    andl $1, %ecx
4709 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
4710 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4711 ; SSE2-NEXT:    andl $1, %ecx
4712 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
4713 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4714 ; SSE2-NEXT:    andl $1, %ecx
4715 ; SSE2-NEXT:    shll $4, %ecx
4716 ; SSE2-NEXT:    orl %eax, %ecx
4717 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4718 ; SSE2-NEXT:    andl $1, %eax
4719 ; SSE2-NEXT:    shll $5, %eax
4720 ; SSE2-NEXT:    orl %ecx, %eax
4721 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4722 ; SSE2-NEXT:    andl $1, %ecx
4723 ; SSE2-NEXT:    shll $6, %ecx
4724 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4725 ; SSE2-NEXT:    andl $1, %edx
4726 ; SSE2-NEXT:    shll $7, %edx
4727 ; SSE2-NEXT:    orl %ecx, %edx
4728 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4729 ; SSE2-NEXT:    andl $1, %ecx
4730 ; SSE2-NEXT:    shll $8, %ecx
4731 ; SSE2-NEXT:    orl %edx, %ecx
4732 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4733 ; SSE2-NEXT:    andl $1, %edx
4734 ; SSE2-NEXT:    shll $9, %edx
4735 ; SSE2-NEXT:    orl %ecx, %edx
4736 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4737 ; SSE2-NEXT:    andl $1, %ecx
4738 ; SSE2-NEXT:    shll $10, %ecx
4739 ; SSE2-NEXT:    orl %edx, %ecx
4740 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4741 ; SSE2-NEXT:    andl $1, %edx
4742 ; SSE2-NEXT:    shll $11, %edx
4743 ; SSE2-NEXT:    orl %ecx, %edx
4744 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4745 ; SSE2-NEXT:    andl $1, %ecx
4746 ; SSE2-NEXT:    shll $12, %ecx
4747 ; SSE2-NEXT:    orl %edx, %ecx
4748 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4749 ; SSE2-NEXT:    andl $1, %edx
4750 ; SSE2-NEXT:    shll $13, %edx
4751 ; SSE2-NEXT:    orl %ecx, %edx
4752 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4753 ; SSE2-NEXT:    andl $1, %ecx
4754 ; SSE2-NEXT:    shll $14, %ecx
4755 ; SSE2-NEXT:    orl %edx, %ecx
4756 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4757 ; SSE2-NEXT:    shll $15, %edx
4758 ; SSE2-NEXT:    orl %ecx, %edx
4759 ; SSE2-NEXT:    orl %eax, %edx
4760 ; SSE2-NEXT:    movw %dx, 4(%rdi)
4761 ; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
4762 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4763 ; SSE2-NEXT:    andl $1, %eax
4764 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4765 ; SSE2-NEXT:    andl $1, %ecx
4766 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
4767 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4768 ; SSE2-NEXT:    andl $1, %ecx
4769 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
4770 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4771 ; SSE2-NEXT:    andl $1, %ecx
4772 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
4773 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4774 ; SSE2-NEXT:    andl $1, %ecx
4775 ; SSE2-NEXT:    shll $4, %ecx
4776 ; SSE2-NEXT:    orl %eax, %ecx
4777 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4778 ; SSE2-NEXT:    andl $1, %eax
4779 ; SSE2-NEXT:    shll $5, %eax
4780 ; SSE2-NEXT:    orl %ecx, %eax
4781 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4782 ; SSE2-NEXT:    andl $1, %ecx
4783 ; SSE2-NEXT:    shll $6, %ecx
4784 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4785 ; SSE2-NEXT:    andl $1, %edx
4786 ; SSE2-NEXT:    shll $7, %edx
4787 ; SSE2-NEXT:    orl %ecx, %edx
4788 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4789 ; SSE2-NEXT:    andl $1, %ecx
4790 ; SSE2-NEXT:    shll $8, %ecx
4791 ; SSE2-NEXT:    orl %edx, %ecx
4792 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4793 ; SSE2-NEXT:    andl $1, %edx
4794 ; SSE2-NEXT:    shll $9, %edx
4795 ; SSE2-NEXT:    orl %ecx, %edx
4796 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4797 ; SSE2-NEXT:    andl $1, %ecx
4798 ; SSE2-NEXT:    shll $10, %ecx
4799 ; SSE2-NEXT:    orl %edx, %ecx
4800 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4801 ; SSE2-NEXT:    andl $1, %edx
4802 ; SSE2-NEXT:    shll $11, %edx
4803 ; SSE2-NEXT:    orl %ecx, %edx
4804 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4805 ; SSE2-NEXT:    andl $1, %ecx
4806 ; SSE2-NEXT:    shll $12, %ecx
4807 ; SSE2-NEXT:    orl %edx, %ecx
4808 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4809 ; SSE2-NEXT:    andl $1, %edx
4810 ; SSE2-NEXT:    shll $13, %edx
4811 ; SSE2-NEXT:    orl %ecx, %edx
4812 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4813 ; SSE2-NEXT:    andl $1, %ecx
4814 ; SSE2-NEXT:    shll $14, %ecx
4815 ; SSE2-NEXT:    orl %edx, %ecx
4816 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4817 ; SSE2-NEXT:    shll $15, %edx
4818 ; SSE2-NEXT:    orl %ecx, %edx
4819 ; SSE2-NEXT:    orl %eax, %edx
4820 ; SSE2-NEXT:    movw %dx, 2(%rdi)
4821 ; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
4822 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4823 ; SSE2-NEXT:    andl $1, %eax
4824 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4825 ; SSE2-NEXT:    andl $1, %ecx
4826 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
4827 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4828 ; SSE2-NEXT:    andl $1, %ecx
4829 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
4830 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4831 ; SSE2-NEXT:    andl $1, %ecx
4832 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
4833 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4834 ; SSE2-NEXT:    andl $1, %ecx
4835 ; SSE2-NEXT:    shll $4, %ecx
4836 ; SSE2-NEXT:    orl %eax, %ecx
4837 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
4838 ; SSE2-NEXT:    andl $1, %eax
4839 ; SSE2-NEXT:    shll $5, %eax
4840 ; SSE2-NEXT:    orl %ecx, %eax
4841 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4842 ; SSE2-NEXT:    andl $1, %ecx
4843 ; SSE2-NEXT:    shll $6, %ecx
4844 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4845 ; SSE2-NEXT:    andl $1, %edx
4846 ; SSE2-NEXT:    shll $7, %edx
4847 ; SSE2-NEXT:    orl %ecx, %edx
4848 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4849 ; SSE2-NEXT:    andl $1, %ecx
4850 ; SSE2-NEXT:    shll $8, %ecx
4851 ; SSE2-NEXT:    orl %edx, %ecx
4852 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4853 ; SSE2-NEXT:    andl $1, %edx
4854 ; SSE2-NEXT:    shll $9, %edx
4855 ; SSE2-NEXT:    orl %ecx, %edx
4856 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4857 ; SSE2-NEXT:    andl $1, %ecx
4858 ; SSE2-NEXT:    shll $10, %ecx
4859 ; SSE2-NEXT:    orl %edx, %ecx
4860 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4861 ; SSE2-NEXT:    andl $1, %edx
4862 ; SSE2-NEXT:    shll $11, %edx
4863 ; SSE2-NEXT:    orl %ecx, %edx
4864 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4865 ; SSE2-NEXT:    andl $1, %ecx
4866 ; SSE2-NEXT:    shll $12, %ecx
4867 ; SSE2-NEXT:    orl %edx, %ecx
4868 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4869 ; SSE2-NEXT:    andl $1, %edx
4870 ; SSE2-NEXT:    shll $13, %edx
4871 ; SSE2-NEXT:    orl %ecx, %edx
4872 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
4873 ; SSE2-NEXT:    andl $1, %ecx
4874 ; SSE2-NEXT:    shll $14, %ecx
4875 ; SSE2-NEXT:    orl %edx, %ecx
4876 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
4877 ; SSE2-NEXT:    shll $15, %edx
4878 ; SSE2-NEXT:    orl %ecx, %edx
4879 ; SSE2-NEXT:    orl %eax, %edx
4880 ; SSE2-NEXT:    movw %dx, (%rdi)
4881 ; SSE2-NEXT:    movq %rdi, %rax
4882 ; SSE2-NEXT:    popq %rcx
4883 ; SSE2-NEXT:    retq
4884 ;
4885 ; SSE42-LABEL: test_cmp_v128i8:
4886 ; SSE42:       # %bb.0:
4887 ; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
4888 ; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
4889 ; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
4890 ; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
4891 ; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
4892 ; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
4893 ; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
4894 ; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
4895 ; SSE42-NEXT:    pextrb $1, %xmm7, %eax
4896 ; SSE42-NEXT:    andl $1, %eax
4897 ; SSE42-NEXT:    pextrb $0, %xmm7, %ecx
4898 ; SSE42-NEXT:    andl $1, %ecx
4899 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
4900 ; SSE42-NEXT:    pextrb $2, %xmm7, %ecx
4901 ; SSE42-NEXT:    andl $1, %ecx
4902 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
4903 ; SSE42-NEXT:    pextrb $3, %xmm7, %ecx
4904 ; SSE42-NEXT:    andl $1, %ecx
4905 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
4906 ; SSE42-NEXT:    pextrb $4, %xmm7, %ecx
4907 ; SSE42-NEXT:    andl $1, %ecx
4908 ; SSE42-NEXT:    shll $4, %ecx
4909 ; SSE42-NEXT:    orl %eax, %ecx
4910 ; SSE42-NEXT:    pextrb $5, %xmm7, %eax
4911 ; SSE42-NEXT:    andl $1, %eax
4912 ; SSE42-NEXT:    shll $5, %eax
4913 ; SSE42-NEXT:    orl %ecx, %eax
4914 ; SSE42-NEXT:    pextrb $6, %xmm7, %ecx
4915 ; SSE42-NEXT:    andl $1, %ecx
4916 ; SSE42-NEXT:    shll $6, %ecx
4917 ; SSE42-NEXT:    pextrb $7, %xmm7, %edx
4918 ; SSE42-NEXT:    andl $1, %edx
4919 ; SSE42-NEXT:    shll $7, %edx
4920 ; SSE42-NEXT:    orl %ecx, %edx
4921 ; SSE42-NEXT:    pextrb $8, %xmm7, %ecx
4922 ; SSE42-NEXT:    andl $1, %ecx
4923 ; SSE42-NEXT:    shll $8, %ecx
4924 ; SSE42-NEXT:    orl %edx, %ecx
4925 ; SSE42-NEXT:    pextrb $9, %xmm7, %edx
4926 ; SSE42-NEXT:    andl $1, %edx
4927 ; SSE42-NEXT:    shll $9, %edx
4928 ; SSE42-NEXT:    orl %ecx, %edx
4929 ; SSE42-NEXT:    pextrb $10, %xmm7, %ecx
4930 ; SSE42-NEXT:    andl $1, %ecx
4931 ; SSE42-NEXT:    shll $10, %ecx
4932 ; SSE42-NEXT:    orl %edx, %ecx
4933 ; SSE42-NEXT:    pextrb $11, %xmm7, %edx
4934 ; SSE42-NEXT:    andl $1, %edx
4935 ; SSE42-NEXT:    shll $11, %edx
4936 ; SSE42-NEXT:    orl %ecx, %edx
4937 ; SSE42-NEXT:    pextrb $12, %xmm7, %ecx
4938 ; SSE42-NEXT:    andl $1, %ecx
4939 ; SSE42-NEXT:    shll $12, %ecx
4940 ; SSE42-NEXT:    orl %edx, %ecx
4941 ; SSE42-NEXT:    pextrb $13, %xmm7, %edx
4942 ; SSE42-NEXT:    andl $1, %edx
4943 ; SSE42-NEXT:    shll $13, %edx
4944 ; SSE42-NEXT:    orl %ecx, %edx
4945 ; SSE42-NEXT:    pextrb $14, %xmm7, %ecx
4946 ; SSE42-NEXT:    andl $1, %ecx
4947 ; SSE42-NEXT:    shll $14, %ecx
4948 ; SSE42-NEXT:    orl %edx, %ecx
4949 ; SSE42-NEXT:    pextrb $15, %xmm7, %edx
4950 ; SSE42-NEXT:    shll $15, %edx
4951 ; SSE42-NEXT:    orl %ecx, %edx
4952 ; SSE42-NEXT:    orl %eax, %edx
4953 ; SSE42-NEXT:    movw %dx, 14(%rdi)
4954 ; SSE42-NEXT:    pextrb $1, %xmm6, %eax
4955 ; SSE42-NEXT:    andl $1, %eax
4956 ; SSE42-NEXT:    pextrb $0, %xmm6, %ecx
4957 ; SSE42-NEXT:    andl $1, %ecx
4958 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
4959 ; SSE42-NEXT:    pextrb $2, %xmm6, %ecx
4960 ; SSE42-NEXT:    andl $1, %ecx
4961 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
4962 ; SSE42-NEXT:    pextrb $3, %xmm6, %ecx
4963 ; SSE42-NEXT:    andl $1, %ecx
4964 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
4965 ; SSE42-NEXT:    pextrb $4, %xmm6, %ecx
4966 ; SSE42-NEXT:    andl $1, %ecx
4967 ; SSE42-NEXT:    shll $4, %ecx
4968 ; SSE42-NEXT:    orl %eax, %ecx
4969 ; SSE42-NEXT:    pextrb $5, %xmm6, %eax
4970 ; SSE42-NEXT:    andl $1, %eax
4971 ; SSE42-NEXT:    shll $5, %eax
4972 ; SSE42-NEXT:    orl %ecx, %eax
4973 ; SSE42-NEXT:    pextrb $6, %xmm6, %ecx
4974 ; SSE42-NEXT:    andl $1, %ecx
4975 ; SSE42-NEXT:    shll $6, %ecx
4976 ; SSE42-NEXT:    pextrb $7, %xmm6, %edx
4977 ; SSE42-NEXT:    andl $1, %edx
4978 ; SSE42-NEXT:    shll $7, %edx
4979 ; SSE42-NEXT:    orl %ecx, %edx
4980 ; SSE42-NEXT:    pextrb $8, %xmm6, %ecx
4981 ; SSE42-NEXT:    andl $1, %ecx
4982 ; SSE42-NEXT:    shll $8, %ecx
4983 ; SSE42-NEXT:    orl %edx, %ecx
4984 ; SSE42-NEXT:    pextrb $9, %xmm6, %edx
4985 ; SSE42-NEXT:    andl $1, %edx
4986 ; SSE42-NEXT:    shll $9, %edx
4987 ; SSE42-NEXT:    orl %ecx, %edx
4988 ; SSE42-NEXT:    pextrb $10, %xmm6, %ecx
4989 ; SSE42-NEXT:    andl $1, %ecx
4990 ; SSE42-NEXT:    shll $10, %ecx
4991 ; SSE42-NEXT:    orl %edx, %ecx
4992 ; SSE42-NEXT:    pextrb $11, %xmm6, %edx
4993 ; SSE42-NEXT:    andl $1, %edx
4994 ; SSE42-NEXT:    shll $11, %edx
4995 ; SSE42-NEXT:    orl %ecx, %edx
4996 ; SSE42-NEXT:    pextrb $12, %xmm6, %ecx
4997 ; SSE42-NEXT:    andl $1, %ecx
4998 ; SSE42-NEXT:    shll $12, %ecx
4999 ; SSE42-NEXT:    orl %edx, %ecx
5000 ; SSE42-NEXT:    pextrb $13, %xmm6, %edx
5001 ; SSE42-NEXT:    andl $1, %edx
5002 ; SSE42-NEXT:    shll $13, %edx
5003 ; SSE42-NEXT:    orl %ecx, %edx
5004 ; SSE42-NEXT:    pextrb $14, %xmm6, %ecx
5005 ; SSE42-NEXT:    andl $1, %ecx
5006 ; SSE42-NEXT:    shll $14, %ecx
5007 ; SSE42-NEXT:    orl %edx, %ecx
5008 ; SSE42-NEXT:    pextrb $15, %xmm6, %edx
5009 ; SSE42-NEXT:    shll $15, %edx
5010 ; SSE42-NEXT:    orl %ecx, %edx
5011 ; SSE42-NEXT:    orl %eax, %edx
5012 ; SSE42-NEXT:    movw %dx, 12(%rdi)
5013 ; SSE42-NEXT:    pextrb $1, %xmm5, %eax
5014 ; SSE42-NEXT:    andl $1, %eax
5015 ; SSE42-NEXT:    pextrb $0, %xmm5, %ecx
5016 ; SSE42-NEXT:    andl $1, %ecx
5017 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
5018 ; SSE42-NEXT:    pextrb $2, %xmm5, %ecx
5019 ; SSE42-NEXT:    andl $1, %ecx
5020 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
5021 ; SSE42-NEXT:    pextrb $3, %xmm5, %ecx
5022 ; SSE42-NEXT:    andl $1, %ecx
5023 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
5024 ; SSE42-NEXT:    pextrb $4, %xmm5, %ecx
5025 ; SSE42-NEXT:    andl $1, %ecx
5026 ; SSE42-NEXT:    shll $4, %ecx
5027 ; SSE42-NEXT:    orl %eax, %ecx
5028 ; SSE42-NEXT:    pextrb $5, %xmm5, %eax
5029 ; SSE42-NEXT:    andl $1, %eax
5030 ; SSE42-NEXT:    shll $5, %eax
5031 ; SSE42-NEXT:    orl %ecx, %eax
5032 ; SSE42-NEXT:    pextrb $6, %xmm5, %ecx
5033 ; SSE42-NEXT:    andl $1, %ecx
5034 ; SSE42-NEXT:    shll $6, %ecx
5035 ; SSE42-NEXT:    pextrb $7, %xmm5, %edx
5036 ; SSE42-NEXT:    andl $1, %edx
5037 ; SSE42-NEXT:    shll $7, %edx
5038 ; SSE42-NEXT:    orl %ecx, %edx
5039 ; SSE42-NEXT:    pextrb $8, %xmm5, %ecx
5040 ; SSE42-NEXT:    andl $1, %ecx
5041 ; SSE42-NEXT:    shll $8, %ecx
5042 ; SSE42-NEXT:    orl %edx, %ecx
5043 ; SSE42-NEXT:    pextrb $9, %xmm5, %edx
5044 ; SSE42-NEXT:    andl $1, %edx
5045 ; SSE42-NEXT:    shll $9, %edx
5046 ; SSE42-NEXT:    orl %ecx, %edx
5047 ; SSE42-NEXT:    pextrb $10, %xmm5, %ecx
5048 ; SSE42-NEXT:    andl $1, %ecx
5049 ; SSE42-NEXT:    shll $10, %ecx
5050 ; SSE42-NEXT:    orl %edx, %ecx
5051 ; SSE42-NEXT:    pextrb $11, %xmm5, %edx
5052 ; SSE42-NEXT:    andl $1, %edx
5053 ; SSE42-NEXT:    shll $11, %edx
5054 ; SSE42-NEXT:    orl %ecx, %edx
5055 ; SSE42-NEXT:    pextrb $12, %xmm5, %ecx
5056 ; SSE42-NEXT:    andl $1, %ecx
5057 ; SSE42-NEXT:    shll $12, %ecx
5058 ; SSE42-NEXT:    orl %edx, %ecx
5059 ; SSE42-NEXT:    pextrb $13, %xmm5, %edx
5060 ; SSE42-NEXT:    andl $1, %edx
5061 ; SSE42-NEXT:    shll $13, %edx
5062 ; SSE42-NEXT:    orl %ecx, %edx
5063 ; SSE42-NEXT:    pextrb $14, %xmm5, %ecx
5064 ; SSE42-NEXT:    andl $1, %ecx
5065 ; SSE42-NEXT:    shll $14, %ecx
5066 ; SSE42-NEXT:    orl %edx, %ecx
5067 ; SSE42-NEXT:    pextrb $15, %xmm5, %edx
5068 ; SSE42-NEXT:    shll $15, %edx
5069 ; SSE42-NEXT:    orl %ecx, %edx
5070 ; SSE42-NEXT:    orl %eax, %edx
5071 ; SSE42-NEXT:    movw %dx, 10(%rdi)
5072 ; SSE42-NEXT:    pextrb $1, %xmm4, %eax
5073 ; SSE42-NEXT:    andl $1, %eax
5074 ; SSE42-NEXT:    pextrb $0, %xmm4, %ecx
5075 ; SSE42-NEXT:    andl $1, %ecx
5076 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
5077 ; SSE42-NEXT:    pextrb $2, %xmm4, %ecx
5078 ; SSE42-NEXT:    andl $1, %ecx
5079 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
5080 ; SSE42-NEXT:    pextrb $3, %xmm4, %ecx
5081 ; SSE42-NEXT:    andl $1, %ecx
5082 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
5083 ; SSE42-NEXT:    pextrb $4, %xmm4, %ecx
5084 ; SSE42-NEXT:    andl $1, %ecx
5085 ; SSE42-NEXT:    shll $4, %ecx
5086 ; SSE42-NEXT:    orl %eax, %ecx
5087 ; SSE42-NEXT:    pextrb $5, %xmm4, %eax
5088 ; SSE42-NEXT:    andl $1, %eax
5089 ; SSE42-NEXT:    shll $5, %eax
5090 ; SSE42-NEXT:    orl %ecx, %eax
5091 ; SSE42-NEXT:    pextrb $6, %xmm4, %ecx
5092 ; SSE42-NEXT:    andl $1, %ecx
5093 ; SSE42-NEXT:    shll $6, %ecx
5094 ; SSE42-NEXT:    pextrb $7, %xmm4, %edx
5095 ; SSE42-NEXT:    andl $1, %edx
5096 ; SSE42-NEXT:    shll $7, %edx
5097 ; SSE42-NEXT:    orl %ecx, %edx
5098 ; SSE42-NEXT:    pextrb $8, %xmm4, %ecx
5099 ; SSE42-NEXT:    andl $1, %ecx
5100 ; SSE42-NEXT:    shll $8, %ecx
5101 ; SSE42-NEXT:    orl %edx, %ecx
5102 ; SSE42-NEXT:    pextrb $9, %xmm4, %edx
5103 ; SSE42-NEXT:    andl $1, %edx
5104 ; SSE42-NEXT:    shll $9, %edx
5105 ; SSE42-NEXT:    orl %ecx, %edx
5106 ; SSE42-NEXT:    pextrb $10, %xmm4, %ecx
5107 ; SSE42-NEXT:    andl $1, %ecx
5108 ; SSE42-NEXT:    shll $10, %ecx
5109 ; SSE42-NEXT:    orl %edx, %ecx
5110 ; SSE42-NEXT:    pextrb $11, %xmm4, %edx
5111 ; SSE42-NEXT:    andl $1, %edx
5112 ; SSE42-NEXT:    shll $11, %edx
5113 ; SSE42-NEXT:    orl %ecx, %edx
5114 ; SSE42-NEXT:    pextrb $12, %xmm4, %ecx
5115 ; SSE42-NEXT:    andl $1, %ecx
5116 ; SSE42-NEXT:    shll $12, %ecx
5117 ; SSE42-NEXT:    orl %edx, %ecx
5118 ; SSE42-NEXT:    pextrb $13, %xmm4, %edx
5119 ; SSE42-NEXT:    andl $1, %edx
5120 ; SSE42-NEXT:    shll $13, %edx
5121 ; SSE42-NEXT:    orl %ecx, %edx
5122 ; SSE42-NEXT:    pextrb $14, %xmm4, %ecx
5123 ; SSE42-NEXT:    andl $1, %ecx
5124 ; SSE42-NEXT:    shll $14, %ecx
5125 ; SSE42-NEXT:    orl %edx, %ecx
5126 ; SSE42-NEXT:    pextrb $15, %xmm4, %edx
5127 ; SSE42-NEXT:    shll $15, %edx
5128 ; SSE42-NEXT:    orl %ecx, %edx
5129 ; SSE42-NEXT:    orl %eax, %edx
5130 ; SSE42-NEXT:    movw %dx, 8(%rdi)
5131 ; SSE42-NEXT:    pextrb $1, %xmm3, %eax
5132 ; SSE42-NEXT:    andl $1, %eax
5133 ; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
5134 ; SSE42-NEXT:    andl $1, %ecx
5135 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
5136 ; SSE42-NEXT:    pextrb $2, %xmm3, %ecx
5137 ; SSE42-NEXT:    andl $1, %ecx
5138 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
5139 ; SSE42-NEXT:    pextrb $3, %xmm3, %ecx
5140 ; SSE42-NEXT:    andl $1, %ecx
5141 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
5142 ; SSE42-NEXT:    pextrb $4, %xmm3, %ecx
5143 ; SSE42-NEXT:    andl $1, %ecx
5144 ; SSE42-NEXT:    shll $4, %ecx
5145 ; SSE42-NEXT:    orl %eax, %ecx
5146 ; SSE42-NEXT:    pextrb $5, %xmm3, %eax
5147 ; SSE42-NEXT:    andl $1, %eax
5148 ; SSE42-NEXT:    shll $5, %eax
5149 ; SSE42-NEXT:    orl %ecx, %eax
5150 ; SSE42-NEXT:    pextrb $6, %xmm3, %ecx
5151 ; SSE42-NEXT:    andl $1, %ecx
5152 ; SSE42-NEXT:    shll $6, %ecx
5153 ; SSE42-NEXT:    pextrb $7, %xmm3, %edx
5154 ; SSE42-NEXT:    andl $1, %edx
5155 ; SSE42-NEXT:    shll $7, %edx
5156 ; SSE42-NEXT:    orl %ecx, %edx
5157 ; SSE42-NEXT:    pextrb $8, %xmm3, %ecx
5158 ; SSE42-NEXT:    andl $1, %ecx
5159 ; SSE42-NEXT:    shll $8, %ecx
5160 ; SSE42-NEXT:    orl %edx, %ecx
5161 ; SSE42-NEXT:    pextrb $9, %xmm3, %edx
5162 ; SSE42-NEXT:    andl $1, %edx
5163 ; SSE42-NEXT:    shll $9, %edx
5164 ; SSE42-NEXT:    orl %ecx, %edx
5165 ; SSE42-NEXT:    pextrb $10, %xmm3, %ecx
5166 ; SSE42-NEXT:    andl $1, %ecx
5167 ; SSE42-NEXT:    shll $10, %ecx
5168 ; SSE42-NEXT:    orl %edx, %ecx
5169 ; SSE42-NEXT:    pextrb $11, %xmm3, %edx
5170 ; SSE42-NEXT:    andl $1, %edx
5171 ; SSE42-NEXT:    shll $11, %edx
5172 ; SSE42-NEXT:    orl %ecx, %edx
5173 ; SSE42-NEXT:    pextrb $12, %xmm3, %ecx
5174 ; SSE42-NEXT:    andl $1, %ecx
5175 ; SSE42-NEXT:    shll $12, %ecx
5176 ; SSE42-NEXT:    orl %edx, %ecx
5177 ; SSE42-NEXT:    pextrb $13, %xmm3, %edx
5178 ; SSE42-NEXT:    andl $1, %edx
5179 ; SSE42-NEXT:    shll $13, %edx
5180 ; SSE42-NEXT:    orl %ecx, %edx
5181 ; SSE42-NEXT:    pextrb $14, %xmm3, %ecx
5182 ; SSE42-NEXT:    andl $1, %ecx
5183 ; SSE42-NEXT:    shll $14, %ecx
5184 ; SSE42-NEXT:    orl %edx, %ecx
5185 ; SSE42-NEXT:    pextrb $15, %xmm3, %edx
5186 ; SSE42-NEXT:    shll $15, %edx
5187 ; SSE42-NEXT:    orl %ecx, %edx
5188 ; SSE42-NEXT:    orl %eax, %edx
5189 ; SSE42-NEXT:    movw %dx, 6(%rdi)
5190 ; SSE42-NEXT:    pextrb $1, %xmm2, %eax
5191 ; SSE42-NEXT:    andl $1, %eax
5192 ; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
5193 ; SSE42-NEXT:    andl $1, %ecx
5194 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
5195 ; SSE42-NEXT:    pextrb $2, %xmm2, %ecx
5196 ; SSE42-NEXT:    andl $1, %ecx
5197 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
5198 ; SSE42-NEXT:    pextrb $3, %xmm2, %ecx
5199 ; SSE42-NEXT:    andl $1, %ecx
5200 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
5201 ; SSE42-NEXT:    pextrb $4, %xmm2, %ecx
5202 ; SSE42-NEXT:    andl $1, %ecx
5203 ; SSE42-NEXT:    shll $4, %ecx
5204 ; SSE42-NEXT:    orl %eax, %ecx
5205 ; SSE42-NEXT:    pextrb $5, %xmm2, %eax
5206 ; SSE42-NEXT:    andl $1, %eax
5207 ; SSE42-NEXT:    shll $5, %eax
5208 ; SSE42-NEXT:    orl %ecx, %eax
5209 ; SSE42-NEXT:    pextrb $6, %xmm2, %ecx
5210 ; SSE42-NEXT:    andl $1, %ecx
5211 ; SSE42-NEXT:    shll $6, %ecx
5212 ; SSE42-NEXT:    pextrb $7, %xmm2, %edx
5213 ; SSE42-NEXT:    andl $1, %edx
5214 ; SSE42-NEXT:    shll $7, %edx
5215 ; SSE42-NEXT:    orl %ecx, %edx
5216 ; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
5217 ; SSE42-NEXT:    andl $1, %ecx
5218 ; SSE42-NEXT:    shll $8, %ecx
5219 ; SSE42-NEXT:    orl %edx, %ecx
5220 ; SSE42-NEXT:    pextrb $9, %xmm2, %edx
5221 ; SSE42-NEXT:    andl $1, %edx
5222 ; SSE42-NEXT:    shll $9, %edx
5223 ; SSE42-NEXT:    orl %ecx, %edx
5224 ; SSE42-NEXT:    pextrb $10, %xmm2, %ecx
5225 ; SSE42-NEXT:    andl $1, %ecx
5226 ; SSE42-NEXT:    shll $10, %ecx
5227 ; SSE42-NEXT:    orl %edx, %ecx
5228 ; SSE42-NEXT:    pextrb $11, %xmm2, %edx
5229 ; SSE42-NEXT:    andl $1, %edx
5230 ; SSE42-NEXT:    shll $11, %edx
5231 ; SSE42-NEXT:    orl %ecx, %edx
5232 ; SSE42-NEXT:    pextrb $12, %xmm2, %ecx
5233 ; SSE42-NEXT:    andl $1, %ecx
5234 ; SSE42-NEXT:    shll $12, %ecx
5235 ; SSE42-NEXT:    orl %edx, %ecx
5236 ; SSE42-NEXT:    pextrb $13, %xmm2, %edx
5237 ; SSE42-NEXT:    andl $1, %edx
5238 ; SSE42-NEXT:    shll $13, %edx
5239 ; SSE42-NEXT:    orl %ecx, %edx
5240 ; SSE42-NEXT:    pextrb $14, %xmm2, %ecx
5241 ; SSE42-NEXT:    andl $1, %ecx
5242 ; SSE42-NEXT:    shll $14, %ecx
5243 ; SSE42-NEXT:    orl %edx, %ecx
5244 ; SSE42-NEXT:    pextrb $15, %xmm2, %edx
5245 ; SSE42-NEXT:    shll $15, %edx
5246 ; SSE42-NEXT:    orl %ecx, %edx
5247 ; SSE42-NEXT:    orl %eax, %edx
5248 ; SSE42-NEXT:    movw %dx, 4(%rdi)
5249 ; SSE42-NEXT:    pextrb $1, %xmm1, %eax
5250 ; SSE42-NEXT:    andl $1, %eax
5251 ; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
5252 ; SSE42-NEXT:    andl $1, %ecx
5253 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
5254 ; SSE42-NEXT:    pextrb $2, %xmm1, %ecx
5255 ; SSE42-NEXT:    andl $1, %ecx
5256 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
5257 ; SSE42-NEXT:    pextrb $3, %xmm1, %ecx
5258 ; SSE42-NEXT:    andl $1, %ecx
5259 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
5260 ; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
5261 ; SSE42-NEXT:    andl $1, %ecx
5262 ; SSE42-NEXT:    shll $4, %ecx
5263 ; SSE42-NEXT:    orl %eax, %ecx
5264 ; SSE42-NEXT:    pextrb $5, %xmm1, %eax
5265 ; SSE42-NEXT:    andl $1, %eax
5266 ; SSE42-NEXT:    shll $5, %eax
5267 ; SSE42-NEXT:    orl %ecx, %eax
5268 ; SSE42-NEXT:    pextrb $6, %xmm1, %ecx
5269 ; SSE42-NEXT:    andl $1, %ecx
5270 ; SSE42-NEXT:    shll $6, %ecx
5271 ; SSE42-NEXT:    pextrb $7, %xmm1, %edx
5272 ; SSE42-NEXT:    andl $1, %edx
5273 ; SSE42-NEXT:    shll $7, %edx
5274 ; SSE42-NEXT:    orl %ecx, %edx
5275 ; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
5276 ; SSE42-NEXT:    andl $1, %ecx
5277 ; SSE42-NEXT:    shll $8, %ecx
5278 ; SSE42-NEXT:    orl %edx, %ecx
5279 ; SSE42-NEXT:    pextrb $9, %xmm1, %edx
5280 ; SSE42-NEXT:    andl $1, %edx
5281 ; SSE42-NEXT:    shll $9, %edx
5282 ; SSE42-NEXT:    orl %ecx, %edx
5283 ; SSE42-NEXT:    pextrb $10, %xmm1, %ecx
5284 ; SSE42-NEXT:    andl $1, %ecx
5285 ; SSE42-NEXT:    shll $10, %ecx
5286 ; SSE42-NEXT:    orl %edx, %ecx
5287 ; SSE42-NEXT:    pextrb $11, %xmm1, %edx
5288 ; SSE42-NEXT:    andl $1, %edx
5289 ; SSE42-NEXT:    shll $11, %edx
5290 ; SSE42-NEXT:    orl %ecx, %edx
5291 ; SSE42-NEXT:    pextrb $12, %xmm1, %ecx
5292 ; SSE42-NEXT:    andl $1, %ecx
5293 ; SSE42-NEXT:    shll $12, %ecx
5294 ; SSE42-NEXT:    orl %edx, %ecx
5295 ; SSE42-NEXT:    pextrb $13, %xmm1, %edx
5296 ; SSE42-NEXT:    andl $1, %edx
5297 ; SSE42-NEXT:    shll $13, %edx
5298 ; SSE42-NEXT:    orl %ecx, %edx
5299 ; SSE42-NEXT:    pextrb $14, %xmm1, %ecx
5300 ; SSE42-NEXT:    andl $1, %ecx
5301 ; SSE42-NEXT:    shll $14, %ecx
5302 ; SSE42-NEXT:    orl %edx, %ecx
5303 ; SSE42-NEXT:    pextrb $15, %xmm1, %edx
5304 ; SSE42-NEXT:    shll $15, %edx
5305 ; SSE42-NEXT:    orl %ecx, %edx
5306 ; SSE42-NEXT:    orl %eax, %edx
5307 ; SSE42-NEXT:    movw %dx, 2(%rdi)
5308 ; SSE42-NEXT:    pextrb $1, %xmm0, %eax
5309 ; SSE42-NEXT:    andl $1, %eax
5310 ; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
5311 ; SSE42-NEXT:    andl $1, %ecx
5312 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
5313 ; SSE42-NEXT:    pextrb $2, %xmm0, %ecx
5314 ; SSE42-NEXT:    andl $1, %ecx
5315 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
5316 ; SSE42-NEXT:    pextrb $3, %xmm0, %ecx
5317 ; SSE42-NEXT:    andl $1, %ecx
5318 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
5319 ; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
5320 ; SSE42-NEXT:    andl $1, %ecx
5321 ; SSE42-NEXT:    shll $4, %ecx
5322 ; SSE42-NEXT:    orl %eax, %ecx
5323 ; SSE42-NEXT:    pextrb $5, %xmm0, %eax
5324 ; SSE42-NEXT:    andl $1, %eax
5325 ; SSE42-NEXT:    shll $5, %eax
5326 ; SSE42-NEXT:    orl %ecx, %eax
5327 ; SSE42-NEXT:    pextrb $6, %xmm0, %ecx
5328 ; SSE42-NEXT:    andl $1, %ecx
5329 ; SSE42-NEXT:    shll $6, %ecx
5330 ; SSE42-NEXT:    pextrb $7, %xmm0, %edx
5331 ; SSE42-NEXT:    andl $1, %edx
5332 ; SSE42-NEXT:    shll $7, %edx
5333 ; SSE42-NEXT:    orl %ecx, %edx
5334 ; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
5335 ; SSE42-NEXT:    andl $1, %ecx
5336 ; SSE42-NEXT:    shll $8, %ecx
5337 ; SSE42-NEXT:    orl %edx, %ecx
5338 ; SSE42-NEXT:    pextrb $9, %xmm0, %edx
5339 ; SSE42-NEXT:    andl $1, %edx
5340 ; SSE42-NEXT:    shll $9, %edx
5341 ; SSE42-NEXT:    orl %ecx, %edx
5342 ; SSE42-NEXT:    pextrb $10, %xmm0, %ecx
5343 ; SSE42-NEXT:    andl $1, %ecx
5344 ; SSE42-NEXT:    shll $10, %ecx
5345 ; SSE42-NEXT:    orl %edx, %ecx
5346 ; SSE42-NEXT:    pextrb $11, %xmm0, %edx
5347 ; SSE42-NEXT:    andl $1, %edx
5348 ; SSE42-NEXT:    shll $11, %edx
5349 ; SSE42-NEXT:    orl %ecx, %edx
5350 ; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
5351 ; SSE42-NEXT:    andl $1, %ecx
5352 ; SSE42-NEXT:    shll $12, %ecx
5353 ; SSE42-NEXT:    orl %edx, %ecx
5354 ; SSE42-NEXT:    pextrb $13, %xmm0, %edx
5355 ; SSE42-NEXT:    andl $1, %edx
5356 ; SSE42-NEXT:    shll $13, %edx
5357 ; SSE42-NEXT:    orl %ecx, %edx
5358 ; SSE42-NEXT:    pextrb $14, %xmm0, %ecx
5359 ; SSE42-NEXT:    andl $1, %ecx
5360 ; SSE42-NEXT:    shll $14, %ecx
5361 ; SSE42-NEXT:    orl %edx, %ecx
5362 ; SSE42-NEXT:    pextrb $15, %xmm0, %edx
5363 ; SSE42-NEXT:    shll $15, %edx
5364 ; SSE42-NEXT:    orl %ecx, %edx
5365 ; SSE42-NEXT:    orl %eax, %edx
5366 ; SSE42-NEXT:    movw %dx, (%rdi)
5367 ; SSE42-NEXT:    movq %rdi, %rax
5368 ; SSE42-NEXT:    retq
5369 ;
5370 ; AVX1-LABEL: test_cmp_v128i8:
5371 ; AVX1:       # %bb.0:
5372 ; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm8
5373 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm9
5374 ; AVX1-NEXT:    vpcmpgtb %xmm8, %xmm9, %xmm8
5375 ; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm9
5376 ; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm4
5377 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
5378 ; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm4
5379 ; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm1
5380 ; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm0
5381 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
5382 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm5, %xmm5
5383 ; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm2
5384 ; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm0
5385 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
5386 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm6, %xmm6
5387 ; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm3
5388 ; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
5389 ; AVX1-NEXT:    andl $1, %eax
5390 ; AVX1-NEXT:    vpextrb $0, %xmm3, %ecx
5391 ; AVX1-NEXT:    andl $1, %ecx
5392 ; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
5393 ; AVX1-NEXT:    vpextrb $2, %xmm3, %ecx
5394 ; AVX1-NEXT:    andl $1, %ecx
5395 ; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
5396 ; AVX1-NEXT:    vpextrb $3, %xmm3, %ecx
5397 ; AVX1-NEXT:    andl $1, %ecx
5398 ; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
5399 ; AVX1-NEXT:    vpextrb $4, %xmm3, %ecx
5400 ; AVX1-NEXT:    andl $1, %ecx
5401 ; AVX1-NEXT:    shll $4, %ecx
5402 ; AVX1-NEXT:    orl %eax, %ecx
5403 ; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
5404 ; AVX1-NEXT:    andl $1, %eax
5405 ; AVX1-NEXT:    shll $5, %eax
5406 ; AVX1-NEXT:    orl %ecx, %eax
5407 ; AVX1-NEXT:    vpextrb $6, %xmm3, %ecx
5408 ; AVX1-NEXT:    andl $1, %ecx
5409 ; AVX1-NEXT:    shll $6, %ecx
5410 ; AVX1-NEXT:    vpextrb $7, %xmm3, %edx
5411 ; AVX1-NEXT:    andl $1, %edx
5412 ; AVX1-NEXT:    shll $7, %edx
5413 ; AVX1-NEXT:    orl %ecx, %edx
5414 ; AVX1-NEXT:    vpextrb $8, %xmm3, %ecx
5415 ; AVX1-NEXT:    andl $1, %ecx
5416 ; AVX1-NEXT:    shll $8, %ecx
5417 ; AVX1-NEXT:    orl %edx, %ecx
5418 ; AVX1-NEXT:    vpextrb $9, %xmm3, %edx
5419 ; AVX1-NEXT:    andl $1, %edx
5420 ; AVX1-NEXT:    shll $9, %edx
5421 ; AVX1-NEXT:    orl %ecx, %edx
5422 ; AVX1-NEXT:    vpextrb $10, %xmm3, %ecx
5423 ; AVX1-NEXT:    andl $1, %ecx
5424 ; AVX1-NEXT:    shll $10, %ecx
5425 ; AVX1-NEXT:    orl %edx, %ecx
5426 ; AVX1-NEXT:    vpextrb $11, %xmm3, %edx
5427 ; AVX1-NEXT:    andl $1, %edx
5428 ; AVX1-NEXT:    shll $11, %edx
5429 ; AVX1-NEXT:    orl %ecx, %edx
5430 ; AVX1-NEXT:    vpextrb $12, %xmm3, %ecx
5431 ; AVX1-NEXT:    andl $1, %ecx
5432 ; AVX1-NEXT:    shll $12, %ecx
5433 ; AVX1-NEXT:    orl %edx, %ecx
5434 ; AVX1-NEXT:    vpextrb $13, %xmm3, %edx
5435 ; AVX1-NEXT:    andl $1, %edx
5436 ; AVX1-NEXT:    shll $13, %edx
5437 ; AVX1-NEXT:    orl %ecx, %edx
5438 ; AVX1-NEXT:    vpextrb $14, %xmm3, %ecx
5439 ; AVX1-NEXT:    andl $1, %ecx
5440 ; AVX1-NEXT:    shll $14, %ecx
5441 ; AVX1-NEXT:    orl %edx, %ecx
5442 ; AVX1-NEXT:    vpextrb $15, %xmm3, %edx
5443 ; AVX1-NEXT:    andl $1, %edx
5444 ; AVX1-NEXT:    shll $15, %edx
5445 ; AVX1-NEXT:    orl %ecx, %edx
5446 ; AVX1-NEXT:    vpextrb $0, %xmm6, %ecx
5447 ; AVX1-NEXT:    andl $1, %ecx
5448 ; AVX1-NEXT:    shll $16, %ecx
5449 ; AVX1-NEXT:    orl %edx, %ecx
5450 ; AVX1-NEXT:    vpextrb $1, %xmm6, %edx
5451 ; AVX1-NEXT:    andl $1, %edx
5452 ; AVX1-NEXT:    shll $17, %edx
5453 ; AVX1-NEXT:    orl %ecx, %edx
5454 ; AVX1-NEXT:    vpextrb $2, %xmm6, %ecx
5455 ; AVX1-NEXT:    andl $1, %ecx
5456 ; AVX1-NEXT:    shll $18, %ecx
5457 ; AVX1-NEXT:    orl %edx, %ecx
5458 ; AVX1-NEXT:    vpextrb $3, %xmm6, %edx
5459 ; AVX1-NEXT:    andl $1, %edx
5460 ; AVX1-NEXT:    shll $19, %edx
5461 ; AVX1-NEXT:    orl %ecx, %edx
5462 ; AVX1-NEXT:    vpextrb $4, %xmm6, %ecx
5463 ; AVX1-NEXT:    andl $1, %ecx
5464 ; AVX1-NEXT:    shll $20, %ecx
5465 ; AVX1-NEXT:    orl %edx, %ecx
5466 ; AVX1-NEXT:    vpextrb $5, %xmm6, %edx
5467 ; AVX1-NEXT:    andl $1, %edx
5468 ; AVX1-NEXT:    shll $21, %edx
5469 ; AVX1-NEXT:    orl %ecx, %edx
5470 ; AVX1-NEXT:    vpextrb $6, %xmm6, %ecx
5471 ; AVX1-NEXT:    andl $1, %ecx
5472 ; AVX1-NEXT:    shll $22, %ecx
5473 ; AVX1-NEXT:    orl %edx, %ecx
5474 ; AVX1-NEXT:    vpextrb $7, %xmm6, %edx
5475 ; AVX1-NEXT:    andl $1, %edx
5476 ; AVX1-NEXT:    shll $23, %edx
5477 ; AVX1-NEXT:    orl %ecx, %edx
5478 ; AVX1-NEXT:    vpextrb $8, %xmm6, %ecx
5479 ; AVX1-NEXT:    andl $1, %ecx
5480 ; AVX1-NEXT:    shll $24, %ecx
5481 ; AVX1-NEXT:    orl %edx, %ecx
5482 ; AVX1-NEXT:    vpextrb $9, %xmm6, %edx
5483 ; AVX1-NEXT:    andl $1, %edx
5484 ; AVX1-NEXT:    shll $25, %edx
5485 ; AVX1-NEXT:    orl %ecx, %edx
5486 ; AVX1-NEXT:    vpextrb $10, %xmm6, %ecx
5487 ; AVX1-NEXT:    andl $1, %ecx
5488 ; AVX1-NEXT:    shll $26, %ecx
5489 ; AVX1-NEXT:    orl %edx, %ecx
5490 ; AVX1-NEXT:    vpextrb $11, %xmm6, %edx
5491 ; AVX1-NEXT:    andl $1, %edx
5492 ; AVX1-NEXT:    shll $27, %edx
5493 ; AVX1-NEXT:    orl %ecx, %edx
5494 ; AVX1-NEXT:    vpextrb $12, %xmm6, %ecx
5495 ; AVX1-NEXT:    andl $1, %ecx
5496 ; AVX1-NEXT:    shll $28, %ecx
5497 ; AVX1-NEXT:    orl %edx, %ecx
5498 ; AVX1-NEXT:    vpextrb $13, %xmm6, %edx
5499 ; AVX1-NEXT:    andl $1, %edx
5500 ; AVX1-NEXT:    shll $29, %edx
5501 ; AVX1-NEXT:    orl %ecx, %edx
5502 ; AVX1-NEXT:    vpextrb $14, %xmm6, %ecx
5503 ; AVX1-NEXT:    andl $1, %ecx
5504 ; AVX1-NEXT:    shll $30, %ecx
5505 ; AVX1-NEXT:    orl %edx, %ecx
5506 ; AVX1-NEXT:    vpextrb $15, %xmm6, %edx
5507 ; AVX1-NEXT:    shll $31, %edx
5508 ; AVX1-NEXT:    orl %ecx, %edx
5509 ; AVX1-NEXT:    orl %eax, %edx
5510 ; AVX1-NEXT:    movl %edx, 12(%rdi)
5511 ; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
5512 ; AVX1-NEXT:    andl $1, %eax
5513 ; AVX1-NEXT:    vpextrb $0, %xmm2, %ecx
5514 ; AVX1-NEXT:    andl $1, %ecx
5515 ; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
5516 ; AVX1-NEXT:    vpextrb $2, %xmm2, %ecx
5517 ; AVX1-NEXT:    andl $1, %ecx
5518 ; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
5519 ; AVX1-NEXT:    vpextrb $3, %xmm2, %ecx
5520 ; AVX1-NEXT:    andl $1, %ecx
5521 ; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
5522 ; AVX1-NEXT:    vpextrb $4, %xmm2, %ecx
5523 ; AVX1-NEXT:    andl $1, %ecx
5524 ; AVX1-NEXT:    shll $4, %ecx
5525 ; AVX1-NEXT:    orl %eax, %ecx
5526 ; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
5527 ; AVX1-NEXT:    andl $1, %eax
5528 ; AVX1-NEXT:    shll $5, %eax
5529 ; AVX1-NEXT:    orl %ecx, %eax
5530 ; AVX1-NEXT:    vpextrb $6, %xmm2, %ecx
5531 ; AVX1-NEXT:    andl $1, %ecx
5532 ; AVX1-NEXT:    shll $6, %ecx
5533 ; AVX1-NEXT:    vpextrb $7, %xmm2, %edx
5534 ; AVX1-NEXT:    andl $1, %edx
5535 ; AVX1-NEXT:    shll $7, %edx
5536 ; AVX1-NEXT:    orl %ecx, %edx
5537 ; AVX1-NEXT:    vpextrb $8, %xmm2, %ecx
5538 ; AVX1-NEXT:    andl $1, %ecx
5539 ; AVX1-NEXT:    shll $8, %ecx
5540 ; AVX1-NEXT:    orl %edx, %ecx
5541 ; AVX1-NEXT:    vpextrb $9, %xmm2, %edx
5542 ; AVX1-NEXT:    andl $1, %edx
5543 ; AVX1-NEXT:    shll $9, %edx
5544 ; AVX1-NEXT:    orl %ecx, %edx
5545 ; AVX1-NEXT:    vpextrb $10, %xmm2, %ecx
5546 ; AVX1-NEXT:    andl $1, %ecx
5547 ; AVX1-NEXT:    shll $10, %ecx
5548 ; AVX1-NEXT:    orl %edx, %ecx
5549 ; AVX1-NEXT:    vpextrb $11, %xmm2, %edx
5550 ; AVX1-NEXT:    andl $1, %edx
5551 ; AVX1-NEXT:    shll $11, %edx
5552 ; AVX1-NEXT:    orl %ecx, %edx
5553 ; AVX1-NEXT:    vpextrb $12, %xmm2, %ecx
5554 ; AVX1-NEXT:    andl $1, %ecx
5555 ; AVX1-NEXT:    shll $12, %ecx
5556 ; AVX1-NEXT:    orl %edx, %ecx
5557 ; AVX1-NEXT:    vpextrb $13, %xmm2, %edx
5558 ; AVX1-NEXT:    andl $1, %edx
5559 ; AVX1-NEXT:    shll $13, %edx
5560 ; AVX1-NEXT:    orl %ecx, %edx
5561 ; AVX1-NEXT:    vpextrb $14, %xmm2, %ecx
5562 ; AVX1-NEXT:    andl $1, %ecx
5563 ; AVX1-NEXT:    shll $14, %ecx
5564 ; AVX1-NEXT:    orl %edx, %ecx
5565 ; AVX1-NEXT:    vpextrb $15, %xmm2, %edx
5566 ; AVX1-NEXT:    andl $1, %edx
5567 ; AVX1-NEXT:    shll $15, %edx
5568 ; AVX1-NEXT:    orl %ecx, %edx
5569 ; AVX1-NEXT:    vpextrb $0, %xmm5, %ecx
5570 ; AVX1-NEXT:    andl $1, %ecx
5571 ; AVX1-NEXT:    shll $16, %ecx
5572 ; AVX1-NEXT:    orl %edx, %ecx
5573 ; AVX1-NEXT:    vpextrb $1, %xmm5, %edx
5574 ; AVX1-NEXT:    andl $1, %edx
5575 ; AVX1-NEXT:    shll $17, %edx
5576 ; AVX1-NEXT:    orl %ecx, %edx
5577 ; AVX1-NEXT:    vpextrb $2, %xmm5, %ecx
5578 ; AVX1-NEXT:    andl $1, %ecx
5579 ; AVX1-NEXT:    shll $18, %ecx
5580 ; AVX1-NEXT:    orl %edx, %ecx
5581 ; AVX1-NEXT:    vpextrb $3, %xmm5, %edx
5582 ; AVX1-NEXT:    andl $1, %edx
5583 ; AVX1-NEXT:    shll $19, %edx
5584 ; AVX1-NEXT:    orl %ecx, %edx
5585 ; AVX1-NEXT:    vpextrb $4, %xmm5, %ecx
5586 ; AVX1-NEXT:    andl $1, %ecx
5587 ; AVX1-NEXT:    shll $20, %ecx
5588 ; AVX1-NEXT:    orl %edx, %ecx
5589 ; AVX1-NEXT:    vpextrb $5, %xmm5, %edx
5590 ; AVX1-NEXT:    andl $1, %edx
5591 ; AVX1-NEXT:    shll $21, %edx
5592 ; AVX1-NEXT:    orl %ecx, %edx
5593 ; AVX1-NEXT:    vpextrb $6, %xmm5, %ecx
5594 ; AVX1-NEXT:    andl $1, %ecx
5595 ; AVX1-NEXT:    shll $22, %ecx
5596 ; AVX1-NEXT:    orl %edx, %ecx
5597 ; AVX1-NEXT:    vpextrb $7, %xmm5, %edx
5598 ; AVX1-NEXT:    andl $1, %edx
5599 ; AVX1-NEXT:    shll $23, %edx
5600 ; AVX1-NEXT:    orl %ecx, %edx
5601 ; AVX1-NEXT:    vpextrb $8, %xmm5, %ecx
5602 ; AVX1-NEXT:    andl $1, %ecx
5603 ; AVX1-NEXT:    shll $24, %ecx
5604 ; AVX1-NEXT:    orl %edx, %ecx
5605 ; AVX1-NEXT:    vpextrb $9, %xmm5, %edx
5606 ; AVX1-NEXT:    andl $1, %edx
5607 ; AVX1-NEXT:    shll $25, %edx
5608 ; AVX1-NEXT:    orl %ecx, %edx
5609 ; AVX1-NEXT:    vpextrb $10, %xmm5, %ecx
5610 ; AVX1-NEXT:    andl $1, %ecx
5611 ; AVX1-NEXT:    shll $26, %ecx
5612 ; AVX1-NEXT:    orl %edx, %ecx
5613 ; AVX1-NEXT:    vpextrb $11, %xmm5, %edx
5614 ; AVX1-NEXT:    andl $1, %edx
5615 ; AVX1-NEXT:    shll $27, %edx
5616 ; AVX1-NEXT:    orl %ecx, %edx
5617 ; AVX1-NEXT:    vpextrb $12, %xmm5, %ecx
5618 ; AVX1-NEXT:    andl $1, %ecx
5619 ; AVX1-NEXT:    shll $28, %ecx
5620 ; AVX1-NEXT:    orl %edx, %ecx
5621 ; AVX1-NEXT:    vpextrb $13, %xmm5, %edx
5622 ; AVX1-NEXT:    andl $1, %edx
5623 ; AVX1-NEXT:    shll $29, %edx
5624 ; AVX1-NEXT:    orl %ecx, %edx
5625 ; AVX1-NEXT:    vpextrb $14, %xmm5, %ecx
5626 ; AVX1-NEXT:    andl $1, %ecx
5627 ; AVX1-NEXT:    shll $30, %ecx
5628 ; AVX1-NEXT:    orl %edx, %ecx
5629 ; AVX1-NEXT:    vpextrb $15, %xmm5, %edx
5630 ; AVX1-NEXT:    shll $31, %edx
5631 ; AVX1-NEXT:    orl %ecx, %edx
5632 ; AVX1-NEXT:    orl %eax, %edx
5633 ; AVX1-NEXT:    movl %edx, 8(%rdi)
5634 ; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
5635 ; AVX1-NEXT:    andl $1, %eax
5636 ; AVX1-NEXT:    vpextrb $0, %xmm1, %ecx
5637 ; AVX1-NEXT:    andl $1, %ecx
5638 ; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
5639 ; AVX1-NEXT:    vpextrb $2, %xmm1, %ecx
5640 ; AVX1-NEXT:    andl $1, %ecx
5641 ; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
5642 ; AVX1-NEXT:    vpextrb $3, %xmm1, %ecx
5643 ; AVX1-NEXT:    andl $1, %ecx
5644 ; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
5645 ; AVX1-NEXT:    vpextrb $4, %xmm1, %ecx
5646 ; AVX1-NEXT:    andl $1, %ecx
5647 ; AVX1-NEXT:    shll $4, %ecx
5648 ; AVX1-NEXT:    orl %eax, %ecx
5649 ; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
5650 ; AVX1-NEXT:    andl $1, %eax
5651 ; AVX1-NEXT:    shll $5, %eax
5652 ; AVX1-NEXT:    orl %ecx, %eax
5653 ; AVX1-NEXT:    vpextrb $6, %xmm1, %ecx
5654 ; AVX1-NEXT:    andl $1, %ecx
5655 ; AVX1-NEXT:    shll $6, %ecx
5656 ; AVX1-NEXT:    vpextrb $7, %xmm1, %edx
5657 ; AVX1-NEXT:    andl $1, %edx
5658 ; AVX1-NEXT:    shll $7, %edx
5659 ; AVX1-NEXT:    orl %ecx, %edx
5660 ; AVX1-NEXT:    vpextrb $8, %xmm1, %ecx
5661 ; AVX1-NEXT:    andl $1, %ecx
5662 ; AVX1-NEXT:    shll $8, %ecx
5663 ; AVX1-NEXT:    orl %edx, %ecx
5664 ; AVX1-NEXT:    vpextrb $9, %xmm1, %edx
5665 ; AVX1-NEXT:    andl $1, %edx
5666 ; AVX1-NEXT:    shll $9, %edx
5667 ; AVX1-NEXT:    orl %ecx, %edx
5668 ; AVX1-NEXT:    vpextrb $10, %xmm1, %ecx
5669 ; AVX1-NEXT:    andl $1, %ecx
5670 ; AVX1-NEXT:    shll $10, %ecx
5671 ; AVX1-NEXT:    orl %edx, %ecx
5672 ; AVX1-NEXT:    vpextrb $11, %xmm1, %edx
5673 ; AVX1-NEXT:    andl $1, %edx
5674 ; AVX1-NEXT:    shll $11, %edx
5675 ; AVX1-NEXT:    orl %ecx, %edx
5676 ; AVX1-NEXT:    vpextrb $12, %xmm1, %ecx
5677 ; AVX1-NEXT:    andl $1, %ecx
5678 ; AVX1-NEXT:    shll $12, %ecx
5679 ; AVX1-NEXT:    orl %edx, %ecx
5680 ; AVX1-NEXT:    vpextrb $13, %xmm1, %edx
5681 ; AVX1-NEXT:    andl $1, %edx
5682 ; AVX1-NEXT:    shll $13, %edx
5683 ; AVX1-NEXT:    orl %ecx, %edx
5684 ; AVX1-NEXT:    vpextrb $14, %xmm1, %ecx
5685 ; AVX1-NEXT:    andl $1, %ecx
5686 ; AVX1-NEXT:    shll $14, %ecx
5687 ; AVX1-NEXT:    orl %edx, %ecx
5688 ; AVX1-NEXT:    vpextrb $15, %xmm1, %edx
5689 ; AVX1-NEXT:    andl $1, %edx
5690 ; AVX1-NEXT:    shll $15, %edx
5691 ; AVX1-NEXT:    orl %ecx, %edx
5692 ; AVX1-NEXT:    vpextrb $0, %xmm4, %ecx
5693 ; AVX1-NEXT:    andl $1, %ecx
5694 ; AVX1-NEXT:    shll $16, %ecx
5695 ; AVX1-NEXT:    orl %edx, %ecx
5696 ; AVX1-NEXT:    vpextrb $1, %xmm4, %edx
5697 ; AVX1-NEXT:    andl $1, %edx
5698 ; AVX1-NEXT:    shll $17, %edx
5699 ; AVX1-NEXT:    orl %ecx, %edx
5700 ; AVX1-NEXT:    vpextrb $2, %xmm4, %ecx
5701 ; AVX1-NEXT:    andl $1, %ecx
5702 ; AVX1-NEXT:    shll $18, %ecx
5703 ; AVX1-NEXT:    orl %edx, %ecx
5704 ; AVX1-NEXT:    vpextrb $3, %xmm4, %edx
5705 ; AVX1-NEXT:    andl $1, %edx
5706 ; AVX1-NEXT:    shll $19, %edx
5707 ; AVX1-NEXT:    orl %ecx, %edx
5708 ; AVX1-NEXT:    vpextrb $4, %xmm4, %ecx
5709 ; AVX1-NEXT:    andl $1, %ecx
5710 ; AVX1-NEXT:    shll $20, %ecx
5711 ; AVX1-NEXT:    orl %edx, %ecx
5712 ; AVX1-NEXT:    vpextrb $5, %xmm4, %edx
5713 ; AVX1-NEXT:    andl $1, %edx
5714 ; AVX1-NEXT:    shll $21, %edx
5715 ; AVX1-NEXT:    orl %ecx, %edx
5716 ; AVX1-NEXT:    vpextrb $6, %xmm4, %ecx
5717 ; AVX1-NEXT:    andl $1, %ecx
5718 ; AVX1-NEXT:    shll $22, %ecx
5719 ; AVX1-NEXT:    orl %edx, %ecx
5720 ; AVX1-NEXT:    vpextrb $7, %xmm4, %edx
5721 ; AVX1-NEXT:    andl $1, %edx
5722 ; AVX1-NEXT:    shll $23, %edx
5723 ; AVX1-NEXT:    orl %ecx, %edx
5724 ; AVX1-NEXT:    vpextrb $8, %xmm4, %ecx
5725 ; AVX1-NEXT:    andl $1, %ecx
5726 ; AVX1-NEXT:    shll $24, %ecx
5727 ; AVX1-NEXT:    orl %edx, %ecx
5728 ; AVX1-NEXT:    vpextrb $9, %xmm4, %edx
5729 ; AVX1-NEXT:    andl $1, %edx
5730 ; AVX1-NEXT:    shll $25, %edx
5731 ; AVX1-NEXT:    orl %ecx, %edx
5732 ; AVX1-NEXT:    vpextrb $10, %xmm4, %ecx
5733 ; AVX1-NEXT:    andl $1, %ecx
5734 ; AVX1-NEXT:    shll $26, %ecx
5735 ; AVX1-NEXT:    orl %edx, %ecx
5736 ; AVX1-NEXT:    vpextrb $11, %xmm4, %edx
5737 ; AVX1-NEXT:    andl $1, %edx
5738 ; AVX1-NEXT:    shll $27, %edx
5739 ; AVX1-NEXT:    orl %ecx, %edx
5740 ; AVX1-NEXT:    vpextrb $12, %xmm4, %ecx
5741 ; AVX1-NEXT:    andl $1, %ecx
5742 ; AVX1-NEXT:    shll $28, %ecx
5743 ; AVX1-NEXT:    orl %edx, %ecx
5744 ; AVX1-NEXT:    vpextrb $13, %xmm4, %edx
5745 ; AVX1-NEXT:    andl $1, %edx
5746 ; AVX1-NEXT:    shll $29, %edx
5747 ; AVX1-NEXT:    orl %ecx, %edx
5748 ; AVX1-NEXT:    vpextrb $14, %xmm4, %ecx
5749 ; AVX1-NEXT:    andl $1, %ecx
5750 ; AVX1-NEXT:    shll $30, %ecx
5751 ; AVX1-NEXT:    orl %edx, %ecx
5752 ; AVX1-NEXT:    vpextrb $15, %xmm4, %edx
5753 ; AVX1-NEXT:    shll $31, %edx
5754 ; AVX1-NEXT:    orl %ecx, %edx
5755 ; AVX1-NEXT:    orl %eax, %edx
5756 ; AVX1-NEXT:    movl %edx, 4(%rdi)
5757 ; AVX1-NEXT:    vpextrb $1, %xmm9, %eax
5758 ; AVX1-NEXT:    andl $1, %eax
5759 ; AVX1-NEXT:    vpextrb $0, %xmm9, %ecx
5760 ; AVX1-NEXT:    andl $1, %ecx
5761 ; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
5762 ; AVX1-NEXT:    vpextrb $2, %xmm9, %ecx
5763 ; AVX1-NEXT:    andl $1, %ecx
5764 ; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
5765 ; AVX1-NEXT:    vpextrb $3, %xmm9, %ecx
5766 ; AVX1-NEXT:    andl $1, %ecx
5767 ; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
5768 ; AVX1-NEXT:    vpextrb $4, %xmm9, %ecx
5769 ; AVX1-NEXT:    andl $1, %ecx
5770 ; AVX1-NEXT:    shll $4, %ecx
5771 ; AVX1-NEXT:    orl %eax, %ecx
5772 ; AVX1-NEXT:    vpextrb $5, %xmm9, %eax
5773 ; AVX1-NEXT:    andl $1, %eax
5774 ; AVX1-NEXT:    shll $5, %eax
5775 ; AVX1-NEXT:    orl %ecx, %eax
5776 ; AVX1-NEXT:    vpextrb $6, %xmm9, %ecx
5777 ; AVX1-NEXT:    andl $1, %ecx
5778 ; AVX1-NEXT:    shll $6, %ecx
5779 ; AVX1-NEXT:    vpextrb $7, %xmm9, %edx
5780 ; AVX1-NEXT:    andl $1, %edx
5781 ; AVX1-NEXT:    shll $7, %edx
5782 ; AVX1-NEXT:    orl %ecx, %edx
5783 ; AVX1-NEXT:    vpextrb $8, %xmm9, %ecx
5784 ; AVX1-NEXT:    andl $1, %ecx
5785 ; AVX1-NEXT:    shll $8, %ecx
5786 ; AVX1-NEXT:    orl %edx, %ecx
5787 ; AVX1-NEXT:    vpextrb $9, %xmm9, %edx
5788 ; AVX1-NEXT:    andl $1, %edx
5789 ; AVX1-NEXT:    shll $9, %edx
5790 ; AVX1-NEXT:    orl %ecx, %edx
5791 ; AVX1-NEXT:    vpextrb $10, %xmm9, %ecx
5792 ; AVX1-NEXT:    andl $1, %ecx
5793 ; AVX1-NEXT:    shll $10, %ecx
5794 ; AVX1-NEXT:    orl %edx, %ecx
5795 ; AVX1-NEXT:    vpextrb $11, %xmm9, %edx
5796 ; AVX1-NEXT:    andl $1, %edx
5797 ; AVX1-NEXT:    shll $11, %edx
5798 ; AVX1-NEXT:    orl %ecx, %edx
5799 ; AVX1-NEXT:    vpextrb $12, %xmm9, %ecx
5800 ; AVX1-NEXT:    andl $1, %ecx
5801 ; AVX1-NEXT:    shll $12, %ecx
5802 ; AVX1-NEXT:    orl %edx, %ecx
5803 ; AVX1-NEXT:    vpextrb $13, %xmm9, %edx
5804 ; AVX1-NEXT:    andl $1, %edx
5805 ; AVX1-NEXT:    shll $13, %edx
5806 ; AVX1-NEXT:    orl %ecx, %edx
5807 ; AVX1-NEXT:    vpextrb $14, %xmm9, %ecx
5808 ; AVX1-NEXT:    andl $1, %ecx
5809 ; AVX1-NEXT:    shll $14, %ecx
5810 ; AVX1-NEXT:    orl %edx, %ecx
5811 ; AVX1-NEXT:    vpextrb $15, %xmm9, %edx
5812 ; AVX1-NEXT:    andl $1, %edx
5813 ; AVX1-NEXT:    shll $15, %edx
5814 ; AVX1-NEXT:    orl %ecx, %edx
5815 ; AVX1-NEXT:    vpextrb $0, %xmm8, %ecx
5816 ; AVX1-NEXT:    andl $1, %ecx
5817 ; AVX1-NEXT:    shll $16, %ecx
5818 ; AVX1-NEXT:    orl %edx, %ecx
5819 ; AVX1-NEXT:    vpextrb $1, %xmm8, %edx
5820 ; AVX1-NEXT:    andl $1, %edx
5821 ; AVX1-NEXT:    shll $17, %edx
5822 ; AVX1-NEXT:    orl %ecx, %edx
5823 ; AVX1-NEXT:    vpextrb $2, %xmm8, %ecx
5824 ; AVX1-NEXT:    andl $1, %ecx
5825 ; AVX1-NEXT:    shll $18, %ecx
5826 ; AVX1-NEXT:    orl %edx, %ecx
5827 ; AVX1-NEXT:    vpextrb $3, %xmm8, %edx
5828 ; AVX1-NEXT:    andl $1, %edx
5829 ; AVX1-NEXT:    shll $19, %edx
5830 ; AVX1-NEXT:    orl %ecx, %edx
5831 ; AVX1-NEXT:    vpextrb $4, %xmm8, %ecx
5832 ; AVX1-NEXT:    andl $1, %ecx
5833 ; AVX1-NEXT:    shll $20, %ecx
5834 ; AVX1-NEXT:    orl %edx, %ecx
5835 ; AVX1-NEXT:    vpextrb $5, %xmm8, %edx
5836 ; AVX1-NEXT:    andl $1, %edx
5837 ; AVX1-NEXT:    shll $21, %edx
5838 ; AVX1-NEXT:    orl %ecx, %edx
5839 ; AVX1-NEXT:    vpextrb $6, %xmm8, %ecx
5840 ; AVX1-NEXT:    andl $1, %ecx
5841 ; AVX1-NEXT:    shll $22, %ecx
5842 ; AVX1-NEXT:    orl %edx, %ecx
5843 ; AVX1-NEXT:    vpextrb $7, %xmm8, %edx
5844 ; AVX1-NEXT:    andl $1, %edx
5845 ; AVX1-NEXT:    shll $23, %edx
5846 ; AVX1-NEXT:    orl %ecx, %edx
5847 ; AVX1-NEXT:    vpextrb $8, %xmm8, %ecx
5848 ; AVX1-NEXT:    andl $1, %ecx
5849 ; AVX1-NEXT:    shll $24, %ecx
5850 ; AVX1-NEXT:    orl %edx, %ecx
5851 ; AVX1-NEXT:    vpextrb $9, %xmm8, %edx
5852 ; AVX1-NEXT:    andl $1, %edx
5853 ; AVX1-NEXT:    shll $25, %edx
5854 ; AVX1-NEXT:    orl %ecx, %edx
5855 ; AVX1-NEXT:    vpextrb $10, %xmm8, %ecx
5856 ; AVX1-NEXT:    andl $1, %ecx
5857 ; AVX1-NEXT:    shll $26, %ecx
5858 ; AVX1-NEXT:    orl %edx, %ecx
5859 ; AVX1-NEXT:    vpextrb $11, %xmm8, %edx
5860 ; AVX1-NEXT:    andl $1, %edx
5861 ; AVX1-NEXT:    shll $27, %edx
5862 ; AVX1-NEXT:    orl %ecx, %edx
5863 ; AVX1-NEXT:    vpextrb $12, %xmm8, %ecx
5864 ; AVX1-NEXT:    andl $1, %ecx
5865 ; AVX1-NEXT:    shll $28, %ecx
5866 ; AVX1-NEXT:    orl %edx, %ecx
5867 ; AVX1-NEXT:    vpextrb $13, %xmm8, %edx
5868 ; AVX1-NEXT:    andl $1, %edx
5869 ; AVX1-NEXT:    shll $29, %edx
5870 ; AVX1-NEXT:    orl %ecx, %edx
5871 ; AVX1-NEXT:    vpextrb $14, %xmm8, %ecx
5872 ; AVX1-NEXT:    andl $1, %ecx
5873 ; AVX1-NEXT:    shll $30, %ecx
5874 ; AVX1-NEXT:    orl %edx, %ecx
5875 ; AVX1-NEXT:    vpextrb $15, %xmm8, %edx
5876 ; AVX1-NEXT:    shll $31, %edx
5877 ; AVX1-NEXT:    orl %ecx, %edx
5878 ; AVX1-NEXT:    orl %eax, %edx
5879 ; AVX1-NEXT:    movl %edx, (%rdi)
5880 ; AVX1-NEXT:    movq %rdi, %rax
5881 ; AVX1-NEXT:    vzeroupper
5882 ; AVX1-NEXT:    retq
5883 ;
5884 ; AVX2-LABEL: test_cmp_v128i8:
5885 ; AVX2:       # %bb.0:
5886 ; AVX2-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
5887 ; AVX2-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
5888 ; AVX2-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
5889 ; AVX2-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
5890 ; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
5891 ; AVX2-NEXT:    andl $1, %eax
5892 ; AVX2-NEXT:    vpextrb $0, %xmm3, %ecx
5893 ; AVX2-NEXT:    andl $1, %ecx
5894 ; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
5895 ; AVX2-NEXT:    vpextrb $2, %xmm3, %ecx
5896 ; AVX2-NEXT:    andl $1, %ecx
5897 ; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
5898 ; AVX2-NEXT:    vpextrb $3, %xmm3, %ecx
5899 ; AVX2-NEXT:    andl $1, %ecx
5900 ; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
5901 ; AVX2-NEXT:    vpextrb $4, %xmm3, %ecx
5902 ; AVX2-NEXT:    andl $1, %ecx
5903 ; AVX2-NEXT:    shll $4, %ecx
5904 ; AVX2-NEXT:    orl %eax, %ecx
5905 ; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
5906 ; AVX2-NEXT:    andl $1, %eax
5907 ; AVX2-NEXT:    shll $5, %eax
5908 ; AVX2-NEXT:    orl %ecx, %eax
5909 ; AVX2-NEXT:    vpextrb $6, %xmm3, %ecx
5910 ; AVX2-NEXT:    andl $1, %ecx
5911 ; AVX2-NEXT:    shll $6, %ecx
5912 ; AVX2-NEXT:    vpextrb $7, %xmm3, %edx
5913 ; AVX2-NEXT:    andl $1, %edx
5914 ; AVX2-NEXT:    shll $7, %edx
5915 ; AVX2-NEXT:    orl %ecx, %edx
5916 ; AVX2-NEXT:    vpextrb $8, %xmm3, %ecx
5917 ; AVX2-NEXT:    andl $1, %ecx
5918 ; AVX2-NEXT:    shll $8, %ecx
5919 ; AVX2-NEXT:    orl %edx, %ecx
5920 ; AVX2-NEXT:    vpextrb $9, %xmm3, %edx
5921 ; AVX2-NEXT:    andl $1, %edx
5922 ; AVX2-NEXT:    shll $9, %edx
5923 ; AVX2-NEXT:    orl %ecx, %edx
5924 ; AVX2-NEXT:    vpextrb $10, %xmm3, %ecx
5925 ; AVX2-NEXT:    andl $1, %ecx
5926 ; AVX2-NEXT:    shll $10, %ecx
5927 ; AVX2-NEXT:    orl %edx, %ecx
5928 ; AVX2-NEXT:    vpextrb $11, %xmm3, %edx
5929 ; AVX2-NEXT:    andl $1, %edx
5930 ; AVX2-NEXT:    shll $11, %edx
5931 ; AVX2-NEXT:    orl %ecx, %edx
5932 ; AVX2-NEXT:    vpextrb $12, %xmm3, %ecx
5933 ; AVX2-NEXT:    andl $1, %ecx
5934 ; AVX2-NEXT:    shll $12, %ecx
5935 ; AVX2-NEXT:    orl %edx, %ecx
5936 ; AVX2-NEXT:    vpextrb $13, %xmm3, %edx
5937 ; AVX2-NEXT:    andl $1, %edx
5938 ; AVX2-NEXT:    shll $13, %edx
5939 ; AVX2-NEXT:    orl %ecx, %edx
5940 ; AVX2-NEXT:    vpextrb $14, %xmm3, %ecx
5941 ; AVX2-NEXT:    andl $1, %ecx
5942 ; AVX2-NEXT:    shll $14, %ecx
5943 ; AVX2-NEXT:    orl %edx, %ecx
5944 ; AVX2-NEXT:    vpextrb $15, %xmm3, %edx
5945 ; AVX2-NEXT:    andl $1, %edx
5946 ; AVX2-NEXT:    shll $15, %edx
5947 ; AVX2-NEXT:    orl %ecx, %edx
5948 ; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm3
5949 ; AVX2-NEXT:    vpextrb $0, %xmm3, %ecx
5950 ; AVX2-NEXT:    andl $1, %ecx
5951 ; AVX2-NEXT:    shll $16, %ecx
5952 ; AVX2-NEXT:    orl %edx, %ecx
5953 ; AVX2-NEXT:    vpextrb $1, %xmm3, %edx
5954 ; AVX2-NEXT:    andl $1, %edx
5955 ; AVX2-NEXT:    shll $17, %edx
5956 ; AVX2-NEXT:    orl %ecx, %edx
5957 ; AVX2-NEXT:    vpextrb $2, %xmm3, %ecx
5958 ; AVX2-NEXT:    andl $1, %ecx
5959 ; AVX2-NEXT:    shll $18, %ecx
5960 ; AVX2-NEXT:    orl %edx, %ecx
5961 ; AVX2-NEXT:    vpextrb $3, %xmm3, %edx
5962 ; AVX2-NEXT:    andl $1, %edx
5963 ; AVX2-NEXT:    shll $19, %edx
5964 ; AVX2-NEXT:    orl %ecx, %edx
5965 ; AVX2-NEXT:    vpextrb $4, %xmm3, %ecx
5966 ; AVX2-NEXT:    andl $1, %ecx
5967 ; AVX2-NEXT:    shll $20, %ecx
5968 ; AVX2-NEXT:    orl %edx, %ecx
5969 ; AVX2-NEXT:    vpextrb $5, %xmm3, %edx
5970 ; AVX2-NEXT:    andl $1, %edx
5971 ; AVX2-NEXT:    shll $21, %edx
5972 ; AVX2-NEXT:    orl %ecx, %edx
5973 ; AVX2-NEXT:    vpextrb $6, %xmm3, %ecx
5974 ; AVX2-NEXT:    andl $1, %ecx
5975 ; AVX2-NEXT:    shll $22, %ecx
5976 ; AVX2-NEXT:    orl %edx, %ecx
5977 ; AVX2-NEXT:    vpextrb $7, %xmm3, %edx
5978 ; AVX2-NEXT:    andl $1, %edx
5979 ; AVX2-NEXT:    shll $23, %edx
5980 ; AVX2-NEXT:    orl %ecx, %edx
5981 ; AVX2-NEXT:    vpextrb $8, %xmm3, %ecx
5982 ; AVX2-NEXT:    andl $1, %ecx
5983 ; AVX2-NEXT:    shll $24, %ecx
5984 ; AVX2-NEXT:    orl %edx, %ecx
5985 ; AVX2-NEXT:    vpextrb $9, %xmm3, %edx
5986 ; AVX2-NEXT:    andl $1, %edx
5987 ; AVX2-NEXT:    shll $25, %edx
5988 ; AVX2-NEXT:    orl %ecx, %edx
5989 ; AVX2-NEXT:    vpextrb $10, %xmm3, %ecx
5990 ; AVX2-NEXT:    andl $1, %ecx
5991 ; AVX2-NEXT:    shll $26, %ecx
5992 ; AVX2-NEXT:    orl %edx, %ecx
5993 ; AVX2-NEXT:    vpextrb $11, %xmm3, %edx
5994 ; AVX2-NEXT:    andl $1, %edx
5995 ; AVX2-NEXT:    shll $27, %edx
5996 ; AVX2-NEXT:    orl %ecx, %edx
5997 ; AVX2-NEXT:    vpextrb $12, %xmm3, %ecx
5998 ; AVX2-NEXT:    andl $1, %ecx
5999 ; AVX2-NEXT:    shll $28, %ecx
6000 ; AVX2-NEXT:    orl %edx, %ecx
6001 ; AVX2-NEXT:    vpextrb $13, %xmm3, %edx
6002 ; AVX2-NEXT:    andl $1, %edx
6003 ; AVX2-NEXT:    shll $29, %edx
6004 ; AVX2-NEXT:    orl %ecx, %edx
6005 ; AVX2-NEXT:    vpextrb $14, %xmm3, %ecx
6006 ; AVX2-NEXT:    andl $1, %ecx
6007 ; AVX2-NEXT:    shll $30, %ecx
6008 ; AVX2-NEXT:    orl %edx, %ecx
6009 ; AVX2-NEXT:    vpextrb $15, %xmm3, %edx
6010 ; AVX2-NEXT:    shll $31, %edx
6011 ; AVX2-NEXT:    orl %ecx, %edx
6012 ; AVX2-NEXT:    orl %eax, %edx
6013 ; AVX2-NEXT:    movl %edx, 12(%rdi)
6014 ; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
6015 ; AVX2-NEXT:    andl $1, %eax
6016 ; AVX2-NEXT:    vpextrb $0, %xmm2, %ecx
6017 ; AVX2-NEXT:    andl $1, %ecx
6018 ; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
6019 ; AVX2-NEXT:    vpextrb $2, %xmm2, %ecx
6020 ; AVX2-NEXT:    andl $1, %ecx
6021 ; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
6022 ; AVX2-NEXT:    vpextrb $3, %xmm2, %ecx
6023 ; AVX2-NEXT:    andl $1, %ecx
6024 ; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
6025 ; AVX2-NEXT:    vpextrb $4, %xmm2, %ecx
6026 ; AVX2-NEXT:    andl $1, %ecx
6027 ; AVX2-NEXT:    shll $4, %ecx
6028 ; AVX2-NEXT:    orl %eax, %ecx
6029 ; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
6030 ; AVX2-NEXT:    andl $1, %eax
6031 ; AVX2-NEXT:    shll $5, %eax
6032 ; AVX2-NEXT:    orl %ecx, %eax
6033 ; AVX2-NEXT:    vpextrb $6, %xmm2, %ecx
6034 ; AVX2-NEXT:    andl $1, %ecx
6035 ; AVX2-NEXT:    shll $6, %ecx
6036 ; AVX2-NEXT:    vpextrb $7, %xmm2, %edx
6037 ; AVX2-NEXT:    andl $1, %edx
6038 ; AVX2-NEXT:    shll $7, %edx
6039 ; AVX2-NEXT:    orl %ecx, %edx
6040 ; AVX2-NEXT:    vpextrb $8, %xmm2, %ecx
6041 ; AVX2-NEXT:    andl $1, %ecx
6042 ; AVX2-NEXT:    shll $8, %ecx
6043 ; AVX2-NEXT:    orl %edx, %ecx
6044 ; AVX2-NEXT:    vpextrb $9, %xmm2, %edx
6045 ; AVX2-NEXT:    andl $1, %edx
6046 ; AVX2-NEXT:    shll $9, %edx
6047 ; AVX2-NEXT:    orl %ecx, %edx
6048 ; AVX2-NEXT:    vpextrb $10, %xmm2, %ecx
6049 ; AVX2-NEXT:    andl $1, %ecx
6050 ; AVX2-NEXT:    shll $10, %ecx
6051 ; AVX2-NEXT:    orl %edx, %ecx
6052 ; AVX2-NEXT:    vpextrb $11, %xmm2, %edx
6053 ; AVX2-NEXT:    andl $1, %edx
6054 ; AVX2-NEXT:    shll $11, %edx
6055 ; AVX2-NEXT:    orl %ecx, %edx
6056 ; AVX2-NEXT:    vpextrb $12, %xmm2, %ecx
6057 ; AVX2-NEXT:    andl $1, %ecx
6058 ; AVX2-NEXT:    shll $12, %ecx
6059 ; AVX2-NEXT:    orl %edx, %ecx
6060 ; AVX2-NEXT:    vpextrb $13, %xmm2, %edx
6061 ; AVX2-NEXT:    andl $1, %edx
6062 ; AVX2-NEXT:    shll $13, %edx
6063 ; AVX2-NEXT:    orl %ecx, %edx
6064 ; AVX2-NEXT:    vpextrb $14, %xmm2, %ecx
6065 ; AVX2-NEXT:    andl $1, %ecx
6066 ; AVX2-NEXT:    shll $14, %ecx
6067 ; AVX2-NEXT:    orl %edx, %ecx
6068 ; AVX2-NEXT:    vpextrb $15, %xmm2, %edx
6069 ; AVX2-NEXT:    andl $1, %edx
6070 ; AVX2-NEXT:    shll $15, %edx
6071 ; AVX2-NEXT:    orl %ecx, %edx
6072 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
6073 ; AVX2-NEXT:    vpextrb $0, %xmm2, %ecx
6074 ; AVX2-NEXT:    andl $1, %ecx
6075 ; AVX2-NEXT:    shll $16, %ecx
6076 ; AVX2-NEXT:    orl %edx, %ecx
6077 ; AVX2-NEXT:    vpextrb $1, %xmm2, %edx
6078 ; AVX2-NEXT:    andl $1, %edx
6079 ; AVX2-NEXT:    shll $17, %edx
6080 ; AVX2-NEXT:    orl %ecx, %edx
6081 ; AVX2-NEXT:    vpextrb $2, %xmm2, %ecx
6082 ; AVX2-NEXT:    andl $1, %ecx
6083 ; AVX2-NEXT:    shll $18, %ecx
6084 ; AVX2-NEXT:    orl %edx, %ecx
6085 ; AVX2-NEXT:    vpextrb $3, %xmm2, %edx
6086 ; AVX2-NEXT:    andl $1, %edx
6087 ; AVX2-NEXT:    shll $19, %edx
6088 ; AVX2-NEXT:    orl %ecx, %edx
6089 ; AVX2-NEXT:    vpextrb $4, %xmm2, %ecx
6090 ; AVX2-NEXT:    andl $1, %ecx
6091 ; AVX2-NEXT:    shll $20, %ecx
6092 ; AVX2-NEXT:    orl %edx, %ecx
6093 ; AVX2-NEXT:    vpextrb $5, %xmm2, %edx
6094 ; AVX2-NEXT:    andl $1, %edx
6095 ; AVX2-NEXT:    shll $21, %edx
6096 ; AVX2-NEXT:    orl %ecx, %edx
6097 ; AVX2-NEXT:    vpextrb $6, %xmm2, %ecx
6098 ; AVX2-NEXT:    andl $1, %ecx
6099 ; AVX2-NEXT:    shll $22, %ecx
6100 ; AVX2-NEXT:    orl %edx, %ecx
6101 ; AVX2-NEXT:    vpextrb $7, %xmm2, %edx
6102 ; AVX2-NEXT:    andl $1, %edx
6103 ; AVX2-NEXT:    shll $23, %edx
6104 ; AVX2-NEXT:    orl %ecx, %edx
6105 ; AVX2-NEXT:    vpextrb $8, %xmm2, %ecx
6106 ; AVX2-NEXT:    andl $1, %ecx
6107 ; AVX2-NEXT:    shll $24, %ecx
6108 ; AVX2-NEXT:    orl %edx, %ecx
6109 ; AVX2-NEXT:    vpextrb $9, %xmm2, %edx
6110 ; AVX2-NEXT:    andl $1, %edx
6111 ; AVX2-NEXT:    shll $25, %edx
6112 ; AVX2-NEXT:    orl %ecx, %edx
6113 ; AVX2-NEXT:    vpextrb $10, %xmm2, %ecx
6114 ; AVX2-NEXT:    andl $1, %ecx
6115 ; AVX2-NEXT:    shll $26, %ecx
6116 ; AVX2-NEXT:    orl %edx, %ecx
6117 ; AVX2-NEXT:    vpextrb $11, %xmm2, %edx
6118 ; AVX2-NEXT:    andl $1, %edx
6119 ; AVX2-NEXT:    shll $27, %edx
6120 ; AVX2-NEXT:    orl %ecx, %edx
6121 ; AVX2-NEXT:    vpextrb $12, %xmm2, %ecx
6122 ; AVX2-NEXT:    andl $1, %ecx
6123 ; AVX2-NEXT:    shll $28, %ecx
6124 ; AVX2-NEXT:    orl %edx, %ecx
6125 ; AVX2-NEXT:    vpextrb $13, %xmm2, %edx
6126 ; AVX2-NEXT:    andl $1, %edx
6127 ; AVX2-NEXT:    shll $29, %edx
6128 ; AVX2-NEXT:    orl %ecx, %edx
6129 ; AVX2-NEXT:    vpextrb $14, %xmm2, %ecx
6130 ; AVX2-NEXT:    andl $1, %ecx
6131 ; AVX2-NEXT:    shll $30, %ecx
6132 ; AVX2-NEXT:    orl %edx, %ecx
6133 ; AVX2-NEXT:    vpextrb $15, %xmm2, %edx
6134 ; AVX2-NEXT:    shll $31, %edx
6135 ; AVX2-NEXT:    orl %ecx, %edx
6136 ; AVX2-NEXT:    orl %eax, %edx
6137 ; AVX2-NEXT:    movl %edx, 8(%rdi)
6138 ; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
6139 ; AVX2-NEXT:    andl $1, %eax
6140 ; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
6141 ; AVX2-NEXT:    andl $1, %ecx
6142 ; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
6143 ; AVX2-NEXT:    vpextrb $2, %xmm1, %ecx
6144 ; AVX2-NEXT:    andl $1, %ecx
6145 ; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
6146 ; AVX2-NEXT:    vpextrb $3, %xmm1, %ecx
6147 ; AVX2-NEXT:    andl $1, %ecx
6148 ; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
6149 ; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
6150 ; AVX2-NEXT:    andl $1, %ecx
6151 ; AVX2-NEXT:    shll $4, %ecx
6152 ; AVX2-NEXT:    orl %eax, %ecx
6153 ; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
6154 ; AVX2-NEXT:    andl $1, %eax
6155 ; AVX2-NEXT:    shll $5, %eax
6156 ; AVX2-NEXT:    orl %ecx, %eax
6157 ; AVX2-NEXT:    vpextrb $6, %xmm1, %ecx
6158 ; AVX2-NEXT:    andl $1, %ecx
6159 ; AVX2-NEXT:    shll $6, %ecx
6160 ; AVX2-NEXT:    vpextrb $7, %xmm1, %edx
6161 ; AVX2-NEXT:    andl $1, %edx
6162 ; AVX2-NEXT:    shll $7, %edx
6163 ; AVX2-NEXT:    orl %ecx, %edx
6164 ; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
6165 ; AVX2-NEXT:    andl $1, %ecx
6166 ; AVX2-NEXT:    shll $8, %ecx
6167 ; AVX2-NEXT:    orl %edx, %ecx
6168 ; AVX2-NEXT:    vpextrb $9, %xmm1, %edx
6169 ; AVX2-NEXT:    andl $1, %edx
6170 ; AVX2-NEXT:    shll $9, %edx
6171 ; AVX2-NEXT:    orl %ecx, %edx
6172 ; AVX2-NEXT:    vpextrb $10, %xmm1, %ecx
6173 ; AVX2-NEXT:    andl $1, %ecx
6174 ; AVX2-NEXT:    shll $10, %ecx
6175 ; AVX2-NEXT:    orl %edx, %ecx
6176 ; AVX2-NEXT:    vpextrb $11, %xmm1, %edx
6177 ; AVX2-NEXT:    andl $1, %edx
6178 ; AVX2-NEXT:    shll $11, %edx
6179 ; AVX2-NEXT:    orl %ecx, %edx
6180 ; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
6181 ; AVX2-NEXT:    andl $1, %ecx
6182 ; AVX2-NEXT:    shll $12, %ecx
6183 ; AVX2-NEXT:    orl %edx, %ecx
6184 ; AVX2-NEXT:    vpextrb $13, %xmm1, %edx
6185 ; AVX2-NEXT:    andl $1, %edx
6186 ; AVX2-NEXT:    shll $13, %edx
6187 ; AVX2-NEXT:    orl %ecx, %edx
6188 ; AVX2-NEXT:    vpextrb $14, %xmm1, %ecx
6189 ; AVX2-NEXT:    andl $1, %ecx
6190 ; AVX2-NEXT:    shll $14, %ecx
6191 ; AVX2-NEXT:    orl %edx, %ecx
6192 ; AVX2-NEXT:    vpextrb $15, %xmm1, %edx
6193 ; AVX2-NEXT:    andl $1, %edx
6194 ; AVX2-NEXT:    shll $15, %edx
6195 ; AVX2-NEXT:    orl %ecx, %edx
6196 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
6197 ; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
6198 ; AVX2-NEXT:    andl $1, %ecx
6199 ; AVX2-NEXT:    shll $16, %ecx
6200 ; AVX2-NEXT:    orl %edx, %ecx
6201 ; AVX2-NEXT:    vpextrb $1, %xmm1, %edx
6202 ; AVX2-NEXT:    andl $1, %edx
6203 ; AVX2-NEXT:    shll $17, %edx
6204 ; AVX2-NEXT:    orl %ecx, %edx
6205 ; AVX2-NEXT:    vpextrb $2, %xmm1, %ecx
6206 ; AVX2-NEXT:    andl $1, %ecx
6207 ; AVX2-NEXT:    shll $18, %ecx
6208 ; AVX2-NEXT:    orl %edx, %ecx
6209 ; AVX2-NEXT:    vpextrb $3, %xmm1, %edx
6210 ; AVX2-NEXT:    andl $1, %edx
6211 ; AVX2-NEXT:    shll $19, %edx
6212 ; AVX2-NEXT:    orl %ecx, %edx
6213 ; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
6214 ; AVX2-NEXT:    andl $1, %ecx
6215 ; AVX2-NEXT:    shll $20, %ecx
6216 ; AVX2-NEXT:    orl %edx, %ecx
6217 ; AVX2-NEXT:    vpextrb $5, %xmm1, %edx
6218 ; AVX2-NEXT:    andl $1, %edx
6219 ; AVX2-NEXT:    shll $21, %edx
6220 ; AVX2-NEXT:    orl %ecx, %edx
6221 ; AVX2-NEXT:    vpextrb $6, %xmm1, %ecx
6222 ; AVX2-NEXT:    andl $1, %ecx
6223 ; AVX2-NEXT:    shll $22, %ecx
6224 ; AVX2-NEXT:    orl %edx, %ecx
6225 ; AVX2-NEXT:    vpextrb $7, %xmm1, %edx
6226 ; AVX2-NEXT:    andl $1, %edx
6227 ; AVX2-NEXT:    shll $23, %edx
6228 ; AVX2-NEXT:    orl %ecx, %edx
6229 ; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
6230 ; AVX2-NEXT:    andl $1, %ecx
6231 ; AVX2-NEXT:    shll $24, %ecx
6232 ; AVX2-NEXT:    orl %edx, %ecx
6233 ; AVX2-NEXT:    vpextrb $9, %xmm1, %edx
6234 ; AVX2-NEXT:    andl $1, %edx
6235 ; AVX2-NEXT:    shll $25, %edx
6236 ; AVX2-NEXT:    orl %ecx, %edx
6237 ; AVX2-NEXT:    vpextrb $10, %xmm1, %ecx
6238 ; AVX2-NEXT:    andl $1, %ecx
6239 ; AVX2-NEXT:    shll $26, %ecx
6240 ; AVX2-NEXT:    orl %edx, %ecx
6241 ; AVX2-NEXT:    vpextrb $11, %xmm1, %edx
6242 ; AVX2-NEXT:    andl $1, %edx
6243 ; AVX2-NEXT:    shll $27, %edx
6244 ; AVX2-NEXT:    orl %ecx, %edx
6245 ; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
6246 ; AVX2-NEXT:    andl $1, %ecx
6247 ; AVX2-NEXT:    shll $28, %ecx
6248 ; AVX2-NEXT:    orl %edx, %ecx
6249 ; AVX2-NEXT:    vpextrb $13, %xmm1, %edx
6250 ; AVX2-NEXT:    andl $1, %edx
6251 ; AVX2-NEXT:    shll $29, %edx
6252 ; AVX2-NEXT:    orl %ecx, %edx
6253 ; AVX2-NEXT:    vpextrb $14, %xmm1, %ecx
6254 ; AVX2-NEXT:    andl $1, %ecx
6255 ; AVX2-NEXT:    shll $30, %ecx
6256 ; AVX2-NEXT:    orl %edx, %ecx
6257 ; AVX2-NEXT:    vpextrb $15, %xmm1, %edx
6258 ; AVX2-NEXT:    shll $31, %edx
6259 ; AVX2-NEXT:    orl %ecx, %edx
6260 ; AVX2-NEXT:    orl %eax, %edx
6261 ; AVX2-NEXT:    movl %edx, 4(%rdi)
6262 ; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
6263 ; AVX2-NEXT:    andl $1, %eax
6264 ; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
6265 ; AVX2-NEXT:    andl $1, %ecx
6266 ; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
6267 ; AVX2-NEXT:    vpextrb $2, %xmm0, %ecx
6268 ; AVX2-NEXT:    andl $1, %ecx
6269 ; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
6270 ; AVX2-NEXT:    vpextrb $3, %xmm0, %ecx
6271 ; AVX2-NEXT:    andl $1, %ecx
6272 ; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
6273 ; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
6274 ; AVX2-NEXT:    andl $1, %ecx
6275 ; AVX2-NEXT:    shll $4, %ecx
6276 ; AVX2-NEXT:    orl %eax, %ecx
6277 ; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
6278 ; AVX2-NEXT:    andl $1, %eax
6279 ; AVX2-NEXT:    shll $5, %eax
6280 ; AVX2-NEXT:    orl %ecx, %eax
6281 ; AVX2-NEXT:    vpextrb $6, %xmm0, %ecx
6282 ; AVX2-NEXT:    andl $1, %ecx
6283 ; AVX2-NEXT:    shll $6, %ecx
6284 ; AVX2-NEXT:    vpextrb $7, %xmm0, %edx
6285 ; AVX2-NEXT:    andl $1, %edx
6286 ; AVX2-NEXT:    shll $7, %edx
6287 ; AVX2-NEXT:    orl %ecx, %edx
6288 ; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
6289 ; AVX2-NEXT:    andl $1, %ecx
6290 ; AVX2-NEXT:    shll $8, %ecx
6291 ; AVX2-NEXT:    orl %edx, %ecx
6292 ; AVX2-NEXT:    vpextrb $9, %xmm0, %edx
6293 ; AVX2-NEXT:    andl $1, %edx
6294 ; AVX2-NEXT:    shll $9, %edx
6295 ; AVX2-NEXT:    orl %ecx, %edx
6296 ; AVX2-NEXT:    vpextrb $10, %xmm0, %ecx
6297 ; AVX2-NEXT:    andl $1, %ecx
6298 ; AVX2-NEXT:    shll $10, %ecx
6299 ; AVX2-NEXT:    orl %edx, %ecx
6300 ; AVX2-NEXT:    vpextrb $11, %xmm0, %edx
6301 ; AVX2-NEXT:    andl $1, %edx
6302 ; AVX2-NEXT:    shll $11, %edx
6303 ; AVX2-NEXT:    orl %ecx, %edx
6304 ; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
6305 ; AVX2-NEXT:    andl $1, %ecx
6306 ; AVX2-NEXT:    shll $12, %ecx
6307 ; AVX2-NEXT:    orl %edx, %ecx
6308 ; AVX2-NEXT:    vpextrb $13, %xmm0, %edx
6309 ; AVX2-NEXT:    andl $1, %edx
6310 ; AVX2-NEXT:    shll $13, %edx
6311 ; AVX2-NEXT:    orl %ecx, %edx
6312 ; AVX2-NEXT:    vpextrb $14, %xmm0, %ecx
6313 ; AVX2-NEXT:    andl $1, %ecx
6314 ; AVX2-NEXT:    shll $14, %ecx
6315 ; AVX2-NEXT:    orl %edx, %ecx
6316 ; AVX2-NEXT:    vpextrb $15, %xmm0, %edx
6317 ; AVX2-NEXT:    andl $1, %edx
6318 ; AVX2-NEXT:    shll $15, %edx
6319 ; AVX2-NEXT:    orl %ecx, %edx
6320 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
6321 ; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
6322 ; AVX2-NEXT:    andl $1, %ecx
6323 ; AVX2-NEXT:    shll $16, %ecx
6324 ; AVX2-NEXT:    orl %edx, %ecx
6325 ; AVX2-NEXT:    vpextrb $1, %xmm0, %edx
6326 ; AVX2-NEXT:    andl $1, %edx
6327 ; AVX2-NEXT:    shll $17, %edx
6328 ; AVX2-NEXT:    orl %ecx, %edx
6329 ; AVX2-NEXT:    vpextrb $2, %xmm0, %ecx
6330 ; AVX2-NEXT:    andl $1, %ecx
6331 ; AVX2-NEXT:    shll $18, %ecx
6332 ; AVX2-NEXT:    orl %edx, %ecx
6333 ; AVX2-NEXT:    vpextrb $3, %xmm0, %edx
6334 ; AVX2-NEXT:    andl $1, %edx
6335 ; AVX2-NEXT:    shll $19, %edx
6336 ; AVX2-NEXT:    orl %ecx, %edx
6337 ; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
6338 ; AVX2-NEXT:    andl $1, %ecx
6339 ; AVX2-NEXT:    shll $20, %ecx
6340 ; AVX2-NEXT:    orl %edx, %ecx
6341 ; AVX2-NEXT:    vpextrb $5, %xmm0, %edx
6342 ; AVX2-NEXT:    andl $1, %edx
6343 ; AVX2-NEXT:    shll $21, %edx
6344 ; AVX2-NEXT:    orl %ecx, %edx
6345 ; AVX2-NEXT:    vpextrb $6, %xmm0, %ecx
6346 ; AVX2-NEXT:    andl $1, %ecx
6347 ; AVX2-NEXT:    shll $22, %ecx
6348 ; AVX2-NEXT:    orl %edx, %ecx
6349 ; AVX2-NEXT:    vpextrb $7, %xmm0, %edx
6350 ; AVX2-NEXT:    andl $1, %edx
6351 ; AVX2-NEXT:    shll $23, %edx
6352 ; AVX2-NEXT:    orl %ecx, %edx
6353 ; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
6354 ; AVX2-NEXT:    andl $1, %ecx
6355 ; AVX2-NEXT:    shll $24, %ecx
6356 ; AVX2-NEXT:    orl %edx, %ecx
6357 ; AVX2-NEXT:    vpextrb $9, %xmm0, %edx
6358 ; AVX2-NEXT:    andl $1, %edx
6359 ; AVX2-NEXT:    shll $25, %edx
6360 ; AVX2-NEXT:    orl %ecx, %edx
6361 ; AVX2-NEXT:    vpextrb $10, %xmm0, %ecx
6362 ; AVX2-NEXT:    andl $1, %ecx
6363 ; AVX2-NEXT:    shll $26, %ecx
6364 ; AVX2-NEXT:    orl %edx, %ecx
6365 ; AVX2-NEXT:    vpextrb $11, %xmm0, %edx
6366 ; AVX2-NEXT:    andl $1, %edx
6367 ; AVX2-NEXT:    shll $27, %edx
6368 ; AVX2-NEXT:    orl %ecx, %edx
6369 ; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
6370 ; AVX2-NEXT:    andl $1, %ecx
6371 ; AVX2-NEXT:    shll $28, %ecx
6372 ; AVX2-NEXT:    orl %edx, %ecx
6373 ; AVX2-NEXT:    vpextrb $13, %xmm0, %edx
6374 ; AVX2-NEXT:    andl $1, %edx
6375 ; AVX2-NEXT:    shll $29, %edx
6376 ; AVX2-NEXT:    orl %ecx, %edx
6377 ; AVX2-NEXT:    vpextrb $14, %xmm0, %ecx
6378 ; AVX2-NEXT:    andl $1, %ecx
6379 ; AVX2-NEXT:    shll $30, %ecx
6380 ; AVX2-NEXT:    orl %edx, %ecx
6381 ; AVX2-NEXT:    vpextrb $15, %xmm0, %edx
6382 ; AVX2-NEXT:    shll $31, %edx
6383 ; AVX2-NEXT:    orl %ecx, %edx
6384 ; AVX2-NEXT:    orl %eax, %edx
6385 ; AVX2-NEXT:    movl %edx, (%rdi)
6386 ; AVX2-NEXT:    movq %rdi, %rax
6387 ; AVX2-NEXT:    vzeroupper
6388 ; AVX2-NEXT:    retq
6389 ;
6390 ; AVX512F-LABEL: test_cmp_v128i8:
6391 ; AVX512F:       # %bb.0:
6392 ; AVX512F-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
6393 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm4
6394 ; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k0
6395 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
6396 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
6397 ; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1
6398 ; AVX512F-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm0
6399 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm1
6400 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k2
6401 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
6402 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
6403 ; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k3
6404 ; AVX512F-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm0
6405 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm1
6406 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k4
6407 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
6408 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
6409 ; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k5
6410 ; AVX512F-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm0
6411 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm1
6412 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k6
6413 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
6414 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
6415 ; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k7
6416 ; AVX512F-NEXT:    kmovw %k7, 14(%rdi)
6417 ; AVX512F-NEXT:    kmovw %k6, 12(%rdi)
6418 ; AVX512F-NEXT:    kmovw %k5, 10(%rdi)
6419 ; AVX512F-NEXT:    kmovw %k4, 8(%rdi)
6420 ; AVX512F-NEXT:    kmovw %k3, 6(%rdi)
6421 ; AVX512F-NEXT:    kmovw %k2, 4(%rdi)
6422 ; AVX512F-NEXT:    kmovw %k1, 2(%rdi)
6423 ; AVX512F-NEXT:    kmovw %k0, (%rdi)
6424 ; AVX512F-NEXT:    movq %rdi, %rax
6425 ; AVX512F-NEXT:    vzeroupper
6426 ; AVX512F-NEXT:    retq
6427 ;
6428 ; AVX512DQ-LABEL: test_cmp_v128i8:
6429 ; AVX512DQ:       # %bb.0:
6430 ; AVX512DQ-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
6431 ; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm4
6432 ; AVX512DQ-NEXT:    vpmovd2m %zmm4, %k0
6433 ; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm0
6434 ; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm0
6435 ; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k1
6436 ; AVX512DQ-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm0
6437 ; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm1
6438 ; AVX512DQ-NEXT:    vpmovd2m %zmm1, %k2
6439 ; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm0
6440 ; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm0
6441 ; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k3
6442 ; AVX512DQ-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm0
6443 ; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm1
6444 ; AVX512DQ-NEXT:    vpmovd2m %zmm1, %k4
6445 ; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm0
6446 ; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm0
6447 ; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k5
6448 ; AVX512DQ-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm0
6449 ; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm1
6450 ; AVX512DQ-NEXT:    vpmovd2m %zmm1, %k6
6451 ; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm0
6452 ; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm0
6453 ; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k7
6454 ; AVX512DQ-NEXT:    kmovw %k7, 14(%rdi)
6455 ; AVX512DQ-NEXT:    kmovw %k6, 12(%rdi)
6456 ; AVX512DQ-NEXT:    kmovw %k5, 10(%rdi)
6457 ; AVX512DQ-NEXT:    kmovw %k4, 8(%rdi)
6458 ; AVX512DQ-NEXT:    kmovw %k3, 6(%rdi)
6459 ; AVX512DQ-NEXT:    kmovw %k2, 4(%rdi)
6460 ; AVX512DQ-NEXT:    kmovw %k1, 2(%rdi)
6461 ; AVX512DQ-NEXT:    kmovw %k0, (%rdi)
6462 ; AVX512DQ-NEXT:    movq %rdi, %rax
6463 ; AVX512DQ-NEXT:    vzeroupper
6464 ; AVX512DQ-NEXT:    retq
6465 ;
6466 ; AVX512BW-LABEL: test_cmp_v128i8:
6467 ; AVX512BW:       # %bb.0:
6468 ; AVX512BW-NEXT:    vpcmpgtb %zmm3, %zmm1, %k0
6469 ; AVX512BW-NEXT:    vpcmpgtb %zmm2, %zmm0, %k1
6470 ; AVX512BW-NEXT:    vpmovm2b %k1, %zmm0
6471 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm1
6472 ; AVX512BW-NEXT:    retq
6473   %1 = icmp sgt <128 x i8> %a0, %a1
6474   ret <128 x i1> %1
6475 }
6476
6477 ;
6478 ; 2048-bit vector comparisons
6479 ;
6480
6481 define <32 x i1> @test_cmp_v32f64(<32 x double> %a0, <32 x double> %a1) nounwind {
6482 ; SSE2-LABEL: test_cmp_v32f64:
6483 ; SSE2:       # %bb.0:
6484 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
6485 ; SSE2-NEXT:    cmpltpd %xmm1, %xmm8
6486 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
6487 ; SSE2-NEXT:    cmpltpd %xmm0, %xmm1
6488 ; SSE2-NEXT:    movapd {{.*#+}} xmm9 = [255,255]
6489 ; SSE2-NEXT:    andpd %xmm9, %xmm8
6490 ; SSE2-NEXT:    andpd %xmm9, %xmm1
6491 ; SSE2-NEXT:    packuswb %xmm8, %xmm1
6492 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6493 ; SSE2-NEXT:    cmpltpd %xmm3, %xmm0
6494 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
6495 ; SSE2-NEXT:    cmpltpd %xmm2, %xmm3
6496 ; SSE2-NEXT:    andpd %xmm9, %xmm0
6497 ; SSE2-NEXT:    andpd %xmm9, %xmm3
6498 ; SSE2-NEXT:    packuswb %xmm0, %xmm3
6499 ; SSE2-NEXT:    packuswb %xmm1, %xmm1
6500 ; SSE2-NEXT:    packuswb %xmm1, %xmm1
6501 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
6502 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
6503 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,2,3]
6504 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
6505 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6506 ; SSE2-NEXT:    cmpltpd %xmm7, %xmm0
6507 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
6508 ; SSE2-NEXT:    cmpltpd %xmm6, %xmm3
6509 ; SSE2-NEXT:    andpd %xmm9, %xmm0
6510 ; SSE2-NEXT:    andpd %xmm9, %xmm3
6511 ; SSE2-NEXT:    packuswb %xmm0, %xmm3
6512 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6513 ; SSE2-NEXT:    cmpltpd %xmm5, %xmm0
6514 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
6515 ; SSE2-NEXT:    cmpltpd %xmm4, %xmm6
6516 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
6517 ; SSE2-NEXT:    andpd %xmm9, %xmm0
6518 ; SSE2-NEXT:    andpd %xmm9, %xmm6
6519 ; SSE2-NEXT:    packuswb %xmm0, %xmm6
6520 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6521 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
6522 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
6523 ; SSE2-NEXT:    packuswb %xmm6, %xmm6
6524 ; SSE2-NEXT:    packuswb %xmm6, %xmm6
6525 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[0,1,2,2]
6526 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]
6527 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
6528 ; SSE2-NEXT:    movsd {{.*#+}} xmm4 = xmm1[0],xmm4[1]
6529 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6530 ; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6531 ; SSE2-NEXT:    andpd %xmm9, %xmm0
6532 ; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm3
6533 ; SSE2-NEXT:    andpd %xmm9, %xmm3
6534 ; SSE2-NEXT:    packuswb %xmm0, %xmm3
6535 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6536 ; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6537 ; SSE2-NEXT:    andpd %xmm9, %xmm0
6538 ; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
6539 ; SSE2-NEXT:    andpd %xmm9, %xmm5
6540 ; SSE2-NEXT:    packuswb %xmm0, %xmm5
6541 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
6542 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
6543 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
6544 ; SSE2-NEXT:    packuswb %xmm5, %xmm5
6545 ; SSE2-NEXT:    packuswb %xmm5, %xmm5
6546 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,2,3]
6547 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
6548 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6549 ; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6550 ; SSE2-NEXT:    andpd %xmm9, %xmm0
6551 ; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm1
6552 ; SSE2-NEXT:    andpd %xmm9, %xmm1
6553 ; SSE2-NEXT:    packuswb %xmm0, %xmm1
6554 ; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6555 ; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6556 ; SSE2-NEXT:    andpd %xmm9, %xmm0
6557 ; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm2
6558 ; SSE2-NEXT:    andpd %xmm9, %xmm2
6559 ; SSE2-NEXT:    packuswb %xmm0, %xmm2
6560 ; SSE2-NEXT:    packuswb %xmm1, %xmm1
6561 ; SSE2-NEXT:    packuswb %xmm1, %xmm1
6562 ; SSE2-NEXT:    packuswb %xmm2, %xmm2
6563 ; SSE2-NEXT:    packuswb %xmm2, %xmm2
6564 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,1,2,2]
6565 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6566 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm3[0],xmm0[1]
6567 ; SSE2-NEXT:    movapd %xmm0, -{{[0-9]+}}(%rsp)
6568 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
6569 ; SSE2-NEXT:    andl $1, %eax
6570 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6571 ; SSE2-NEXT:    andl $1, %ecx
6572 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
6573 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6574 ; SSE2-NEXT:    andl $1, %ecx
6575 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
6576 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6577 ; SSE2-NEXT:    andl $1, %ecx
6578 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
6579 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6580 ; SSE2-NEXT:    andl $1, %ecx
6581 ; SSE2-NEXT:    shll $4, %ecx
6582 ; SSE2-NEXT:    orl %eax, %ecx
6583 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
6584 ; SSE2-NEXT:    andl $1, %eax
6585 ; SSE2-NEXT:    shll $5, %eax
6586 ; SSE2-NEXT:    orl %ecx, %eax
6587 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6588 ; SSE2-NEXT:    andl $1, %ecx
6589 ; SSE2-NEXT:    shll $6, %ecx
6590 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
6591 ; SSE2-NEXT:    andl $1, %edx
6592 ; SSE2-NEXT:    shll $7, %edx
6593 ; SSE2-NEXT:    orl %ecx, %edx
6594 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6595 ; SSE2-NEXT:    andl $1, %ecx
6596 ; SSE2-NEXT:    shll $8, %ecx
6597 ; SSE2-NEXT:    orl %edx, %ecx
6598 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
6599 ; SSE2-NEXT:    andl $1, %edx
6600 ; SSE2-NEXT:    shll $9, %edx
6601 ; SSE2-NEXT:    orl %ecx, %edx
6602 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6603 ; SSE2-NEXT:    andl $1, %ecx
6604 ; SSE2-NEXT:    shll $10, %ecx
6605 ; SSE2-NEXT:    orl %edx, %ecx
6606 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
6607 ; SSE2-NEXT:    andl $1, %edx
6608 ; SSE2-NEXT:    shll $11, %edx
6609 ; SSE2-NEXT:    orl %ecx, %edx
6610 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6611 ; SSE2-NEXT:    andl $1, %ecx
6612 ; SSE2-NEXT:    shll $12, %ecx
6613 ; SSE2-NEXT:    orl %edx, %ecx
6614 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
6615 ; SSE2-NEXT:    andl $1, %edx
6616 ; SSE2-NEXT:    shll $13, %edx
6617 ; SSE2-NEXT:    orl %ecx, %edx
6618 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6619 ; SSE2-NEXT:    andl $1, %ecx
6620 ; SSE2-NEXT:    shll $14, %ecx
6621 ; SSE2-NEXT:    orl %edx, %ecx
6622 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
6623 ; SSE2-NEXT:    shll $15, %edx
6624 ; SSE2-NEXT:    orl %ecx, %edx
6625 ; SSE2-NEXT:    orl %eax, %edx
6626 ; SSE2-NEXT:    movw %dx, 2(%rdi)
6627 ; SSE2-NEXT:    movapd %xmm4, -{{[0-9]+}}(%rsp)
6628 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
6629 ; SSE2-NEXT:    andl $1, %eax
6630 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6631 ; SSE2-NEXT:    andl $1, %ecx
6632 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
6633 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6634 ; SSE2-NEXT:    andl $1, %ecx
6635 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
6636 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6637 ; SSE2-NEXT:    andl $1, %ecx
6638 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
6639 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6640 ; SSE2-NEXT:    andl $1, %ecx
6641 ; SSE2-NEXT:    shll $4, %ecx
6642 ; SSE2-NEXT:    orl %eax, %ecx
6643 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
6644 ; SSE2-NEXT:    andl $1, %eax
6645 ; SSE2-NEXT:    shll $5, %eax
6646 ; SSE2-NEXT:    orl %ecx, %eax
6647 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6648 ; SSE2-NEXT:    andl $1, %ecx
6649 ; SSE2-NEXT:    shll $6, %ecx
6650 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
6651 ; SSE2-NEXT:    andl $1, %edx
6652 ; SSE2-NEXT:    shll $7, %edx
6653 ; SSE2-NEXT:    orl %ecx, %edx
6654 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6655 ; SSE2-NEXT:    andl $1, %ecx
6656 ; SSE2-NEXT:    shll $8, %ecx
6657 ; SSE2-NEXT:    orl %edx, %ecx
6658 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
6659 ; SSE2-NEXT:    andl $1, %edx
6660 ; SSE2-NEXT:    shll $9, %edx
6661 ; SSE2-NEXT:    orl %ecx, %edx
6662 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6663 ; SSE2-NEXT:    andl $1, %ecx
6664 ; SSE2-NEXT:    shll $10, %ecx
6665 ; SSE2-NEXT:    orl %edx, %ecx
6666 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
6667 ; SSE2-NEXT:    andl $1, %edx
6668 ; SSE2-NEXT:    shll $11, %edx
6669 ; SSE2-NEXT:    orl %ecx, %edx
6670 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6671 ; SSE2-NEXT:    andl $1, %ecx
6672 ; SSE2-NEXT:    shll $12, %ecx
6673 ; SSE2-NEXT:    orl %edx, %ecx
6674 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
6675 ; SSE2-NEXT:    andl $1, %edx
6676 ; SSE2-NEXT:    shll $13, %edx
6677 ; SSE2-NEXT:    orl %ecx, %edx
6678 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
6679 ; SSE2-NEXT:    andl $1, %ecx
6680 ; SSE2-NEXT:    shll $14, %ecx
6681 ; SSE2-NEXT:    orl %edx, %ecx
6682 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
6683 ; SSE2-NEXT:    shll $15, %edx
6684 ; SSE2-NEXT:    orl %ecx, %edx
6685 ; SSE2-NEXT:    orl %eax, %edx
6686 ; SSE2-NEXT:    movw %dx, (%rdi)
6687 ; SSE2-NEXT:    movq %rdi, %rax
6688 ; SSE2-NEXT:    retq
6689 ;
6690 ; SSE42-LABEL: test_cmp_v32f64:
6691 ; SSE42:       # %bb.0:
6692 ; SSE42-NEXT:    pushq %rbp
6693 ; SSE42-NEXT:    pushq %r15
6694 ; SSE42-NEXT:    pushq %r14
6695 ; SSE42-NEXT:    pushq %r13
6696 ; SSE42-NEXT:    pushq %r12
6697 ; SSE42-NEXT:    pushq %rbx
6698 ; SSE42-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp) # 8-byte Spill
6699 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
6700 ; SSE42-NEXT:    cmpltpd %xmm7, %xmm8
6701 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm7
6702 ; SSE42-NEXT:    cmpltpd %xmm6, %xmm7
6703 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
6704 ; SSE42-NEXT:    cmpltpd %xmm5, %xmm6
6705 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6706 ; SSE42-NEXT:    cmpltpd %xmm4, %xmm5
6707 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
6708 ; SSE42-NEXT:    cmpltpd %xmm3, %xmm4
6709 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
6710 ; SSE42-NEXT:    cmpltpd %xmm2, %xmm3
6711 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
6712 ; SSE42-NEXT:    cmpltpd %xmm1, %xmm2
6713 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
6714 ; SSE42-NEXT:    cmpltpd %xmm0, %xmm1
6715 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6716 ; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6717 ; SSE42-NEXT:    pextrb $8, %xmm0, %r8d
6718 ; SSE42-NEXT:    pextrb $0, %xmm0, %r10d
6719 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6720 ; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6721 ; SSE42-NEXT:    pextrb $0, %xmm0, %ebp
6722 ; SSE42-NEXT:    pextrb $8, %xmm0, %edi
6723 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6724 ; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6725 ; SSE42-NEXT:    pextrb $0, %xmm0, %r15d
6726 ; SSE42-NEXT:    pextrb $8, %xmm0, %r11d
6727 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6728 ; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6729 ; SSE42-NEXT:    pextrb $0, %xmm0, %r14d
6730 ; SSE42-NEXT:    pextrb $8, %xmm0, %r9d
6731 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6732 ; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6733 ; SSE42-NEXT:    pextrb $0, %xmm0, %esi
6734 ; SSE42-NEXT:    pextrb $8, %xmm0, %r12d
6735 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6736 ; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6737 ; SSE42-NEXT:    pextrb $0, %xmm0, %edx
6738 ; SSE42-NEXT:    pextrb $8, %xmm0, %ebx
6739 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6740 ; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6741 ; SSE42-NEXT:    pextrb $0, %xmm0, %eax
6742 ; SSE42-NEXT:    pextrb $8, %xmm0, %r13d
6743 ; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
6744 ; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
6745 ; SSE42-NEXT:    andl $1, %r8d
6746 ; SSE42-NEXT:    andl $1, %r10d
6747 ; SSE42-NEXT:    leal (%r10,%r8,2), %ecx
6748 ; SSE42-NEXT:    andl $1, %ebp
6749 ; SSE42-NEXT:    leal (%rcx,%rbp,4), %r8d
6750 ; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
6751 ; SSE42-NEXT:    pextrb $8, %xmm0, %ebp
6752 ; SSE42-NEXT:    andl $1, %edi
6753 ; SSE42-NEXT:    leal (%r8,%rdi,8), %r8d
6754 ; SSE42-NEXT:    andl $1, %r15d
6755 ; SSE42-NEXT:    shll $4, %r15d
6756 ; SSE42-NEXT:    orl %r8d, %r15d
6757 ; SSE42-NEXT:    pextrb $8, %xmm1, %edi
6758 ; SSE42-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp) # 8-byte Spill
6759 ; SSE42-NEXT:    pextrb $0, %xmm1, %r10d
6760 ; SSE42-NEXT:    andl $1, %r11d
6761 ; SSE42-NEXT:    shll $5, %r11d
6762 ; SSE42-NEXT:    orl %r15d, %r11d
6763 ; SSE42-NEXT:    andl $1, %r14d
6764 ; SSE42-NEXT:    shll $6, %r14d
6765 ; SSE42-NEXT:    andl $1, %r9d
6766 ; SSE42-NEXT:    shll $7, %r9d
6767 ; SSE42-NEXT:    orl %r14d, %r9d
6768 ; SSE42-NEXT:    pextrb $0, %xmm2, %r14d
6769 ; SSE42-NEXT:    pextrb $8, %xmm2, %edi
6770 ; SSE42-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp) # 8-byte Spill
6771 ; SSE42-NEXT:    andl $1, %esi
6772 ; SSE42-NEXT:    shll $8, %esi
6773 ; SSE42-NEXT:    orl %r9d, %esi
6774 ; SSE42-NEXT:    andl $1, %r12d
6775 ; SSE42-NEXT:    shll $9, %r12d
6776 ; SSE42-NEXT:    orl %esi, %r12d
6777 ; SSE42-NEXT:    pextrb $0, %xmm3, %r8d
6778 ; SSE42-NEXT:    pextrb $8, %xmm3, %r15d
6779 ; SSE42-NEXT:    andl $1, %edx
6780 ; SSE42-NEXT:    shll $10, %edx
6781 ; SSE42-NEXT:    orl %r12d, %edx
6782 ; SSE42-NEXT:    andl $1, %ebx
6783 ; SSE42-NEXT:    shll $11, %ebx
6784 ; SSE42-NEXT:    orl %edx, %ebx
6785 ; SSE42-NEXT:    pextrb $0, %xmm4, %r12d
6786 ; SSE42-NEXT:    pextrb $8, %xmm4, %edi
6787 ; SSE42-NEXT:    andl $1, %eax
6788 ; SSE42-NEXT:    shll $12, %eax
6789 ; SSE42-NEXT:    orl %ebx, %eax
6790 ; SSE42-NEXT:    andl $1, %r13d
6791 ; SSE42-NEXT:    shll $13, %r13d
6792 ; SSE42-NEXT:    orl %eax, %r13d
6793 ; SSE42-NEXT:    pextrb $0, %xmm5, %eax
6794 ; SSE42-NEXT:    pextrb $8, %xmm5, %ebx
6795 ; SSE42-NEXT:    andl $1, %ecx
6796 ; SSE42-NEXT:    shll $14, %ecx
6797 ; SSE42-NEXT:    orl %r13d, %ecx
6798 ; SSE42-NEXT:    shll $15, %ebp
6799 ; SSE42-NEXT:    orl %ecx, %ebp
6800 ; SSE42-NEXT:    pextrb $0, %xmm6, %r13d
6801 ; SSE42-NEXT:    pextrb $8, %xmm6, %edx
6802 ; SSE42-NEXT:    orl %r11d, %ebp
6803 ; SSE42-NEXT:    movq -{{[0-9]+}}(%rsp), %r9 # 8-byte Reload
6804 ; SSE42-NEXT:    movw %bp, 2(%r9)
6805 ; SSE42-NEXT:    pextrb $0, %xmm7, %r11d
6806 ; SSE42-NEXT:    pextrb $8, %xmm7, %ecx
6807 ; SSE42-NEXT:    movq -{{[0-9]+}}(%rsp), %rsi # 8-byte Reload
6808 ; SSE42-NEXT:    andl $1, %esi
6809 ; SSE42-NEXT:    andl $1, %r10d
6810 ; SSE42-NEXT:    leal (%r10,%rsi,2), %esi
6811 ; SSE42-NEXT:    andl $1, %r14d
6812 ; SSE42-NEXT:    leal (%rsi,%r14,4), %r14d
6813 ; SSE42-NEXT:    pextrb $0, %xmm8, %r10d
6814 ; SSE42-NEXT:    pextrb $8, %xmm8, %ebp
6815 ; SSE42-NEXT:    movq -{{[0-9]+}}(%rsp), %rsi # 8-byte Reload
6816 ; SSE42-NEXT:    andl $1, %esi
6817 ; SSE42-NEXT:    leal (%r14,%rsi,8), %esi
6818 ; SSE42-NEXT:    andl $1, %r8d
6819 ; SSE42-NEXT:    shll $4, %r8d
6820 ; SSE42-NEXT:    orl %esi, %r8d
6821 ; SSE42-NEXT:    andl $1, %r15d
6822 ; SSE42-NEXT:    shll $5, %r15d
6823 ; SSE42-NEXT:    orl %r8d, %r15d
6824 ; SSE42-NEXT:    andl $1, %r12d
6825 ; SSE42-NEXT:    shll $6, %r12d
6826 ; SSE42-NEXT:    andl $1, %edi
6827 ; SSE42-NEXT:    shll $7, %edi
6828 ; SSE42-NEXT:    orl %r12d, %edi
6829 ; SSE42-NEXT:    andl $1, %eax
6830 ; SSE42-NEXT:    shll $8, %eax
6831 ; SSE42-NEXT:    orl %edi, %eax
6832 ; SSE42-NEXT:    andl $1, %ebx
6833 ; SSE42-NEXT:    shll $9, %ebx
6834 ; SSE42-NEXT:    orl %eax, %ebx
6835 ; SSE42-NEXT:    andl $1, %r13d
6836 ; SSE42-NEXT:    shll $10, %r13d
6837 ; SSE42-NEXT:    orl %ebx, %r13d
6838 ; SSE42-NEXT:    andl $1, %edx
6839 ; SSE42-NEXT:    shll $11, %edx
6840 ; SSE42-NEXT:    orl %r13d, %edx
6841 ; SSE42-NEXT:    andl $1, %r11d
6842 ; SSE42-NEXT:    shll $12, %r11d
6843 ; SSE42-NEXT:    orl %edx, %r11d
6844 ; SSE42-NEXT:    andl $1, %ecx
6845 ; SSE42-NEXT:    shll $13, %ecx
6846 ; SSE42-NEXT:    orl %r11d, %ecx
6847 ; SSE42-NEXT:    andl $1, %r10d
6848 ; SSE42-NEXT:    shll $14, %r10d
6849 ; SSE42-NEXT:    orl %ecx, %r10d
6850 ; SSE42-NEXT:    shll $15, %ebp
6851 ; SSE42-NEXT:    orl %r10d, %ebp
6852 ; SSE42-NEXT:    orl %r15d, %ebp
6853 ; SSE42-NEXT:    movw %bp, (%r9)
6854 ; SSE42-NEXT:    movq %r9, %rax
6855 ; SSE42-NEXT:    popq %rbx
6856 ; SSE42-NEXT:    popq %r12
6857 ; SSE42-NEXT:    popq %r13
6858 ; SSE42-NEXT:    popq %r14
6859 ; SSE42-NEXT:    popq %r15
6860 ; SSE42-NEXT:    popq %rbp
6861 ; SSE42-NEXT:    retq
6862 ;
6863 ; AVX1-LABEL: test_cmp_v32f64:
6864 ; AVX1:       # %bb.0:
6865 ; AVX1-NEXT:    pushq %rbp
6866 ; AVX1-NEXT:    movq %rsp, %rbp
6867 ; AVX1-NEXT:    andq $-32, %rsp
6868 ; AVX1-NEXT:    subq $32, %rsp
6869 ; AVX1-NEXT:    vmovapd 16(%rbp), %ymm8
6870 ; AVX1-NEXT:    vmovapd 48(%rbp), %ymm9
6871 ; AVX1-NEXT:    vmovapd 80(%rbp), %ymm10
6872 ; AVX1-NEXT:    vmovapd 112(%rbp), %ymm11
6873 ; AVX1-NEXT:    vmovapd 144(%rbp), %ymm12
6874 ; AVX1-NEXT:    vmovapd 176(%rbp), %ymm13
6875 ; AVX1-NEXT:    vmovapd 208(%rbp), %ymm14
6876 ; AVX1-NEXT:    vmovapd 240(%rbp), %ymm15
6877 ; AVX1-NEXT:    vcmpltpd %ymm7, %ymm15, %ymm15
6878 ; AVX1-NEXT:    vextractf128 $1, %ymm15, %xmm7
6879 ; AVX1-NEXT:    vpackssdw %xmm7, %xmm15, %xmm15
6880 ; AVX1-NEXT:    vcmpltpd %ymm6, %ymm14, %ymm6
6881 ; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
6882 ; AVX1-NEXT:    vpackssdw %xmm7, %xmm6, %xmm6
6883 ; AVX1-NEXT:    vpackssdw %xmm15, %xmm6, %xmm6
6884 ; AVX1-NEXT:    vcmpltpd %ymm5, %ymm13, %ymm5
6885 ; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm7
6886 ; AVX1-NEXT:    vpackssdw %xmm7, %xmm5, %xmm5
6887 ; AVX1-NEXT:    vcmpltpd %ymm4, %ymm12, %ymm4
6888 ; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm7
6889 ; AVX1-NEXT:    vpackssdw %xmm7, %xmm4, %xmm4
6890 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm4, %xmm4
6891 ; AVX1-NEXT:    vpacksswb %xmm6, %xmm4, %xmm4
6892 ; AVX1-NEXT:    vcmpltpd %ymm3, %ymm11, %ymm3
6893 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
6894 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm3, %xmm3
6895 ; AVX1-NEXT:    vcmpltpd %ymm2, %ymm10, %ymm2
6896 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
6897 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm2, %xmm2
6898 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
6899 ; AVX1-NEXT:    vcmpltpd %ymm1, %ymm9, %ymm1
6900 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
6901 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
6902 ; AVX1-NEXT:    vcmpltpd %ymm0, %ymm8, %ymm0
6903 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
6904 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
6905 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
6906 ; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
6907 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6908 ; AVX1-NEXT:    movq %rbp, %rsp
6909 ; AVX1-NEXT:    popq %rbp
6910 ; AVX1-NEXT:    retq
6911 ;
6912 ; AVX2-LABEL: test_cmp_v32f64:
6913 ; AVX2:       # %bb.0:
6914 ; AVX2-NEXT:    pushq %rbp
6915 ; AVX2-NEXT:    movq %rsp, %rbp
6916 ; AVX2-NEXT:    andq $-32, %rsp
6917 ; AVX2-NEXT:    subq $32, %rsp
6918 ; AVX2-NEXT:    vmovapd 16(%rbp), %ymm8
6919 ; AVX2-NEXT:    vmovapd 48(%rbp), %ymm9
6920 ; AVX2-NEXT:    vmovapd 80(%rbp), %ymm10
6921 ; AVX2-NEXT:    vmovapd 112(%rbp), %ymm11
6922 ; AVX2-NEXT:    vmovapd 144(%rbp), %ymm12
6923 ; AVX2-NEXT:    vmovapd 176(%rbp), %ymm13
6924 ; AVX2-NEXT:    vmovapd 208(%rbp), %ymm14
6925 ; AVX2-NEXT:    vmovapd 240(%rbp), %ymm15
6926 ; AVX2-NEXT:    vcmpltpd %ymm7, %ymm15, %ymm7
6927 ; AVX2-NEXT:    vcmpltpd %ymm6, %ymm14, %ymm6
6928 ; AVX2-NEXT:    vpackssdw %ymm7, %ymm6, %ymm6
6929 ; AVX2-NEXT:    vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]
6930 ; AVX2-NEXT:    vcmpltpd %ymm5, %ymm13, %ymm5
6931 ; AVX2-NEXT:    vcmpltpd %ymm4, %ymm12, %ymm4
6932 ; AVX2-NEXT:    vpackssdw %ymm5, %ymm4, %ymm4
6933 ; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
6934 ; AVX2-NEXT:    vpackssdw %ymm6, %ymm4, %ymm4
6935 ; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
6936 ; AVX2-NEXT:    vcmpltpd %ymm3, %ymm11, %ymm3
6937 ; AVX2-NEXT:    vcmpltpd %ymm2, %ymm10, %ymm2
6938 ; AVX2-NEXT:    vpackssdw %ymm3, %ymm2, %ymm2
6939 ; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
6940 ; AVX2-NEXT:    vcmpltpd %ymm1, %ymm9, %ymm1
6941 ; AVX2-NEXT:    vcmpltpd %ymm0, %ymm8, %ymm0
6942 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
6943 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
6944 ; AVX2-NEXT:    vpackssdw %ymm2, %ymm0, %ymm0
6945 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
6946 ; AVX2-NEXT:    vpacksswb %ymm4, %ymm0, %ymm0
6947 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
6948 ; AVX2-NEXT:    movq %rbp, %rsp
6949 ; AVX2-NEXT:    popq %rbp
6950 ; AVX2-NEXT:    retq
6951 ;
6952 ; AVX512F-LABEL: test_cmp_v32f64:
6953 ; AVX512F:       # %bb.0:
6954 ; AVX512F-NEXT:    vcmpltpd %zmm2, %zmm6, %k0
6955 ; AVX512F-NEXT:    vcmpltpd %zmm3, %zmm7, %k1
6956 ; AVX512F-NEXT:    kunpckbw %k0, %k1, %k1
6957 ; AVX512F-NEXT:    vcmpltpd %zmm0, %zmm4, %k0
6958 ; AVX512F-NEXT:    vcmpltpd %zmm1, %zmm5, %k2
6959 ; AVX512F-NEXT:    kunpckbw %k0, %k2, %k2
6960 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
6961 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
6962 ; AVX512F-NEXT:    vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}
6963 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
6964 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
6965 ; AVX512F-NEXT:    retq
6966 ;
6967 ; AVX512DQ-LABEL: test_cmp_v32f64:
6968 ; AVX512DQ:       # %bb.0:
6969 ; AVX512DQ-NEXT:    vcmpltpd %zmm2, %zmm6, %k0
6970 ; AVX512DQ-NEXT:    vcmpltpd %zmm3, %zmm7, %k1
6971 ; AVX512DQ-NEXT:    kunpckbw %k0, %k1, %k0
6972 ; AVX512DQ-NEXT:    vcmpltpd %zmm0, %zmm4, %k1
6973 ; AVX512DQ-NEXT:    vcmpltpd %zmm1, %zmm5, %k2
6974 ; AVX512DQ-NEXT:    kunpckbw %k1, %k2, %k1
6975 ; AVX512DQ-NEXT:    vpmovm2d %k1, %zmm0
6976 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
6977 ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm1
6978 ; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm1
6979 ; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
6980 ; AVX512DQ-NEXT:    retq
6981 ;
6982 ; AVX512BW-LABEL: test_cmp_v32f64:
6983 ; AVX512BW:       # %bb.0:
6984 ; AVX512BW-NEXT:    vcmpltpd %zmm0, %zmm4, %k0
6985 ; AVX512BW-NEXT:    vcmpltpd %zmm1, %zmm5, %k1
6986 ; AVX512BW-NEXT:    kunpckbw %k0, %k1, %k0
6987 ; AVX512BW-NEXT:    vcmpltpd %zmm2, %zmm6, %k1
6988 ; AVX512BW-NEXT:    vcmpltpd %zmm3, %zmm7, %k2
6989 ; AVX512BW-NEXT:    kunpckbw %k1, %k2, %k1
6990 ; AVX512BW-NEXT:    kunpckwd %k0, %k1, %k0
6991 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
6992 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
6993 ; AVX512BW-NEXT:    retq
6994   %1 = fcmp ogt <32 x double> %a0, %a1
6995   ret <32 x i1> %1
6996 }
6997
6998 define <32 x i1> @test_cmp_v32i64(<32 x i64> %a0, <32 x i64> %a1) nounwind {
6999 ; SSE2-LABEL: test_cmp_v32i64:
7000 ; SSE2:       # %bb.0:
7001 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
7002 ; SSE2-NEXT:    pxor %xmm8, %xmm1
7003 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
7004 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7005 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
7006 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7007 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7008 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm9
7009 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm9[1,1,3,3]
7010 ; SSE2-NEXT:    pand %xmm11, %xmm1
7011 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7012 ; SSE2-NEXT:    por %xmm1, %xmm9
7013 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [255,255]
7014 ; SSE2-NEXT:    pand %xmm10, %xmm9
7015 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7016 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7017 ; SSE2-NEXT:    pxor %xmm8, %xmm1
7018 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
7019 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm11
7020 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7021 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
7022 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
7023 ; SSE2-NEXT:    pand %xmm12, %xmm1
7024 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
7025 ; SSE2-NEXT:    por %xmm1, %xmm11
7026 ; SSE2-NEXT:    pand %xmm10, %xmm11
7027 ; SSE2-NEXT:    packuswb %xmm9, %xmm11
7028 ; SSE2-NEXT:    packuswb %xmm11, %xmm11
7029 ; SSE2-NEXT:    packuswb %xmm11, %xmm11
7030 ; SSE2-NEXT:    pxor %xmm8, %xmm3
7031 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7032 ; SSE2-NEXT:    pxor %xmm8, %xmm1
7033 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
7034 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
7035 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[0,0,2,2]
7036 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm1
7037 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
7038 ; SSE2-NEXT:    pand %xmm9, %xmm1
7039 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
7040 ; SSE2-NEXT:    por %xmm1, %xmm0
7041 ; SSE2-NEXT:    pand %xmm10, %xmm0
7042 ; SSE2-NEXT:    pxor %xmm8, %xmm2
7043 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7044 ; SSE2-NEXT:    pxor %xmm8, %xmm1
7045 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
7046 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
7047 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm3[0,0,2,2]
7048 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm1
7049 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
7050 ; SSE2-NEXT:    pand %xmm9, %xmm1
7051 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
7052 ; SSE2-NEXT:    por %xmm1, %xmm2
7053 ; SSE2-NEXT:    pand %xmm10, %xmm2
7054 ; SSE2-NEXT:    packuswb %xmm0, %xmm2
7055 ; SSE2-NEXT:    packuswb %xmm2, %xmm2
7056 ; SSE2-NEXT:    packuswb %xmm2, %xmm2
7057 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,2,3]
7058 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm0[0],xmm11[1],xmm0[1]
7059 ; SSE2-NEXT:    pxor %xmm8, %xmm7
7060 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
7061 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7062 ; SSE2-NEXT:    movdqa %xmm7, %xmm1
7063 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm1
7064 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]
7065 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm0
7066 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
7067 ; SSE2-NEXT:    pand %xmm2, %xmm0
7068 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
7069 ; SSE2-NEXT:    por %xmm0, %xmm1
7070 ; SSE2-NEXT:    pand %xmm10, %xmm1
7071 ; SSE2-NEXT:    pxor %xmm8, %xmm6
7072 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
7073 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7074 ; SSE2-NEXT:    movdqa %xmm6, %xmm2
7075 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
7076 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
7077 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm0
7078 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
7079 ; SSE2-NEXT:    pand %xmm3, %xmm0
7080 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
7081 ; SSE2-NEXT:    por %xmm0, %xmm2
7082 ; SSE2-NEXT:    pand %xmm10, %xmm2
7083 ; SSE2-NEXT:    packuswb %xmm1, %xmm2
7084 ; SSE2-NEXT:    packuswb %xmm2, %xmm2
7085 ; SSE2-NEXT:    packuswb %xmm2, %xmm2
7086 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7087 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
7088 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7089 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
7090 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm1
7091 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
7092 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm0
7093 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
7094 ; SSE2-NEXT:    pand %xmm3, %xmm0
7095 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
7096 ; SSE2-NEXT:    por %xmm0, %xmm1
7097 ; SSE2-NEXT:    pand %xmm10, %xmm1
7098 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7099 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
7100 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7101 ; SSE2-NEXT:    movdqa %xmm4, %xmm3
7102 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
7103 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
7104 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
7105 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
7106 ; SSE2-NEXT:    pand %xmm5, %xmm0
7107 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
7108 ; SSE2-NEXT:    por %xmm0, %xmm3
7109 ; SSE2-NEXT:    pand %xmm10, %xmm3
7110 ; SSE2-NEXT:    packuswb %xmm1, %xmm3
7111 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
7112 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
7113 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,1,2,2]
7114 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm2[2],xmm3[3],xmm2[3]
7115 ; SSE2-NEXT:    movsd {{.*#+}} xmm3 = xmm11[0],xmm3[1]
7116 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
7117 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7118 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7119 ; SSE2-NEXT:    pxor %xmm8, %xmm1
7120 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
7121 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
7122 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
7123 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
7124 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
7125 ; SSE2-NEXT:    pand %xmm4, %xmm0
7126 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
7127 ; SSE2-NEXT:    por %xmm0, %xmm1
7128 ; SSE2-NEXT:    pand %xmm10, %xmm1
7129 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
7130 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7131 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
7132 ; SSE2-NEXT:    pxor %xmm8, %xmm2
7133 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
7134 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
7135 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
7136 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
7137 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
7138 ; SSE2-NEXT:    pand %xmm5, %xmm0
7139 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7140 ; SSE2-NEXT:    por %xmm0, %xmm2
7141 ; SSE2-NEXT:    pand %xmm10, %xmm2
7142 ; SSE2-NEXT:    packuswb %xmm1, %xmm2
7143 ; SSE2-NEXT:    packuswb %xmm2, %xmm2
7144 ; SSE2-NEXT:    packuswb %xmm2, %xmm2
7145 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
7146 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7147 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7148 ; SSE2-NEXT:    pxor %xmm8, %xmm1
7149 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
7150 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
7151 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
7152 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
7153 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
7154 ; SSE2-NEXT:    pand %xmm5, %xmm0
7155 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
7156 ; SSE2-NEXT:    por %xmm0, %xmm1
7157 ; SSE2-NEXT:    pand %xmm10, %xmm1
7158 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
7159 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7160 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
7161 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7162 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
7163 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
7164 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7165 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm4
7166 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
7167 ; SSE2-NEXT:    pand %xmm6, %xmm0
7168 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7169 ; SSE2-NEXT:    por %xmm0, %xmm4
7170 ; SSE2-NEXT:    pand %xmm10, %xmm4
7171 ; SSE2-NEXT:    packuswb %xmm1, %xmm4
7172 ; SSE2-NEXT:    packuswb %xmm4, %xmm4
7173 ; SSE2-NEXT:    packuswb %xmm4, %xmm4
7174 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,2,3]
7175 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
7176 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
7177 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7178 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7179 ; SSE2-NEXT:    pxor %xmm8, %xmm1
7180 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
7181 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
7182 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
7183 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
7184 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
7185 ; SSE2-NEXT:    pand %xmm5, %xmm0
7186 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
7187 ; SSE2-NEXT:    por %xmm0, %xmm1
7188 ; SSE2-NEXT:    pand %xmm10, %xmm1
7189 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
7190 ; SSE2-NEXT:    pxor %xmm8, %xmm0
7191 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
7192 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7193 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
7194 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
7195 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7196 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm4
7197 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
7198 ; SSE2-NEXT:    pand %xmm6, %xmm4
7199 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]
7200 ; SSE2-NEXT:    por %xmm4, %xmm0
7201 ; SSE2-NEXT:    pand %xmm10, %xmm0
7202 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
7203 ; SSE2-NEXT:    packuswb %xmm0, %xmm0
7204 ; SSE2-NEXT:    packuswb %xmm0, %xmm0
7205 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7206 ; SSE2-NEXT:    pxor %xmm8, %xmm1
7207 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
7208 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7209 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
7210 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5
7211 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7212 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm4
7213 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
7214 ; SSE2-NEXT:    pand %xmm6, %xmm1
7215 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7216 ; SSE2-NEXT:    por %xmm1, %xmm4
7217 ; SSE2-NEXT:    pand %xmm10, %xmm4
7218 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7219 ; SSE2-NEXT:    pxor %xmm8, %xmm1
7220 ; SSE2-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm8
7221 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7222 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5
7223 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7224 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm8
7225 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm8[1,1,3,3]
7226 ; SSE2-NEXT:    pand %xmm6, %xmm1
7227 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7228 ; SSE2-NEXT:    por %xmm1, %xmm5
7229 ; SSE2-NEXT:    pand %xmm10, %xmm5
7230 ; SSE2-NEXT:    packuswb %xmm4, %xmm5
7231 ; SSE2-NEXT:    packuswb %xmm5, %xmm5
7232 ; SSE2-NEXT:    packuswb %xmm5, %xmm5
7233 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[0,1,2,2]
7234 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
7235 ; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
7236 ; SSE2-NEXT:    movapd %xmm1, -{{[0-9]+}}(%rsp)
7237 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
7238 ; SSE2-NEXT:    andl $1, %eax
7239 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7240 ; SSE2-NEXT:    andl $1, %ecx
7241 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
7242 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7243 ; SSE2-NEXT:    andl $1, %ecx
7244 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
7245 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7246 ; SSE2-NEXT:    andl $1, %ecx
7247 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
7248 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7249 ; SSE2-NEXT:    andl $1, %ecx
7250 ; SSE2-NEXT:    shll $4, %ecx
7251 ; SSE2-NEXT:    orl %eax, %ecx
7252 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
7253 ; SSE2-NEXT:    andl $1, %eax
7254 ; SSE2-NEXT:    shll $5, %eax
7255 ; SSE2-NEXT:    orl %ecx, %eax
7256 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7257 ; SSE2-NEXT:    andl $1, %ecx
7258 ; SSE2-NEXT:    shll $6, %ecx
7259 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
7260 ; SSE2-NEXT:    andl $1, %edx
7261 ; SSE2-NEXT:    shll $7, %edx
7262 ; SSE2-NEXT:    orl %ecx, %edx
7263 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7264 ; SSE2-NEXT:    andl $1, %ecx
7265 ; SSE2-NEXT:    shll $8, %ecx
7266 ; SSE2-NEXT:    orl %edx, %ecx
7267 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
7268 ; SSE2-NEXT:    andl $1, %edx
7269 ; SSE2-NEXT:    shll $9, %edx
7270 ; SSE2-NEXT:    orl %ecx, %edx
7271 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7272 ; SSE2-NEXT:    andl $1, %ecx
7273 ; SSE2-NEXT:    shll $10, %ecx
7274 ; SSE2-NEXT:    orl %edx, %ecx
7275 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
7276 ; SSE2-NEXT:    andl $1, %edx
7277 ; SSE2-NEXT:    shll $11, %edx
7278 ; SSE2-NEXT:    orl %ecx, %edx
7279 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7280 ; SSE2-NEXT:    andl $1, %ecx
7281 ; SSE2-NEXT:    shll $12, %ecx
7282 ; SSE2-NEXT:    orl %edx, %ecx
7283 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
7284 ; SSE2-NEXT:    andl $1, %edx
7285 ; SSE2-NEXT:    shll $13, %edx
7286 ; SSE2-NEXT:    orl %ecx, %edx
7287 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7288 ; SSE2-NEXT:    andl $1, %ecx
7289 ; SSE2-NEXT:    shll $14, %ecx
7290 ; SSE2-NEXT:    orl %edx, %ecx
7291 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
7292 ; SSE2-NEXT:    shll $15, %edx
7293 ; SSE2-NEXT:    orl %ecx, %edx
7294 ; SSE2-NEXT:    orl %eax, %edx
7295 ; SSE2-NEXT:    movw %dx, 2(%rdi)
7296 ; SSE2-NEXT:    movapd %xmm3, -{{[0-9]+}}(%rsp)
7297 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
7298 ; SSE2-NEXT:    andl $1, %eax
7299 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7300 ; SSE2-NEXT:    andl $1, %ecx
7301 ; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
7302 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7303 ; SSE2-NEXT:    andl $1, %ecx
7304 ; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
7305 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7306 ; SSE2-NEXT:    andl $1, %ecx
7307 ; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
7308 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7309 ; SSE2-NEXT:    andl $1, %ecx
7310 ; SSE2-NEXT:    shll $4, %ecx
7311 ; SSE2-NEXT:    orl %eax, %ecx
7312 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
7313 ; SSE2-NEXT:    andl $1, %eax
7314 ; SSE2-NEXT:    shll $5, %eax
7315 ; SSE2-NEXT:    orl %ecx, %eax
7316 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7317 ; SSE2-NEXT:    andl $1, %ecx
7318 ; SSE2-NEXT:    shll $6, %ecx
7319 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
7320 ; SSE2-NEXT:    andl $1, %edx
7321 ; SSE2-NEXT:    shll $7, %edx
7322 ; SSE2-NEXT:    orl %ecx, %edx
7323 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7324 ; SSE2-NEXT:    andl $1, %ecx
7325 ; SSE2-NEXT:    shll $8, %ecx
7326 ; SSE2-NEXT:    orl %edx, %ecx
7327 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
7328 ; SSE2-NEXT:    andl $1, %edx
7329 ; SSE2-NEXT:    shll $9, %edx
7330 ; SSE2-NEXT:    orl %ecx, %edx
7331 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7332 ; SSE2-NEXT:    andl $1, %ecx
7333 ; SSE2-NEXT:    shll $10, %ecx
7334 ; SSE2-NEXT:    orl %edx, %ecx
7335 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
7336 ; SSE2-NEXT:    andl $1, %edx
7337 ; SSE2-NEXT:    shll $11, %edx
7338 ; SSE2-NEXT:    orl %ecx, %edx
7339 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7340 ; SSE2-NEXT:    andl $1, %ecx
7341 ; SSE2-NEXT:    shll $12, %ecx
7342 ; SSE2-NEXT:    orl %edx, %ecx
7343 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
7344 ; SSE2-NEXT:    andl $1, %edx
7345 ; SSE2-NEXT:    shll $13, %edx
7346 ; SSE2-NEXT:    orl %ecx, %edx
7347 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
7348 ; SSE2-NEXT:    andl $1, %ecx
7349 ; SSE2-NEXT:    shll $14, %ecx
7350 ; SSE2-NEXT:    orl %edx, %ecx
7351 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
7352 ; SSE2-NEXT:    shll $15, %edx
7353 ; SSE2-NEXT:    orl %ecx, %edx
7354 ; SSE2-NEXT:    orl %eax, %edx
7355 ; SSE2-NEXT:    movw %dx, (%rdi)
7356 ; SSE2-NEXT:    movq %rdi, %rax
7357 ; SSE2-NEXT:    retq
7358 ;
7359 ; SSE42-LABEL: test_cmp_v32i64:
7360 ; SSE42:       # %bb.0:
7361 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm15
7362 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm14
7363 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm13
7364 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm12
7365 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm11
7366 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm10
7367 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
7368 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
7369 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm7
7370 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm6
7371 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm5
7372 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm4
7373 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm3
7374 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm2
7375 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
7376 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm0
7377 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm8
7378 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm9
7379 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm10
7380 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm11
7381 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm12
7382 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm13
7383 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm14
7384 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm15
7385 ; SSE42-NEXT:    pextrb $8, %xmm15, %eax
7386 ; SSE42-NEXT:    andl $1, %eax
7387 ; SSE42-NEXT:    pextrb $0, %xmm15, %ecx
7388 ; SSE42-NEXT:    andl $1, %ecx
7389 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
7390 ; SSE42-NEXT:    pextrb $0, %xmm14, %ecx
7391 ; SSE42-NEXT:    andl $1, %ecx
7392 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
7393 ; SSE42-NEXT:    pextrb $8, %xmm14, %ecx
7394 ; SSE42-NEXT:    andl $1, %ecx
7395 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
7396 ; SSE42-NEXT:    pextrb $0, %xmm13, %ecx
7397 ; SSE42-NEXT:    andl $1, %ecx
7398 ; SSE42-NEXT:    shll $4, %ecx
7399 ; SSE42-NEXT:    orl %eax, %ecx
7400 ; SSE42-NEXT:    pextrb $8, %xmm13, %eax
7401 ; SSE42-NEXT:    andl $1, %eax
7402 ; SSE42-NEXT:    shll $5, %eax
7403 ; SSE42-NEXT:    orl %ecx, %eax
7404 ; SSE42-NEXT:    pextrb $0, %xmm12, %ecx
7405 ; SSE42-NEXT:    andl $1, %ecx
7406 ; SSE42-NEXT:    shll $6, %ecx
7407 ; SSE42-NEXT:    pextrb $8, %xmm12, %edx
7408 ; SSE42-NEXT:    andl $1, %edx
7409 ; SSE42-NEXT:    shll $7, %edx
7410 ; SSE42-NEXT:    orl %ecx, %edx
7411 ; SSE42-NEXT:    pextrb $0, %xmm11, %ecx
7412 ; SSE42-NEXT:    andl $1, %ecx
7413 ; SSE42-NEXT:    shll $8, %ecx
7414 ; SSE42-NEXT:    orl %edx, %ecx
7415 ; SSE42-NEXT:    pextrb $8, %xmm11, %edx
7416 ; SSE42-NEXT:    andl $1, %edx
7417 ; SSE42-NEXT:    shll $9, %edx
7418 ; SSE42-NEXT:    orl %ecx, %edx
7419 ; SSE42-NEXT:    pextrb $0, %xmm10, %ecx
7420 ; SSE42-NEXT:    andl $1, %ecx
7421 ; SSE42-NEXT:    shll $10, %ecx
7422 ; SSE42-NEXT:    orl %edx, %ecx
7423 ; SSE42-NEXT:    pextrb $8, %xmm10, %edx
7424 ; SSE42-NEXT:    andl $1, %edx
7425 ; SSE42-NEXT:    shll $11, %edx
7426 ; SSE42-NEXT:    orl %ecx, %edx
7427 ; SSE42-NEXT:    pextrb $0, %xmm9, %ecx
7428 ; SSE42-NEXT:    andl $1, %ecx
7429 ; SSE42-NEXT:    shll $12, %ecx
7430 ; SSE42-NEXT:    orl %edx, %ecx
7431 ; SSE42-NEXT:    pextrb $8, %xmm9, %edx
7432 ; SSE42-NEXT:    andl $1, %edx
7433 ; SSE42-NEXT:    shll $13, %edx
7434 ; SSE42-NEXT:    orl %ecx, %edx
7435 ; SSE42-NEXT:    pextrb $0, %xmm8, %ecx
7436 ; SSE42-NEXT:    andl $1, %ecx
7437 ; SSE42-NEXT:    shll $14, %ecx
7438 ; SSE42-NEXT:    orl %edx, %ecx
7439 ; SSE42-NEXT:    pextrb $8, %xmm8, %edx
7440 ; SSE42-NEXT:    shll $15, %edx
7441 ; SSE42-NEXT:    orl %ecx, %edx
7442 ; SSE42-NEXT:    orl %eax, %edx
7443 ; SSE42-NEXT:    movw %dx, 2(%rdi)
7444 ; SSE42-NEXT:    pextrb $8, %xmm0, %eax
7445 ; SSE42-NEXT:    andl $1, %eax
7446 ; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
7447 ; SSE42-NEXT:    andl $1, %ecx
7448 ; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
7449 ; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
7450 ; SSE42-NEXT:    andl $1, %ecx
7451 ; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
7452 ; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
7453 ; SSE42-NEXT:    andl $1, %ecx
7454 ; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
7455 ; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
7456 ; SSE42-NEXT:    andl $1, %ecx
7457 ; SSE42-NEXT:    shll $4, %ecx
7458 ; SSE42-NEXT:    orl %eax, %ecx
7459 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
7460 ; SSE42-NEXT:    andl $1, %eax
7461 ; SSE42-NEXT:    shll $5, %eax
7462 ; SSE42-NEXT:    orl %ecx, %eax
7463 ; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
7464 ; SSE42-NEXT:    andl $1, %ecx
7465 ; SSE42-NEXT:    shll $6, %ecx
7466 ; SSE42-NEXT:    pextrb $8, %xmm3, %edx
7467 ; SSE42-NEXT:    andl $1, %edx
7468 ; SSE42-NEXT:    shll $7, %edx
7469 ; SSE42-NEXT:    orl %ecx, %edx
7470 ; SSE42-NEXT:    pextrb $0, %xmm4, %ecx
7471 ; SSE42-NEXT:    andl $1, %ecx
7472 ; SSE42-NEXT:    shll $8, %ecx
7473 ; SSE42-NEXT:    orl %edx, %ecx
7474 ; SSE42-NEXT:    pextrb $8, %xmm4, %edx
7475 ; SSE42-NEXT:    andl $1, %edx
7476 ; SSE42-NEXT:    shll $9, %edx
7477 ; SSE42-NEXT:    orl %ecx, %edx
7478 ; SSE42-NEXT:    pextrb $0, %xmm5, %ecx
7479 ; SSE42-NEXT:    andl $1, %ecx
7480 ; SSE42-NEXT:    shll $10, %ecx
7481 ; SSE42-NEXT:    orl %edx, %ecx
7482 ; SSE42-NEXT:    pextrb $8, %xmm5, %edx
7483 ; SSE42-NEXT:    andl $1, %edx
7484 ; SSE42-NEXT:    shll $11, %edx
7485 ; SSE42-NEXT:    orl %ecx, %edx
7486 ; SSE42-NEXT:    pextrb $0, %xmm6, %ecx
7487 ; SSE42-NEXT:    andl $1, %ecx
7488 ; SSE42-NEXT:    shll $12, %ecx
7489 ; SSE42-NEXT:    orl %edx, %ecx
7490 ; SSE42-NEXT:    pextrb $8, %xmm6, %edx
7491 ; SSE42-NEXT:    andl $1, %edx
7492 ; SSE42-NEXT:    shll $13, %edx
7493 ; SSE42-NEXT:    orl %ecx, %edx
7494 ; SSE42-NEXT:    pextrb $0, %xmm7, %ecx
7495 ; SSE42-NEXT:    andl $1, %ecx
7496 ; SSE42-NEXT:    shll $14, %ecx
7497 ; SSE42-NEXT:    orl %edx, %ecx
7498 ; SSE42-NEXT:    pextrb $8, %xmm7, %edx
7499 ; SSE42-NEXT:    shll $15, %edx
7500 ; SSE42-NEXT:    orl %ecx, %edx
7501 ; SSE42-NEXT:    orl %eax, %edx
7502 ; SSE42-NEXT:    movw %dx, (%rdi)
7503 ; SSE42-NEXT:    movq %rdi, %rax
7504 ; SSE42-NEXT:    retq
7505 ;
7506 ; AVX1-LABEL: test_cmp_v32i64:
7507 ; AVX1:       # %bb.0:
7508 ; AVX1-NEXT:    pushq %rbp
7509 ; AVX1-NEXT:    movq %rsp, %rbp
7510 ; AVX1-NEXT:    andq $-32, %rsp
7511 ; AVX1-NEXT:    subq $32, %rsp
7512 ; AVX1-NEXT:    vmovdqa 240(%rbp), %ymm8
7513 ; AVX1-NEXT:    vextractf128 $1, %ymm8, %xmm9
7514 ; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm10
7515 ; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm10, %xmm9
7516 ; AVX1-NEXT:    vmovdqa 208(%rbp), %ymm10
7517 ; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm7, %xmm7
7518 ; AVX1-NEXT:    vpackssdw %xmm9, %xmm7, %xmm8
7519 ; AVX1-NEXT:    vextractf128 $1, %ymm10, %xmm9
7520 ; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
7521 ; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm7, %xmm7
7522 ; AVX1-NEXT:    vpcmpgtq %xmm10, %xmm6, %xmm6
7523 ; AVX1-NEXT:    vmovdqa 176(%rbp), %ymm9
7524 ; AVX1-NEXT:    vpackssdw %xmm7, %xmm6, %xmm6
7525 ; AVX1-NEXT:    vpackssdw %xmm8, %xmm6, %xmm8
7526 ; AVX1-NEXT:    vextractf128 $1, %ymm9, %xmm7
7527 ; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm6
7528 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
7529 ; AVX1-NEXT:    vmovdqa 144(%rbp), %ymm10
7530 ; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm5, %xmm5
7531 ; AVX1-NEXT:    vpackssdw %xmm6, %xmm5, %xmm5
7532 ; AVX1-NEXT:    vextractf128 $1, %ymm10, %xmm6
7533 ; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm7
7534 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7535 ; AVX1-NEXT:    vpcmpgtq %xmm10, %xmm4, %xmm4
7536 ; AVX1-NEXT:    vpackssdw %xmm6, %xmm4, %xmm4
7537 ; AVX1-NEXT:    vmovdqa 112(%rbp), %ymm6
7538 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm4, %xmm4
7539 ; AVX1-NEXT:    vpacksswb %xmm8, %xmm4, %xmm4
7540 ; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm5
7541 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
7542 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm7, %xmm5
7543 ; AVX1-NEXT:    vmovdqa 80(%rbp), %ymm7
7544 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm3
7545 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm3, %xmm3
7546 ; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm5
7547 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7548 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
7549 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm2, %xmm2
7550 ; AVX1-NEXT:    vmovdqa 48(%rbp), %ymm6
7551 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm2, %xmm2
7552 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
7553 ; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm3
7554 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
7555 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3
7556 ; AVX1-NEXT:    vmovdqa 16(%rbp), %ymm5
7557 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm1, %xmm1
7558 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
7559 ; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
7560 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
7561 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm3
7562 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm0, %xmm0
7563 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
7564 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
7565 ; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
7566 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7567 ; AVX1-NEXT:    movq %rbp, %rsp
7568 ; AVX1-NEXT:    popq %rbp
7569 ; AVX1-NEXT:    retq
7570 ;
7571 ; AVX2-LABEL: test_cmp_v32i64:
7572 ; AVX2:       # %bb.0:
7573 ; AVX2-NEXT:    pushq %rbp
7574 ; AVX2-NEXT:    movq %rsp, %rbp
7575 ; AVX2-NEXT:    andq $-32, %rsp
7576 ; AVX2-NEXT:    subq $32, %rsp
7577 ; AVX2-NEXT:    vpcmpgtq 240(%rbp), %ymm7, %ymm7
7578 ; AVX2-NEXT:    vpcmpgtq 208(%rbp), %ymm6, %ymm6
7579 ; AVX2-NEXT:    vpackssdw %ymm7, %ymm6, %ymm6
7580 ; AVX2-NEXT:    vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]
7581 ; AVX2-NEXT:    vpcmpgtq 176(%rbp), %ymm5, %ymm5
7582 ; AVX2-NEXT:    vpcmpgtq 144(%rbp), %ymm4, %ymm4
7583 ; AVX2-NEXT:    vpackssdw %ymm5, %ymm4, %ymm4
7584 ; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
7585 ; AVX2-NEXT:    vpackssdw %ymm6, %ymm4, %ymm4
7586 ; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
7587 ; AVX2-NEXT:    vpcmpgtq 112(%rbp), %ymm3, %ymm3
7588 ; AVX2-NEXT:    vpcmpgtq 80(%rbp), %ymm2, %ymm2
7589 ; AVX2-NEXT:    vpackssdw %ymm3, %ymm2, %ymm2
7590 ; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
7591 ; AVX2-NEXT:    vpcmpgtq 48(%rbp), %ymm1, %ymm1
7592 ; AVX2-NEXT:    vpcmpgtq 16(%rbp), %ymm0, %ymm0
7593 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
7594 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
7595 ; AVX2-NEXT:    vpackssdw %ymm2, %ymm0, %ymm0
7596 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
7597 ; AVX2-NEXT:    vpacksswb %ymm4, %ymm0, %ymm0
7598 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
7599 ; AVX2-NEXT:    movq %rbp, %rsp
7600 ; AVX2-NEXT:    popq %rbp
7601 ; AVX2-NEXT:    retq
7602 ;
7603 ; AVX512F-LABEL: test_cmp_v32i64:
7604 ; AVX512F:       # %bb.0:
7605 ; AVX512F-NEXT:    vpcmpgtq %zmm6, %zmm2, %k0
7606 ; AVX512F-NEXT:    vpcmpgtq %zmm7, %zmm3, %k1
7607 ; AVX512F-NEXT:    kunpckbw %k0, %k1, %k1
7608 ; AVX512F-NEXT:    vpcmpgtq %zmm4, %zmm0, %k0
7609 ; AVX512F-NEXT:    vpcmpgtq %zmm5, %zmm1, %k2
7610 ; AVX512F-NEXT:    kunpckbw %k0, %k2, %k2
7611 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
7612 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
7613 ; AVX512F-NEXT:    vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}
7614 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
7615 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
7616 ; AVX512F-NEXT:    retq
7617 ;
7618 ; AVX512DQ-LABEL: test_cmp_v32i64:
7619 ; AVX512DQ:       # %bb.0:
7620 ; AVX512DQ-NEXT:    vpcmpgtq %zmm6, %zmm2, %k0
7621 ; AVX512DQ-NEXT:    vpcmpgtq %zmm7, %zmm3, %k1
7622 ; AVX512DQ-NEXT:    kunpckbw %k0, %k1, %k0
7623 ; AVX512DQ-NEXT:    vpcmpgtq %zmm4, %zmm0, %k1
7624 ; AVX512DQ-NEXT:    vpcmpgtq %zmm5, %zmm1, %k2
7625 ; AVX512DQ-NEXT:    kunpckbw %k1, %k2, %k1
7626 ; AVX512DQ-NEXT:    vpmovm2d %k1, %zmm0
7627 ; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
7628 ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm1
7629 ; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm1
7630 ; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
7631 ; AVX512DQ-NEXT:    retq
7632 ;
7633 ; AVX512BW-LABEL: test_cmp_v32i64:
7634 ; AVX512BW:       # %bb.0:
7635 ; AVX512BW-NEXT:    vpcmpgtq %zmm4, %zmm0, %k0
7636 ; AVX512BW-NEXT:    vpcmpgtq %zmm5, %zmm1, %k1
7637 ; AVX512BW-NEXT:    kunpckbw %k0, %k1, %k0
7638 ; AVX512BW-NEXT:    vpcmpgtq %zmm6, %zmm2, %k1
7639 ; AVX512BW-NEXT:    vpcmpgtq %zmm7, %zmm3, %k2
7640 ; AVX512BW-NEXT:    kunpckbw %k1, %k2, %k1
7641 ; AVX512BW-NEXT:    kunpckwd %k0, %k1, %k0
7642 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
7643 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
7644 ; AVX512BW-NEXT:    retq
7645   %1 = icmp sgt <32 x i64> %a0, %a1
7646   ret <32 x i1> %1
7647 }