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
14define <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
29define <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
44define <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
73define <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
87define <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
101define <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
119define <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:    packsswb %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:    vpacksswb %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:    vpacksswb %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: %XMM0<def> %XMM0<kill> %YMM0<kill>
149; AVX512-NEXT:    retq
150  %1 = fcmp ogt <4 x double> %a0, %a1
151  ret <4 x i1> %1
152}
153
154define <8 x i1> @test_cmp_v8f32(<8 x float> %a0, <8 x float> %a1) nounwind {
155; SSE-LABEL: test_cmp_v8f32:
156; SSE:       # BB#0:
157; SSE-NEXT:    cmpltps %xmm1, %xmm3
158; SSE-NEXT:    cmpltps %xmm0, %xmm2
159; SSE-NEXT:    packsswb %xmm3, %xmm2
160; SSE-NEXT:    movdqa %xmm2, %xmm0
161; SSE-NEXT:    retq
162;
163; AVX1-LABEL: test_cmp_v8f32:
164; AVX1:       # BB#0:
165; AVX1-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
166; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
167; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
168; AVX1-NEXT:    vzeroupper
169; AVX1-NEXT:    retq
170;
171; AVX2-LABEL: test_cmp_v8f32:
172; AVX2:       # BB#0:
173; AVX2-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
174; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1
175; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
176; AVX2-NEXT:    vzeroupper
177; AVX2-NEXT:    retq
178;
179; AVX512-LABEL: test_cmp_v8f32:
180; AVX512:       # BB#0:
181; AVX512-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
182; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
183; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
184; AVX512-NEXT:    retq
185  %1 = fcmp ogt <8 x float> %a0, %a1
186  ret <8 x i1> %1
187}
188
189define <4 x i1> @test_cmp_v4i64(<4 x i64> %a0, <4 x i64> %a1) nounwind {
190; SSE2-LABEL: test_cmp_v4i64:
191; SSE2:       # BB#0:
192; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
193; SSE2-NEXT:    pxor %xmm4, %xmm3
194; SSE2-NEXT:    pxor %xmm4, %xmm1
195; SSE2-NEXT:    movdqa %xmm1, %xmm5
196; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
197; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
198; SSE2-NEXT:    pcmpeqd %xmm3, %xmm1
199; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
200; SSE2-NEXT:    pand %xmm6, %xmm1
201; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
202; SSE2-NEXT:    por %xmm1, %xmm3
203; SSE2-NEXT:    pxor %xmm4, %xmm2
204; SSE2-NEXT:    pxor %xmm4, %xmm0
205; SSE2-NEXT:    movdqa %xmm0, %xmm1
206; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
207; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2]
208; SSE2-NEXT:    pcmpeqd %xmm2, %xmm0
209; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
210; SSE2-NEXT:    pand %xmm4, %xmm2
211; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
212; SSE2-NEXT:    por %xmm2, %xmm0
213; SSE2-NEXT:    packsswb %xmm3, %xmm0
214; SSE2-NEXT:    retq
215;
216; SSE42-LABEL: test_cmp_v4i64:
217; SSE42:       # BB#0:
218; SSE42-NEXT:    pcmpgtq %xmm3, %xmm1
219; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0
220; SSE42-NEXT:    packsswb %xmm1, %xmm0
221; SSE42-NEXT:    retq
222;
223; AVX1-LABEL: test_cmp_v4i64:
224; AVX1:       # BB#0:
225; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
226; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
227; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
228; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
229; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
230; AVX1-NEXT:    vzeroupper
231; AVX1-NEXT:    retq
232;
233; AVX2-LABEL: test_cmp_v4i64:
234; AVX2:       # BB#0:
235; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
236; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
237; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
238; AVX2-NEXT:    vzeroupper
239; AVX2-NEXT:    retq
240;
241; AVX512-LABEL: test_cmp_v4i64:
242; AVX512:       # BB#0:
243; AVX512-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
244; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
245; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
246; AVX512-NEXT:    retq
247  %1 = icmp sgt <4 x i64> %a0, %a1
248  ret <4 x i1> %1
249}
250
251define <8 x i1> @test_cmp_v8i32(<8 x i32> %a0, <8 x i32> %a1) nounwind {
252; SSE-LABEL: test_cmp_v8i32:
253; SSE:       # BB#0:
254; SSE-NEXT:    pcmpgtd %xmm3, %xmm1
255; SSE-NEXT:    pcmpgtd %xmm2, %xmm0
256; SSE-NEXT:    packsswb %xmm1, %xmm0
257; SSE-NEXT:    retq
258;
259; AVX1-LABEL: test_cmp_v8i32:
260; AVX1:       # BB#0:
261; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
262; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
263; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm3, %xmm2
264; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
265; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
266; AVX1-NEXT:    vzeroupper
267; AVX1-NEXT:    retq
268;
269; AVX2-LABEL: test_cmp_v8i32:
270; AVX2:       # BB#0:
271; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
272; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
273; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
274; AVX2-NEXT:    vzeroupper
275; AVX2-NEXT:    retq
276;
277; AVX512-LABEL: test_cmp_v8i32:
278; AVX512:       # BB#0:
279; AVX512-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
280; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
281; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
282; AVX512-NEXT:    retq
283  %1 = icmp sgt <8 x i32> %a0, %a1
284  ret <8 x i1> %1
285}
286
287define <16 x i1> @test_cmp_v16i16(<16 x i16> %a0, <16 x i16> %a1) nounwind {
288; SSE-LABEL: test_cmp_v16i16:
289; SSE:       # BB#0:
290; SSE-NEXT:    pcmpgtw %xmm3, %xmm1
291; SSE-NEXT:    pcmpgtw %xmm2, %xmm0
292; SSE-NEXT:    packsswb %xmm1, %xmm0
293; SSE-NEXT:    retq
294;
295; AVX1-LABEL: test_cmp_v16i16:
296; AVX1:       # BB#0:
297; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
298; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
299; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm3, %xmm2
300; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
301; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
302; AVX1-NEXT:    vzeroupper
303; AVX1-NEXT:    retq
304;
305; AVX2-LABEL: test_cmp_v16i16:
306; AVX2:       # BB#0:
307; AVX2-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
308; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
309; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
310; AVX2-NEXT:    vzeroupper
311; AVX2-NEXT:    retq
312;
313; AVX512F-LABEL: test_cmp_v16i16:
314; AVX512F:       # BB#0:
315; AVX512F-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
316; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
317; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
318; AVX512F-NEXT:    retq
319;
320; AVX512DQ-LABEL: test_cmp_v16i16:
321; AVX512DQ:       # BB#0:
322; AVX512DQ-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
323; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm0
324; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
325; AVX512DQ-NEXT:    retq
326;
327; AVX512BW-LABEL: test_cmp_v16i16:
328; AVX512BW:       # BB#0:
329; AVX512BW-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
330; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
331; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
332; AVX512BW-NEXT:    retq
333  %1 = icmp sgt <16 x i16> %a0, %a1
334  ret <16 x i1> %1
335}
336
337define <32 x i1> @test_cmp_v32i8(<32 x i8> %a0, <32 x i8> %a1) nounwind {
338; SSE2-LABEL: test_cmp_v32i8:
339; SSE2:       # BB#0:
340; SSE2-NEXT:    pcmpgtb %xmm2, %xmm0
341; SSE2-NEXT:    pcmpgtb %xmm3, %xmm1
342; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
343; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
344; SSE2-NEXT:    andb $1, %al
345; SSE2-NEXT:    movb %al, 2(%rdi)
346; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
347; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
348; SSE2-NEXT:    andb $1, %al
349; SSE2-NEXT:    movb %al, (%rdi)
350; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
351; SSE2-NEXT:    andb $1, %al
352; SSE2-NEXT:    movb %al, 2(%rdi)
353; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
354; SSE2-NEXT:    andb $1, %al
355; SSE2-NEXT:    movb %al, (%rdi)
356; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
357; SSE2-NEXT:    andb $1, %al
358; SSE2-NEXT:    movb %al, 2(%rdi)
359; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
360; SSE2-NEXT:    andb $1, %al
361; SSE2-NEXT:    movb %al, (%rdi)
362; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
363; SSE2-NEXT:    andb $1, %al
364; SSE2-NEXT:    movb %al, 2(%rdi)
365; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
366; SSE2-NEXT:    andb $1, %al
367; SSE2-NEXT:    movb %al, (%rdi)
368; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
369; SSE2-NEXT:    andb $1, %al
370; SSE2-NEXT:    movb %al, 2(%rdi)
371; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
372; SSE2-NEXT:    andb $1, %al
373; SSE2-NEXT:    movb %al, (%rdi)
374; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
375; SSE2-NEXT:    andb $1, %al
376; SSE2-NEXT:    movb %al, 2(%rdi)
377; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
378; SSE2-NEXT:    andb $1, %al
379; SSE2-NEXT:    movb %al, (%rdi)
380; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
381; SSE2-NEXT:    andb $1, %al
382; SSE2-NEXT:    movb %al, 2(%rdi)
383; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
384; SSE2-NEXT:    andb $1, %al
385; SSE2-NEXT:    movb %al, (%rdi)
386; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
387; SSE2-NEXT:    andb $1, %al
388; SSE2-NEXT:    movb %al, 2(%rdi)
389; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
390; SSE2-NEXT:    andb $1, %al
391; SSE2-NEXT:    movb %al, (%rdi)
392; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
393; SSE2-NEXT:    andb $1, %al
394; SSE2-NEXT:    movb %al, 2(%rdi)
395; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
396; SSE2-NEXT:    andb $1, %al
397; SSE2-NEXT:    movb %al, (%rdi)
398; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
399; SSE2-NEXT:    andb $1, %al
400; SSE2-NEXT:    movb %al, 2(%rdi)
401; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
402; SSE2-NEXT:    andb $1, %al
403; SSE2-NEXT:    movb %al, (%rdi)
404; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
405; SSE2-NEXT:    andb $1, %al
406; SSE2-NEXT:    movb %al, 2(%rdi)
407; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
408; SSE2-NEXT:    andb $1, %al
409; SSE2-NEXT:    movb %al, (%rdi)
410; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
411; SSE2-NEXT:    andb $1, %al
412; SSE2-NEXT:    movb %al, 2(%rdi)
413; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
414; SSE2-NEXT:    andb $1, %al
415; SSE2-NEXT:    movb %al, (%rdi)
416; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
417; SSE2-NEXT:    andb $1, %al
418; SSE2-NEXT:    movb %al, 2(%rdi)
419; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
420; SSE2-NEXT:    andb $1, %al
421; SSE2-NEXT:    movb %al, (%rdi)
422; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
423; SSE2-NEXT:    andb $1, %al
424; SSE2-NEXT:    movb %al, 2(%rdi)
425; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
426; SSE2-NEXT:    andb $1, %al
427; SSE2-NEXT:    movb %al, (%rdi)
428; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
429; SSE2-NEXT:    andb $1, %al
430; SSE2-NEXT:    movb %al, 2(%rdi)
431; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
432; SSE2-NEXT:    andb $1, %al
433; SSE2-NEXT:    movb %al, (%rdi)
434; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
435; SSE2-NEXT:    andb $1, %al
436; SSE2-NEXT:    movb %al, 2(%rdi)
437; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
438; SSE2-NEXT:    andb $1, %al
439; SSE2-NEXT:    movb %al, (%rdi)
440; SSE2-NEXT:    movq %rdi, %rax
441; SSE2-NEXT:    retq
442;
443; SSE42-LABEL: test_cmp_v32i8:
444; SSE42:       # BB#0:
445; SSE42-NEXT:    pcmpgtb %xmm2, %xmm0
446; SSE42-NEXT:    pcmpgtb %xmm3, %xmm1
447; SSE42-NEXT:    pextrb $15, %xmm1, %eax
448; SSE42-NEXT:    andb $1, %al
449; SSE42-NEXT:    movb %al, 2(%rdi)
450; SSE42-NEXT:    pextrb $14, %xmm1, %eax
451; SSE42-NEXT:    andb $1, %al
452; SSE42-NEXT:    movb %al, 2(%rdi)
453; SSE42-NEXT:    pextrb $13, %xmm1, %eax
454; SSE42-NEXT:    andb $1, %al
455; SSE42-NEXT:    movb %al, 2(%rdi)
456; SSE42-NEXT:    pextrb $12, %xmm1, %eax
457; SSE42-NEXT:    andb $1, %al
458; SSE42-NEXT:    movb %al, 2(%rdi)
459; SSE42-NEXT:    pextrb $11, %xmm1, %eax
460; SSE42-NEXT:    andb $1, %al
461; SSE42-NEXT:    movb %al, 2(%rdi)
462; SSE42-NEXT:    pextrb $10, %xmm1, %eax
463; SSE42-NEXT:    andb $1, %al
464; SSE42-NEXT:    movb %al, 2(%rdi)
465; SSE42-NEXT:    pextrb $9, %xmm1, %eax
466; SSE42-NEXT:    andb $1, %al
467; SSE42-NEXT:    movb %al, 2(%rdi)
468; SSE42-NEXT:    pextrb $8, %xmm1, %eax
469; SSE42-NEXT:    andb $1, %al
470; SSE42-NEXT:    movb %al, 2(%rdi)
471; SSE42-NEXT:    pextrb $7, %xmm1, %eax
472; SSE42-NEXT:    andb $1, %al
473; SSE42-NEXT:    movb %al, 2(%rdi)
474; SSE42-NEXT:    pextrb $6, %xmm1, %eax
475; SSE42-NEXT:    andb $1, %al
476; SSE42-NEXT:    movb %al, 2(%rdi)
477; SSE42-NEXT:    pextrb $5, %xmm1, %eax
478; SSE42-NEXT:    andb $1, %al
479; SSE42-NEXT:    movb %al, 2(%rdi)
480; SSE42-NEXT:    pextrb $4, %xmm1, %eax
481; SSE42-NEXT:    andb $1, %al
482; SSE42-NEXT:    movb %al, 2(%rdi)
483; SSE42-NEXT:    pextrb $3, %xmm1, %eax
484; SSE42-NEXT:    andb $1, %al
485; SSE42-NEXT:    movb %al, 2(%rdi)
486; SSE42-NEXT:    pextrb $2, %xmm1, %eax
487; SSE42-NEXT:    andb $1, %al
488; SSE42-NEXT:    movb %al, 2(%rdi)
489; SSE42-NEXT:    pextrb $1, %xmm1, %eax
490; SSE42-NEXT:    andb $1, %al
491; SSE42-NEXT:    movb %al, 2(%rdi)
492; SSE42-NEXT:    pextrb $0, %xmm1, %eax
493; SSE42-NEXT:    andb $1, %al
494; SSE42-NEXT:    movb %al, 2(%rdi)
495; SSE42-NEXT:    pextrb $15, %xmm0, %eax
496; SSE42-NEXT:    andb $1, %al
497; SSE42-NEXT:    movb %al, (%rdi)
498; SSE42-NEXT:    pextrb $14, %xmm0, %eax
499; SSE42-NEXT:    andb $1, %al
500; SSE42-NEXT:    movb %al, (%rdi)
501; SSE42-NEXT:    pextrb $13, %xmm0, %eax
502; SSE42-NEXT:    andb $1, %al
503; SSE42-NEXT:    movb %al, (%rdi)
504; SSE42-NEXT:    pextrb $12, %xmm0, %eax
505; SSE42-NEXT:    andb $1, %al
506; SSE42-NEXT:    movb %al, (%rdi)
507; SSE42-NEXT:    pextrb $11, %xmm0, %eax
508; SSE42-NEXT:    andb $1, %al
509; SSE42-NEXT:    movb %al, (%rdi)
510; SSE42-NEXT:    pextrb $10, %xmm0, %eax
511; SSE42-NEXT:    andb $1, %al
512; SSE42-NEXT:    movb %al, (%rdi)
513; SSE42-NEXT:    pextrb $9, %xmm0, %eax
514; SSE42-NEXT:    andb $1, %al
515; SSE42-NEXT:    movb %al, (%rdi)
516; SSE42-NEXT:    pextrb $8, %xmm0, %eax
517; SSE42-NEXT:    andb $1, %al
518; SSE42-NEXT:    movb %al, (%rdi)
519; SSE42-NEXT:    pextrb $7, %xmm0, %eax
520; SSE42-NEXT:    andb $1, %al
521; SSE42-NEXT:    movb %al, (%rdi)
522; SSE42-NEXT:    pextrb $6, %xmm0, %eax
523; SSE42-NEXT:    andb $1, %al
524; SSE42-NEXT:    movb %al, (%rdi)
525; SSE42-NEXT:    pextrb $5, %xmm0, %eax
526; SSE42-NEXT:    andb $1, %al
527; SSE42-NEXT:    movb %al, (%rdi)
528; SSE42-NEXT:    pextrb $4, %xmm0, %eax
529; SSE42-NEXT:    andb $1, %al
530; SSE42-NEXT:    movb %al, (%rdi)
531; SSE42-NEXT:    pextrb $3, %xmm0, %eax
532; SSE42-NEXT:    andb $1, %al
533; SSE42-NEXT:    movb %al, (%rdi)
534; SSE42-NEXT:    pextrb $2, %xmm0, %eax
535; SSE42-NEXT:    andb $1, %al
536; SSE42-NEXT:    movb %al, (%rdi)
537; SSE42-NEXT:    pextrb $1, %xmm0, %eax
538; SSE42-NEXT:    andb $1, %al
539; SSE42-NEXT:    movb %al, (%rdi)
540; SSE42-NEXT:    pextrb $0, %xmm0, %eax
541; SSE42-NEXT:    andb $1, %al
542; SSE42-NEXT:    movb %al, (%rdi)
543; SSE42-NEXT:    movq %rdi, %rax
544; SSE42-NEXT:    retq
545;
546; AVX1-LABEL: test_cmp_v32i8:
547; AVX1:       # BB#0:
548; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
549; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
550; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm3, %xmm2
551; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
552; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
553; AVX1-NEXT:    retq
554;
555; AVX2-LABEL: test_cmp_v32i8:
556; AVX2:       # BB#0:
557; AVX2-NEXT:    vpcmpgtb %ymm1, %ymm0, %ymm0
558; AVX2-NEXT:    retq
559;
560; AVX512-LABEL: test_cmp_v32i8:
561; AVX512:       # BB#0:
562; AVX512-NEXT:    vpcmpgtb %ymm1, %ymm0, %ymm0
563; AVX512-NEXT:    retq
564  %1 = icmp sgt <32 x i8> %a0, %a1
565  ret <32 x i1> %1
566}
567
568;
569; 512-bit vector comparisons
570;
571
572define <8 x i1> @test_cmp_v8f64(<8 x double> %a0, <8 x double> %a1) nounwind {
573; SSE-LABEL: test_cmp_v8f64:
574; SSE:       # BB#0:
575; SSE-NEXT:    cmpltpd %xmm3, %xmm7
576; SSE-NEXT:    cmpltpd %xmm2, %xmm6
577; SSE-NEXT:    packsswb %xmm7, %xmm6
578; SSE-NEXT:    cmpltpd %xmm1, %xmm5
579; SSE-NEXT:    cmpltpd %xmm0, %xmm4
580; SSE-NEXT:    packsswb %xmm5, %xmm4
581; SSE-NEXT:    packsswb %xmm6, %xmm4
582; SSE-NEXT:    movdqa %xmm4, %xmm0
583; SSE-NEXT:    retq
584;
585; AVX1-LABEL: test_cmp_v8f64:
586; AVX1:       # BB#0:
587; AVX1-NEXT:    vcmpltpd %ymm1, %ymm3, %ymm1
588; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
589; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
590; AVX1-NEXT:    vcmpltpd %ymm0, %ymm2, %ymm0
591; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
592; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
593; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
594; AVX1-NEXT:    vzeroupper
595; AVX1-NEXT:    retq
596;
597; AVX2-LABEL: test_cmp_v8f64:
598; AVX2:       # BB#0:
599; AVX2-NEXT:    vcmpltpd %ymm1, %ymm3, %ymm1
600; AVX2-NEXT:    vcmpltpd %ymm0, %ymm2, %ymm0
601; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
602; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
603; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
604; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
605; AVX2-NEXT:    vzeroupper
606; AVX2-NEXT:    retq
607;
608; AVX512F-LABEL: test_cmp_v8f64:
609; AVX512F:       # BB#0:
610; AVX512F-NEXT:    vcmpltpd %zmm0, %zmm1, %k1
611; AVX512F-NEXT:    vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
612; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0
613; AVX512F-NEXT:    retq
614;
615; AVX512DQ-LABEL: test_cmp_v8f64:
616; AVX512DQ:       # BB#0:
617; AVX512DQ-NEXT:    vcmpltpd %zmm0, %zmm1, %k0
618; AVX512DQ-NEXT:    vpmovm2q %k0, %zmm0
619; AVX512DQ-NEXT:    vpmovqw %zmm0, %xmm0
620; AVX512DQ-NEXT:    retq
621;
622; AVX512BW-LABEL: test_cmp_v8f64:
623; AVX512BW:       # BB#0:
624; AVX512BW-NEXT:    vcmpltpd %zmm0, %zmm1, %k1
625; AVX512BW-NEXT:    vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
626; AVX512BW-NEXT:    vpmovqw %zmm0, %xmm0
627; AVX512BW-NEXT:    retq
628  %1 = fcmp ogt <8 x double> %a0, %a1
629  ret <8 x i1> %1
630}
631
632define <16 x i1> @test_cmp_v16f32(<16 x float> %a0, <16 x float> %a1) nounwind {
633; SSE-LABEL: test_cmp_v16f32:
634; SSE:       # BB#0:
635; SSE-NEXT:    cmpltps %xmm3, %xmm7
636; SSE-NEXT:    cmpltps %xmm2, %xmm6
637; SSE-NEXT:    packsswb %xmm7, %xmm6
638; SSE-NEXT:    cmpltps %xmm1, %xmm5
639; SSE-NEXT:    cmpltps %xmm0, %xmm4
640; SSE-NEXT:    packsswb %xmm5, %xmm4
641; SSE-NEXT:    packsswb %xmm6, %xmm4
642; SSE-NEXT:    movdqa %xmm4, %xmm0
643; SSE-NEXT:    retq
644;
645; AVX1-LABEL: test_cmp_v16f32:
646; AVX1:       # BB#0:
647; AVX1-NEXT:    vcmpltps %ymm1, %ymm3, %ymm1
648; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
649; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
650; AVX1-NEXT:    vcmpltps %ymm0, %ymm2, %ymm0
651; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
652; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
653; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
654; AVX1-NEXT:    vzeroupper
655; AVX1-NEXT:    retq
656;
657; AVX2-LABEL: test_cmp_v16f32:
658; AVX2:       # BB#0:
659; AVX2-NEXT:    vcmpltps %ymm1, %ymm3, %ymm1
660; AVX2-NEXT:    vcmpltps %ymm0, %ymm2, %ymm0
661; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
662; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
663; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
664; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
665; AVX2-NEXT:    vzeroupper
666; AVX2-NEXT:    retq
667;
668; AVX512F-LABEL: test_cmp_v16f32:
669; AVX512F:       # BB#0:
670; AVX512F-NEXT:    vcmpltps %zmm0, %zmm1, %k1
671; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
672; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
673; AVX512F-NEXT:    retq
674;
675; AVX512DQ-LABEL: test_cmp_v16f32:
676; AVX512DQ:       # BB#0:
677; AVX512DQ-NEXT:    vcmpltps %zmm0, %zmm1, %k0
678; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0
679; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
680; AVX512DQ-NEXT:    retq
681;
682; AVX512BW-LABEL: test_cmp_v16f32:
683; AVX512BW:       # BB#0:
684; AVX512BW-NEXT:    vcmpltps %zmm0, %zmm1, %k1
685; AVX512BW-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
686; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0
687; AVX512BW-NEXT:    retq
688  %1 = fcmp ogt <16 x float> %a0, %a1
689  ret <16 x i1> %1
690}
691
692define <8 x i1> @test_cmp_v8i64(<8 x i64> %a0, <8 x i64> %a1) nounwind {
693; SSE2-LABEL: test_cmp_v8i64:
694; SSE2:       # BB#0:
695; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
696; SSE2-NEXT:    pxor %xmm8, %xmm7
697; SSE2-NEXT:    pxor %xmm8, %xmm3
698; SSE2-NEXT:    movdqa %xmm3, %xmm9
699; SSE2-NEXT:    pcmpgtd %xmm7, %xmm9
700; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
701; SSE2-NEXT:    pcmpeqd %xmm7, %xmm3
702; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
703; SSE2-NEXT:    pand %xmm10, %xmm3
704; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
705; SSE2-NEXT:    por %xmm3, %xmm7
706; SSE2-NEXT:    pxor %xmm8, %xmm6
707; SSE2-NEXT:    pxor %xmm8, %xmm2
708; SSE2-NEXT:    movdqa %xmm2, %xmm3
709; SSE2-NEXT:    pcmpgtd %xmm6, %xmm3
710; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm3[0,0,2,2]
711; SSE2-NEXT:    pcmpeqd %xmm6, %xmm2
712; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]
713; SSE2-NEXT:    pand %xmm9, %xmm6
714; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
715; SSE2-NEXT:    por %xmm6, %xmm2
716; SSE2-NEXT:    packsswb %xmm7, %xmm2
717; SSE2-NEXT:    pxor %xmm8, %xmm5
718; SSE2-NEXT:    pxor %xmm8, %xmm1
719; SSE2-NEXT:    movdqa %xmm1, %xmm3
720; SSE2-NEXT:    pcmpgtd %xmm5, %xmm3
721; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
722; SSE2-NEXT:    pcmpeqd %xmm5, %xmm1
723; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
724; SSE2-NEXT:    pand %xmm6, %xmm1
725; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
726; SSE2-NEXT:    por %xmm1, %xmm3
727; SSE2-NEXT:    pxor %xmm8, %xmm4
728; SSE2-NEXT:    pxor %xmm8, %xmm0
729; SSE2-NEXT:    movdqa %xmm0, %xmm1
730; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
731; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
732; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
733; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
734; SSE2-NEXT:    pand %xmm5, %xmm4
735; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
736; SSE2-NEXT:    por %xmm4, %xmm0
737; SSE2-NEXT:    packsswb %xmm3, %xmm0
738; SSE2-NEXT:    packsswb %xmm2, %xmm0
739; SSE2-NEXT:    retq
740;
741; SSE42-LABEL: test_cmp_v8i64:
742; SSE42:       # BB#0:
743; SSE42-NEXT:    pcmpgtq %xmm7, %xmm3
744; SSE42-NEXT:    pcmpgtq %xmm6, %xmm2
745; SSE42-NEXT:    packsswb %xmm3, %xmm2
746; SSE42-NEXT:    pcmpgtq %xmm5, %xmm1
747; SSE42-NEXT:    pcmpgtq %xmm4, %xmm0
748; SSE42-NEXT:    packsswb %xmm1, %xmm0
749; SSE42-NEXT:    packsswb %xmm2, %xmm0
750; SSE42-NEXT:    retq
751;
752; AVX1-LABEL: test_cmp_v8i64:
753; AVX1:       # BB#0:
754; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
755; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
756; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
757; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm1
758; AVX1-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
759; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
760; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
761; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
762; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm0
763; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
764; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
765; AVX1-NEXT:    vzeroupper
766; AVX1-NEXT:    retq
767;
768; AVX2-LABEL: test_cmp_v8i64:
769; AVX2:       # BB#0:
770; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm1
771; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm0
772; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
773; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
774; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
775; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
776; AVX2-NEXT:    vzeroupper
777; AVX2-NEXT:    retq
778;
779; AVX512F-LABEL: test_cmp_v8i64:
780; AVX512F:       # BB#0:
781; AVX512F-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1
782; AVX512F-NEXT:    vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
783; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0
784; AVX512F-NEXT:    retq
785;
786; AVX512DQ-LABEL: test_cmp_v8i64:
787; AVX512DQ:       # BB#0:
788; AVX512DQ-NEXT:    vpcmpgtq %zmm1, %zmm0, %k0
789; AVX512DQ-NEXT:    vpmovm2q %k0, %zmm0
790; AVX512DQ-NEXT:    vpmovqw %zmm0, %xmm0
791; AVX512DQ-NEXT:    retq
792;
793; AVX512BW-LABEL: test_cmp_v8i64:
794; AVX512BW:       # BB#0:
795; AVX512BW-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1
796; AVX512BW-NEXT:    vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
797; AVX512BW-NEXT:    vpmovqw %zmm0, %xmm0
798; AVX512BW-NEXT:    retq
799  %1 = icmp sgt <8 x i64> %a0, %a1
800  ret <8 x i1> %1
801}
802
803define <16 x i1> @test_cmp_v16i32(<16 x i32> %a0, <16 x i32> %a1) nounwind {
804; SSE-LABEL: test_cmp_v16i32:
805; SSE:       # BB#0:
806; SSE-NEXT:    pcmpgtd %xmm7, %xmm3
807; SSE-NEXT:    pcmpgtd %xmm6, %xmm2
808; SSE-NEXT:    packsswb %xmm3, %xmm2
809; SSE-NEXT:    pcmpgtd %xmm5, %xmm1
810; SSE-NEXT:    pcmpgtd %xmm4, %xmm0
811; SSE-NEXT:    packsswb %xmm1, %xmm0
812; SSE-NEXT:    packsswb %xmm2, %xmm0
813; SSE-NEXT:    retq
814;
815; AVX1-LABEL: test_cmp_v16i32:
816; AVX1:       # BB#0:
817; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
818; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
819; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm5, %xmm4
820; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm1, %xmm1
821; AVX1-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
822; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
823; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
824; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm4, %xmm3
825; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0
826; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
827; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
828; AVX1-NEXT:    vzeroupper
829; AVX1-NEXT:    retq
830;
831; AVX2-LABEL: test_cmp_v16i32:
832; AVX2:       # BB#0:
833; AVX2-NEXT:    vpcmpgtd %ymm3, %ymm1, %ymm1
834; AVX2-NEXT:    vpcmpgtd %ymm2, %ymm0, %ymm0
835; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
836; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
837; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
838; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
839; AVX2-NEXT:    vzeroupper
840; AVX2-NEXT:    retq
841;
842; AVX512F-LABEL: test_cmp_v16i32:
843; AVX512F:       # BB#0:
844; AVX512F-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1
845; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
846; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
847; AVX512F-NEXT:    retq
848;
849; AVX512DQ-LABEL: test_cmp_v16i32:
850; AVX512DQ:       # BB#0:
851; AVX512DQ-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0
852; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0
853; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
854; AVX512DQ-NEXT:    retq
855;
856; AVX512BW-LABEL: test_cmp_v16i32:
857; AVX512BW:       # BB#0:
858; AVX512BW-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1
859; AVX512BW-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
860; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0
861; AVX512BW-NEXT:    retq
862  %1 = icmp sgt <16 x i32> %a0, %a1
863  ret <16 x i1> %1
864}
865
866define <32 x i1> @test_cmp_v32i16(<32 x i16> %a0, <32 x i16> %a1) nounwind {
867; SSE2-LABEL: test_cmp_v32i16:
868; SSE2:       # BB#0:
869; SSE2-NEXT:    pcmpgtw %xmm5, %xmm1
870; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255]
871; SSE2-NEXT:    pand %xmm5, %xmm1
872; SSE2-NEXT:    pcmpgtw %xmm4, %xmm0
873; SSE2-NEXT:    pand %xmm5, %xmm0
874; SSE2-NEXT:    packuswb %xmm1, %xmm0
875; SSE2-NEXT:    pcmpgtw %xmm7, %xmm3
876; SSE2-NEXT:    pand %xmm5, %xmm3
877; SSE2-NEXT:    pcmpgtw %xmm6, %xmm2
878; SSE2-NEXT:    pand %xmm5, %xmm2
879; SSE2-NEXT:    packuswb %xmm3, %xmm2
880; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
881; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
882; SSE2-NEXT:    andb $1, %al
883; SSE2-NEXT:    movb %al, 2(%rdi)
884; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
885; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
886; SSE2-NEXT:    andb $1, %al
887; SSE2-NEXT:    movb %al, (%rdi)
888; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
889; SSE2-NEXT:    andb $1, %al
890; SSE2-NEXT:    movb %al, 2(%rdi)
891; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
892; SSE2-NEXT:    andb $1, %al
893; SSE2-NEXT:    movb %al, (%rdi)
894; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
895; SSE2-NEXT:    andb $1, %al
896; SSE2-NEXT:    movb %al, 2(%rdi)
897; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
898; SSE2-NEXT:    andb $1, %al
899; SSE2-NEXT:    movb %al, (%rdi)
900; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
901; SSE2-NEXT:    andb $1, %al
902; SSE2-NEXT:    movb %al, 2(%rdi)
903; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
904; SSE2-NEXT:    andb $1, %al
905; SSE2-NEXT:    movb %al, (%rdi)
906; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
907; SSE2-NEXT:    andb $1, %al
908; SSE2-NEXT:    movb %al, 2(%rdi)
909; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
910; SSE2-NEXT:    andb $1, %al
911; SSE2-NEXT:    movb %al, (%rdi)
912; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
913; SSE2-NEXT:    andb $1, %al
914; SSE2-NEXT:    movb %al, 2(%rdi)
915; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
916; SSE2-NEXT:    andb $1, %al
917; SSE2-NEXT:    movb %al, (%rdi)
918; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
919; SSE2-NEXT:    andb $1, %al
920; SSE2-NEXT:    movb %al, 2(%rdi)
921; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
922; SSE2-NEXT:    andb $1, %al
923; SSE2-NEXT:    movb %al, (%rdi)
924; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
925; SSE2-NEXT:    andb $1, %al
926; SSE2-NEXT:    movb %al, 2(%rdi)
927; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
928; SSE2-NEXT:    andb $1, %al
929; SSE2-NEXT:    movb %al, (%rdi)
930; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
931; SSE2-NEXT:    andb $1, %al
932; SSE2-NEXT:    movb %al, 2(%rdi)
933; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
934; SSE2-NEXT:    andb $1, %al
935; SSE2-NEXT:    movb %al, (%rdi)
936; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
937; SSE2-NEXT:    andb $1, %al
938; SSE2-NEXT:    movb %al, 2(%rdi)
939; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
940; SSE2-NEXT:    andb $1, %al
941; SSE2-NEXT:    movb %al, (%rdi)
942; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
943; SSE2-NEXT:    andb $1, %al
944; SSE2-NEXT:    movb %al, 2(%rdi)
945; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
946; SSE2-NEXT:    andb $1, %al
947; SSE2-NEXT:    movb %al, (%rdi)
948; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
949; SSE2-NEXT:    andb $1, %al
950; SSE2-NEXT:    movb %al, 2(%rdi)
951; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
952; SSE2-NEXT:    andb $1, %al
953; SSE2-NEXT:    movb %al, (%rdi)
954; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
955; SSE2-NEXT:    andb $1, %al
956; SSE2-NEXT:    movb %al, 2(%rdi)
957; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
958; SSE2-NEXT:    andb $1, %al
959; SSE2-NEXT:    movb %al, (%rdi)
960; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
961; SSE2-NEXT:    andb $1, %al
962; SSE2-NEXT:    movb %al, 2(%rdi)
963; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
964; SSE2-NEXT:    andb $1, %al
965; SSE2-NEXT:    movb %al, (%rdi)
966; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
967; SSE2-NEXT:    andb $1, %al
968; SSE2-NEXT:    movb %al, 2(%rdi)
969; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
970; SSE2-NEXT:    andb $1, %al
971; SSE2-NEXT:    movb %al, (%rdi)
972; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
973; SSE2-NEXT:    andb $1, %al
974; SSE2-NEXT:    movb %al, 2(%rdi)
975; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
976; SSE2-NEXT:    andb $1, %al
977; SSE2-NEXT:    movb %al, (%rdi)
978; SSE2-NEXT:    movq %rdi, %rax
979; SSE2-NEXT:    retq
980;
981; SSE42-LABEL: test_cmp_v32i16:
982; SSE42:       # BB#0:
983; SSE42-NEXT:    pcmpgtw %xmm4, %xmm0
984; SSE42-NEXT:    pcmpgtw %xmm5, %xmm1
985; SSE42-NEXT:    pcmpgtw %xmm6, %xmm2
986; SSE42-NEXT:    pcmpgtw %xmm7, %xmm3
987; SSE42-NEXT:    pextrb $14, %xmm3, %eax
988; SSE42-NEXT:    andb $1, %al
989; SSE42-NEXT:    movb %al, 2(%rdi)
990; SSE42-NEXT:    pextrb $12, %xmm3, %eax
991; SSE42-NEXT:    andb $1, %al
992; SSE42-NEXT:    movb %al, 2(%rdi)
993; SSE42-NEXT:    pextrb $10, %xmm3, %eax
994; SSE42-NEXT:    andb $1, %al
995; SSE42-NEXT:    movb %al, 2(%rdi)
996; SSE42-NEXT:    pextrb $8, %xmm3, %eax
997; SSE42-NEXT:    andb $1, %al
998; SSE42-NEXT:    movb %al, 2(%rdi)
999; SSE42-NEXT:    pextrb $6, %xmm3, %eax
1000; SSE42-NEXT:    andb $1, %al
1001; SSE42-NEXT:    movb %al, 2(%rdi)
1002; SSE42-NEXT:    pextrb $4, %xmm3, %eax
1003; SSE42-NEXT:    andb $1, %al
1004; SSE42-NEXT:    movb %al, 2(%rdi)
1005; SSE42-NEXT:    pextrb $2, %xmm3, %eax
1006; SSE42-NEXT:    andb $1, %al
1007; SSE42-NEXT:    movb %al, 2(%rdi)
1008; SSE42-NEXT:    pextrb $0, %xmm3, %eax
1009; SSE42-NEXT:    andb $1, %al
1010; SSE42-NEXT:    movb %al, 2(%rdi)
1011; SSE42-NEXT:    pextrb $14, %xmm2, %eax
1012; SSE42-NEXT:    andb $1, %al
1013; SSE42-NEXT:    movb %al, 2(%rdi)
1014; SSE42-NEXT:    pextrb $12, %xmm2, %eax
1015; SSE42-NEXT:    andb $1, %al
1016; SSE42-NEXT:    movb %al, 2(%rdi)
1017; SSE42-NEXT:    pextrb $10, %xmm2, %eax
1018; SSE42-NEXT:    andb $1, %al
1019; SSE42-NEXT:    movb %al, 2(%rdi)
1020; SSE42-NEXT:    pextrb $8, %xmm2, %eax
1021; SSE42-NEXT:    andb $1, %al
1022; SSE42-NEXT:    movb %al, 2(%rdi)
1023; SSE42-NEXT:    pextrb $6, %xmm2, %eax
1024; SSE42-NEXT:    andb $1, %al
1025; SSE42-NEXT:    movb %al, 2(%rdi)
1026; SSE42-NEXT:    pextrb $4, %xmm2, %eax
1027; SSE42-NEXT:    andb $1, %al
1028; SSE42-NEXT:    movb %al, 2(%rdi)
1029; SSE42-NEXT:    pextrb $2, %xmm2, %eax
1030; SSE42-NEXT:    andb $1, %al
1031; SSE42-NEXT:    movb %al, 2(%rdi)
1032; SSE42-NEXT:    pextrb $0, %xmm2, %eax
1033; SSE42-NEXT:    andb $1, %al
1034; SSE42-NEXT:    movb %al, 2(%rdi)
1035; SSE42-NEXT:    pextrb $14, %xmm1, %eax
1036; SSE42-NEXT:    andb $1, %al
1037; SSE42-NEXT:    movb %al, (%rdi)
1038; SSE42-NEXT:    pextrb $12, %xmm1, %eax
1039; SSE42-NEXT:    andb $1, %al
1040; SSE42-NEXT:    movb %al, (%rdi)
1041; SSE42-NEXT:    pextrb $10, %xmm1, %eax
1042; SSE42-NEXT:    andb $1, %al
1043; SSE42-NEXT:    movb %al, (%rdi)
1044; SSE42-NEXT:    pextrb $8, %xmm1, %eax
1045; SSE42-NEXT:    andb $1, %al
1046; SSE42-NEXT:    movb %al, (%rdi)
1047; SSE42-NEXT:    pextrb $6, %xmm1, %eax
1048; SSE42-NEXT:    andb $1, %al
1049; SSE42-NEXT:    movb %al, (%rdi)
1050; SSE42-NEXT:    pextrb $4, %xmm1, %eax
1051; SSE42-NEXT:    andb $1, %al
1052; SSE42-NEXT:    movb %al, (%rdi)
1053; SSE42-NEXT:    pextrb $2, %xmm1, %eax
1054; SSE42-NEXT:    andb $1, %al
1055; SSE42-NEXT:    movb %al, (%rdi)
1056; SSE42-NEXT:    pextrb $0, %xmm1, %eax
1057; SSE42-NEXT:    andb $1, %al
1058; SSE42-NEXT:    movb %al, (%rdi)
1059; SSE42-NEXT:    pextrb $14, %xmm0, %eax
1060; SSE42-NEXT:    andb $1, %al
1061; SSE42-NEXT:    movb %al, (%rdi)
1062; SSE42-NEXT:    pextrb $12, %xmm0, %eax
1063; SSE42-NEXT:    andb $1, %al
1064; SSE42-NEXT:    movb %al, (%rdi)
1065; SSE42-NEXT:    pextrb $10, %xmm0, %eax
1066; SSE42-NEXT:    andb $1, %al
1067; SSE42-NEXT:    movb %al, (%rdi)
1068; SSE42-NEXT:    pextrb $8, %xmm0, %eax
1069; SSE42-NEXT:    andb $1, %al
1070; SSE42-NEXT:    movb %al, (%rdi)
1071; SSE42-NEXT:    pextrb $6, %xmm0, %eax
1072; SSE42-NEXT:    andb $1, %al
1073; SSE42-NEXT:    movb %al, (%rdi)
1074; SSE42-NEXT:    pextrb $4, %xmm0, %eax
1075; SSE42-NEXT:    andb $1, %al
1076; SSE42-NEXT:    movb %al, (%rdi)
1077; SSE42-NEXT:    pextrb $2, %xmm0, %eax
1078; SSE42-NEXT:    andb $1, %al
1079; SSE42-NEXT:    movb %al, (%rdi)
1080; SSE42-NEXT:    pextrb $0, %xmm0, %eax
1081; SSE42-NEXT:    andb $1, %al
1082; SSE42-NEXT:    movb %al, (%rdi)
1083; SSE42-NEXT:    movq %rdi, %rax
1084; SSE42-NEXT:    retq
1085;
1086; AVX1-LABEL: test_cmp_v32i16:
1087; AVX1:       # BB#0:
1088; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1089; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
1090; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm5, %xmm4
1091; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm1, %xmm1
1092; AVX1-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
1093; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
1094; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
1095; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm4, %xmm3
1096; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm0, %xmm0
1097; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
1098; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1099; AVX1-NEXT:    retq
1100;
1101; AVX2-LABEL: test_cmp_v32i16:
1102; AVX2:       # BB#0:
1103; AVX2-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1104; AVX2-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1105; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
1106; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1107; AVX2-NEXT:    retq
1108;
1109; AVX512F-LABEL: test_cmp_v32i16:
1110; AVX512F:       # BB#0:
1111; AVX512F-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1112; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
1113; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
1114; AVX512F-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1115; AVX512F-NEXT:    vpmovsxwd %ymm1, %zmm1
1116; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
1117; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1118; AVX512F-NEXT:    retq
1119;
1120; AVX512DQ-LABEL: test_cmp_v32i16:
1121; AVX512DQ:       # BB#0:
1122; AVX512DQ-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1123; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm0
1124; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
1125; AVX512DQ-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1126; AVX512DQ-NEXT:    vpmovsxwd %ymm1, %zmm1
1127; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm1
1128; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1129; AVX512DQ-NEXT:    retq
1130;
1131; AVX512BW-LABEL: test_cmp_v32i16:
1132; AVX512BW:       # BB#0:
1133; AVX512BW-NEXT:    vpcmpgtw %zmm1, %zmm0, %k1
1134; AVX512BW-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
1135; AVX512BW-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}
1136; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
1137; AVX512BW-NEXT:    retq
1138  %1 = icmp sgt <32 x i16> %a0, %a1
1139  ret <32 x i1> %1
1140}
1141
1142define <64 x i1> @test_cmp_v64i8(<64 x i8> %a0, <64 x i8> %a1) nounwind {
1143; SSE2-LABEL: test_cmp_v64i8:
1144; SSE2:       # BB#0:
1145; SSE2-NEXT:    pcmpgtb %xmm4, %xmm0
1146; SSE2-NEXT:    pcmpgtb %xmm5, %xmm1
1147; SSE2-NEXT:    pcmpgtb %xmm6, %xmm2
1148; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
1149; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
1150; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1151; SSE2-NEXT:    andb $1, %al
1152; SSE2-NEXT:    movb %al, 6(%rdi)
1153; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
1154; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1155; SSE2-NEXT:    andb $1, %al
1156; SSE2-NEXT:    movb %al, 4(%rdi)
1157; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
1158; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1159; SSE2-NEXT:    andb $1, %al
1160; SSE2-NEXT:    movb %al, 2(%rdi)
1161; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
1162; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1163; SSE2-NEXT:    andb $1, %al
1164; SSE2-NEXT:    movb %al, (%rdi)
1165; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1166; SSE2-NEXT:    andb $1, %al
1167; SSE2-NEXT:    movb %al, 6(%rdi)
1168; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1169; SSE2-NEXT:    andb $1, %al
1170; SSE2-NEXT:    movb %al, 4(%rdi)
1171; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1172; SSE2-NEXT:    andb $1, %al
1173; SSE2-NEXT:    movb %al, 2(%rdi)
1174; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1175; SSE2-NEXT:    andb $1, %al
1176; SSE2-NEXT:    movb %al, (%rdi)
1177; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1178; SSE2-NEXT:    andb $1, %al
1179; SSE2-NEXT:    movb %al, 6(%rdi)
1180; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1181; SSE2-NEXT:    andb $1, %al
1182; SSE2-NEXT:    movb %al, 4(%rdi)
1183; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1184; SSE2-NEXT:    andb $1, %al
1185; SSE2-NEXT:    movb %al, 2(%rdi)
1186; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1187; SSE2-NEXT:    andb $1, %al
1188; SSE2-NEXT:    movb %al, (%rdi)
1189; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1190; SSE2-NEXT:    andb $1, %al
1191; SSE2-NEXT:    movb %al, 6(%rdi)
1192; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1193; SSE2-NEXT:    andb $1, %al
1194; SSE2-NEXT:    movb %al, 4(%rdi)
1195; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1196; SSE2-NEXT:    andb $1, %al
1197; SSE2-NEXT:    movb %al, 2(%rdi)
1198; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1199; SSE2-NEXT:    andb $1, %al
1200; SSE2-NEXT:    movb %al, (%rdi)
1201; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1202; SSE2-NEXT:    andb $1, %al
1203; SSE2-NEXT:    movb %al, 6(%rdi)
1204; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1205; SSE2-NEXT:    andb $1, %al
1206; SSE2-NEXT:    movb %al, 4(%rdi)
1207; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1208; SSE2-NEXT:    andb $1, %al
1209; SSE2-NEXT:    movb %al, 2(%rdi)
1210; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1211; SSE2-NEXT:    andb $1, %al
1212; SSE2-NEXT:    movb %al, (%rdi)
1213; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1214; SSE2-NEXT:    andb $1, %al
1215; SSE2-NEXT:    movb %al, 6(%rdi)
1216; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1217; SSE2-NEXT:    andb $1, %al
1218; SSE2-NEXT:    movb %al, 4(%rdi)
1219; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1220; SSE2-NEXT:    andb $1, %al
1221; SSE2-NEXT:    movb %al, 2(%rdi)
1222; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1223; SSE2-NEXT:    andb $1, %al
1224; SSE2-NEXT:    movb %al, (%rdi)
1225; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1226; SSE2-NEXT:    andb $1, %al
1227; SSE2-NEXT:    movb %al, 6(%rdi)
1228; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1229; SSE2-NEXT:    andb $1, %al
1230; SSE2-NEXT:    movb %al, 4(%rdi)
1231; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1232; SSE2-NEXT:    andb $1, %al
1233; SSE2-NEXT:    movb %al, 2(%rdi)
1234; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1235; SSE2-NEXT:    andb $1, %al
1236; SSE2-NEXT:    movb %al, (%rdi)
1237; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1238; SSE2-NEXT:    andb $1, %al
1239; SSE2-NEXT:    movb %al, 6(%rdi)
1240; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1241; SSE2-NEXT:    andb $1, %al
1242; SSE2-NEXT:    movb %al, 4(%rdi)
1243; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1244; SSE2-NEXT:    andb $1, %al
1245; SSE2-NEXT:    movb %al, 2(%rdi)
1246; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1247; SSE2-NEXT:    andb $1, %al
1248; SSE2-NEXT:    movb %al, (%rdi)
1249; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1250; SSE2-NEXT:    andb $1, %al
1251; SSE2-NEXT:    movb %al, 6(%rdi)
1252; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1253; SSE2-NEXT:    andb $1, %al
1254; SSE2-NEXT:    movb %al, 4(%rdi)
1255; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1256; SSE2-NEXT:    andb $1, %al
1257; SSE2-NEXT:    movb %al, 2(%rdi)
1258; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1259; SSE2-NEXT:    andb $1, %al
1260; SSE2-NEXT:    movb %al, (%rdi)
1261; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1262; SSE2-NEXT:    andb $1, %al
1263; SSE2-NEXT:    movb %al, 6(%rdi)
1264; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1265; SSE2-NEXT:    andb $1, %al
1266; SSE2-NEXT:    movb %al, 4(%rdi)
1267; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1268; SSE2-NEXT:    andb $1, %al
1269; SSE2-NEXT:    movb %al, 2(%rdi)
1270; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1271; SSE2-NEXT:    andb $1, %al
1272; SSE2-NEXT:    movb %al, (%rdi)
1273; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1274; SSE2-NEXT:    andb $1, %al
1275; SSE2-NEXT:    movb %al, 6(%rdi)
1276; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1277; SSE2-NEXT:    andb $1, %al
1278; SSE2-NEXT:    movb %al, 4(%rdi)
1279; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1280; SSE2-NEXT:    andb $1, %al
1281; SSE2-NEXT:    movb %al, 2(%rdi)
1282; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1283; SSE2-NEXT:    andb $1, %al
1284; SSE2-NEXT:    movb %al, (%rdi)
1285; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1286; SSE2-NEXT:    andb $1, %al
1287; SSE2-NEXT:    movb %al, 6(%rdi)
1288; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1289; SSE2-NEXT:    andb $1, %al
1290; SSE2-NEXT:    movb %al, 4(%rdi)
1291; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1292; SSE2-NEXT:    andb $1, %al
1293; SSE2-NEXT:    movb %al, 2(%rdi)
1294; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1295; SSE2-NEXT:    andb $1, %al
1296; SSE2-NEXT:    movb %al, (%rdi)
1297; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1298; SSE2-NEXT:    andb $1, %al
1299; SSE2-NEXT:    movb %al, 6(%rdi)
1300; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1301; SSE2-NEXT:    andb $1, %al
1302; SSE2-NEXT:    movb %al, 4(%rdi)
1303; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1304; SSE2-NEXT:    andb $1, %al
1305; SSE2-NEXT:    movb %al, 2(%rdi)
1306; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1307; SSE2-NEXT:    andb $1, %al
1308; SSE2-NEXT:    movb %al, (%rdi)
1309; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1310; SSE2-NEXT:    andb $1, %al
1311; SSE2-NEXT:    movb %al, 6(%rdi)
1312; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1313; SSE2-NEXT:    andb $1, %al
1314; SSE2-NEXT:    movb %al, 4(%rdi)
1315; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1316; SSE2-NEXT:    andb $1, %al
1317; SSE2-NEXT:    movb %al, 2(%rdi)
1318; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1319; SSE2-NEXT:    andb $1, %al
1320; SSE2-NEXT:    movb %al, (%rdi)
1321; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1322; SSE2-NEXT:    andb $1, %al
1323; SSE2-NEXT:    movb %al, 6(%rdi)
1324; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1325; SSE2-NEXT:    andb $1, %al
1326; SSE2-NEXT:    movb %al, 4(%rdi)
1327; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1328; SSE2-NEXT:    andb $1, %al
1329; SSE2-NEXT:    movb %al, 2(%rdi)
1330; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1331; SSE2-NEXT:    andb $1, %al
1332; SSE2-NEXT:    movb %al, (%rdi)
1333; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1334; SSE2-NEXT:    andb $1, %al
1335; SSE2-NEXT:    movb %al, 6(%rdi)
1336; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1337; SSE2-NEXT:    andb $1, %al
1338; SSE2-NEXT:    movb %al, 4(%rdi)
1339; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1340; SSE2-NEXT:    andb $1, %al
1341; SSE2-NEXT:    movb %al, 2(%rdi)
1342; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1343; SSE2-NEXT:    andb $1, %al
1344; SSE2-NEXT:    movb %al, (%rdi)
1345; SSE2-NEXT:    movq %rdi, %rax
1346; SSE2-NEXT:    retq
1347;
1348; SSE42-LABEL: test_cmp_v64i8:
1349; SSE42:       # BB#0:
1350; SSE42-NEXT:    pcmpgtb %xmm4, %xmm0
1351; SSE42-NEXT:    pcmpgtb %xmm5, %xmm1
1352; SSE42-NEXT:    pcmpgtb %xmm6, %xmm2
1353; SSE42-NEXT:    pcmpgtb %xmm7, %xmm3
1354; SSE42-NEXT:    pextrb $15, %xmm3, %eax
1355; SSE42-NEXT:    andb $1, %al
1356; SSE42-NEXT:    movb %al, 6(%rdi)
1357; SSE42-NEXT:    pextrb $14, %xmm3, %eax
1358; SSE42-NEXT:    andb $1, %al
1359; SSE42-NEXT:    movb %al, 6(%rdi)
1360; SSE42-NEXT:    pextrb $13, %xmm3, %eax
1361; SSE42-NEXT:    andb $1, %al
1362; SSE42-NEXT:    movb %al, 6(%rdi)
1363; SSE42-NEXT:    pextrb $12, %xmm3, %eax
1364; SSE42-NEXT:    andb $1, %al
1365; SSE42-NEXT:    movb %al, 6(%rdi)
1366; SSE42-NEXT:    pextrb $11, %xmm3, %eax
1367; SSE42-NEXT:    andb $1, %al
1368; SSE42-NEXT:    movb %al, 6(%rdi)
1369; SSE42-NEXT:    pextrb $10, %xmm3, %eax
1370; SSE42-NEXT:    andb $1, %al
1371; SSE42-NEXT:    movb %al, 6(%rdi)
1372; SSE42-NEXT:    pextrb $9, %xmm3, %eax
1373; SSE42-NEXT:    andb $1, %al
1374; SSE42-NEXT:    movb %al, 6(%rdi)
1375; SSE42-NEXT:    pextrb $8, %xmm3, %eax
1376; SSE42-NEXT:    andb $1, %al
1377; SSE42-NEXT:    movb %al, 6(%rdi)
1378; SSE42-NEXT:    pextrb $7, %xmm3, %eax
1379; SSE42-NEXT:    andb $1, %al
1380; SSE42-NEXT:    movb %al, 6(%rdi)
1381; SSE42-NEXT:    pextrb $6, %xmm3, %eax
1382; SSE42-NEXT:    andb $1, %al
1383; SSE42-NEXT:    movb %al, 6(%rdi)
1384; SSE42-NEXT:    pextrb $5, %xmm3, %eax
1385; SSE42-NEXT:    andb $1, %al
1386; SSE42-NEXT:    movb %al, 6(%rdi)
1387; SSE42-NEXT:    pextrb $4, %xmm3, %eax
1388; SSE42-NEXT:    andb $1, %al
1389; SSE42-NEXT:    movb %al, 6(%rdi)
1390; SSE42-NEXT:    pextrb $3, %xmm3, %eax
1391; SSE42-NEXT:    andb $1, %al
1392; SSE42-NEXT:    movb %al, 6(%rdi)
1393; SSE42-NEXT:    pextrb $2, %xmm3, %eax
1394; SSE42-NEXT:    andb $1, %al
1395; SSE42-NEXT:    movb %al, 6(%rdi)
1396; SSE42-NEXT:    pextrb $1, %xmm3, %eax
1397; SSE42-NEXT:    andb $1, %al
1398; SSE42-NEXT:    movb %al, 6(%rdi)
1399; SSE42-NEXT:    pextrb $0, %xmm3, %eax
1400; SSE42-NEXT:    andb $1, %al
1401; SSE42-NEXT:    movb %al, 6(%rdi)
1402; SSE42-NEXT:    pextrb $15, %xmm2, %eax
1403; SSE42-NEXT:    andb $1, %al
1404; SSE42-NEXT:    movb %al, 4(%rdi)
1405; SSE42-NEXT:    pextrb $14, %xmm2, %eax
1406; SSE42-NEXT:    andb $1, %al
1407; SSE42-NEXT:    movb %al, 4(%rdi)
1408; SSE42-NEXT:    pextrb $13, %xmm2, %eax
1409; SSE42-NEXT:    andb $1, %al
1410; SSE42-NEXT:    movb %al, 4(%rdi)
1411; SSE42-NEXT:    pextrb $12, %xmm2, %eax
1412; SSE42-NEXT:    andb $1, %al
1413; SSE42-NEXT:    movb %al, 4(%rdi)
1414; SSE42-NEXT:    pextrb $11, %xmm2, %eax
1415; SSE42-NEXT:    andb $1, %al
1416; SSE42-NEXT:    movb %al, 4(%rdi)
1417; SSE42-NEXT:    pextrb $10, %xmm2, %eax
1418; SSE42-NEXT:    andb $1, %al
1419; SSE42-NEXT:    movb %al, 4(%rdi)
1420; SSE42-NEXT:    pextrb $9, %xmm2, %eax
1421; SSE42-NEXT:    andb $1, %al
1422; SSE42-NEXT:    movb %al, 4(%rdi)
1423; SSE42-NEXT:    pextrb $8, %xmm2, %eax
1424; SSE42-NEXT:    andb $1, %al
1425; SSE42-NEXT:    movb %al, 4(%rdi)
1426; SSE42-NEXT:    pextrb $7, %xmm2, %eax
1427; SSE42-NEXT:    andb $1, %al
1428; SSE42-NEXT:    movb %al, 4(%rdi)
1429; SSE42-NEXT:    pextrb $6, %xmm2, %eax
1430; SSE42-NEXT:    andb $1, %al
1431; SSE42-NEXT:    movb %al, 4(%rdi)
1432; SSE42-NEXT:    pextrb $5, %xmm2, %eax
1433; SSE42-NEXT:    andb $1, %al
1434; SSE42-NEXT:    movb %al, 4(%rdi)
1435; SSE42-NEXT:    pextrb $4, %xmm2, %eax
1436; SSE42-NEXT:    andb $1, %al
1437; SSE42-NEXT:    movb %al, 4(%rdi)
1438; SSE42-NEXT:    pextrb $3, %xmm2, %eax
1439; SSE42-NEXT:    andb $1, %al
1440; SSE42-NEXT:    movb %al, 4(%rdi)
1441; SSE42-NEXT:    pextrb $2, %xmm2, %eax
1442; SSE42-NEXT:    andb $1, %al
1443; SSE42-NEXT:    movb %al, 4(%rdi)
1444; SSE42-NEXT:    pextrb $1, %xmm2, %eax
1445; SSE42-NEXT:    andb $1, %al
1446; SSE42-NEXT:    movb %al, 4(%rdi)
1447; SSE42-NEXT:    pextrb $0, %xmm2, %eax
1448; SSE42-NEXT:    andb $1, %al
1449; SSE42-NEXT:    movb %al, 4(%rdi)
1450; SSE42-NEXT:    pextrb $15, %xmm1, %eax
1451; SSE42-NEXT:    andb $1, %al
1452; SSE42-NEXT:    movb %al, 2(%rdi)
1453; SSE42-NEXT:    pextrb $14, %xmm1, %eax
1454; SSE42-NEXT:    andb $1, %al
1455; SSE42-NEXT:    movb %al, 2(%rdi)
1456; SSE42-NEXT:    pextrb $13, %xmm1, %eax
1457; SSE42-NEXT:    andb $1, %al
1458; SSE42-NEXT:    movb %al, 2(%rdi)
1459; SSE42-NEXT:    pextrb $12, %xmm1, %eax
1460; SSE42-NEXT:    andb $1, %al
1461; SSE42-NEXT:    movb %al, 2(%rdi)
1462; SSE42-NEXT:    pextrb $11, %xmm1, %eax
1463; SSE42-NEXT:    andb $1, %al
1464; SSE42-NEXT:    movb %al, 2(%rdi)
1465; SSE42-NEXT:    pextrb $10, %xmm1, %eax
1466; SSE42-NEXT:    andb $1, %al
1467; SSE42-NEXT:    movb %al, 2(%rdi)
1468; SSE42-NEXT:    pextrb $9, %xmm1, %eax
1469; SSE42-NEXT:    andb $1, %al
1470; SSE42-NEXT:    movb %al, 2(%rdi)
1471; SSE42-NEXT:    pextrb $8, %xmm1, %eax
1472; SSE42-NEXT:    andb $1, %al
1473; SSE42-NEXT:    movb %al, 2(%rdi)
1474; SSE42-NEXT:    pextrb $7, %xmm1, %eax
1475; SSE42-NEXT:    andb $1, %al
1476; SSE42-NEXT:    movb %al, 2(%rdi)
1477; SSE42-NEXT:    pextrb $6, %xmm1, %eax
1478; SSE42-NEXT:    andb $1, %al
1479; SSE42-NEXT:    movb %al, 2(%rdi)
1480; SSE42-NEXT:    pextrb $5, %xmm1, %eax
1481; SSE42-NEXT:    andb $1, %al
1482; SSE42-NEXT:    movb %al, 2(%rdi)
1483; SSE42-NEXT:    pextrb $4, %xmm1, %eax
1484; SSE42-NEXT:    andb $1, %al
1485; SSE42-NEXT:    movb %al, 2(%rdi)
1486; SSE42-NEXT:    pextrb $3, %xmm1, %eax
1487; SSE42-NEXT:    andb $1, %al
1488; SSE42-NEXT:    movb %al, 2(%rdi)
1489; SSE42-NEXT:    pextrb $2, %xmm1, %eax
1490; SSE42-NEXT:    andb $1, %al
1491; SSE42-NEXT:    movb %al, 2(%rdi)
1492; SSE42-NEXT:    pextrb $1, %xmm1, %eax
1493; SSE42-NEXT:    andb $1, %al
1494; SSE42-NEXT:    movb %al, 2(%rdi)
1495; SSE42-NEXT:    pextrb $0, %xmm1, %eax
1496; SSE42-NEXT:    andb $1, %al
1497; SSE42-NEXT:    movb %al, 2(%rdi)
1498; SSE42-NEXT:    pextrb $15, %xmm0, %eax
1499; SSE42-NEXT:    andb $1, %al
1500; SSE42-NEXT:    movb %al, (%rdi)
1501; SSE42-NEXT:    pextrb $14, %xmm0, %eax
1502; SSE42-NEXT:    andb $1, %al
1503; SSE42-NEXT:    movb %al, (%rdi)
1504; SSE42-NEXT:    pextrb $13, %xmm0, %eax
1505; SSE42-NEXT:    andb $1, %al
1506; SSE42-NEXT:    movb %al, (%rdi)
1507; SSE42-NEXT:    pextrb $12, %xmm0, %eax
1508; SSE42-NEXT:    andb $1, %al
1509; SSE42-NEXT:    movb %al, (%rdi)
1510; SSE42-NEXT:    pextrb $11, %xmm0, %eax
1511; SSE42-NEXT:    andb $1, %al
1512; SSE42-NEXT:    movb %al, (%rdi)
1513; SSE42-NEXT:    pextrb $10, %xmm0, %eax
1514; SSE42-NEXT:    andb $1, %al
1515; SSE42-NEXT:    movb %al, (%rdi)
1516; SSE42-NEXT:    pextrb $9, %xmm0, %eax
1517; SSE42-NEXT:    andb $1, %al
1518; SSE42-NEXT:    movb %al, (%rdi)
1519; SSE42-NEXT:    pextrb $8, %xmm0, %eax
1520; SSE42-NEXT:    andb $1, %al
1521; SSE42-NEXT:    movb %al, (%rdi)
1522; SSE42-NEXT:    pextrb $7, %xmm0, %eax
1523; SSE42-NEXT:    andb $1, %al
1524; SSE42-NEXT:    movb %al, (%rdi)
1525; SSE42-NEXT:    pextrb $6, %xmm0, %eax
1526; SSE42-NEXT:    andb $1, %al
1527; SSE42-NEXT:    movb %al, (%rdi)
1528; SSE42-NEXT:    pextrb $5, %xmm0, %eax
1529; SSE42-NEXT:    andb $1, %al
1530; SSE42-NEXT:    movb %al, (%rdi)
1531; SSE42-NEXT:    pextrb $4, %xmm0, %eax
1532; SSE42-NEXT:    andb $1, %al
1533; SSE42-NEXT:    movb %al, (%rdi)
1534; SSE42-NEXT:    pextrb $3, %xmm0, %eax
1535; SSE42-NEXT:    andb $1, %al
1536; SSE42-NEXT:    movb %al, (%rdi)
1537; SSE42-NEXT:    pextrb $2, %xmm0, %eax
1538; SSE42-NEXT:    andb $1, %al
1539; SSE42-NEXT:    movb %al, (%rdi)
1540; SSE42-NEXT:    pextrb $1, %xmm0, %eax
1541; SSE42-NEXT:    andb $1, %al
1542; SSE42-NEXT:    movb %al, (%rdi)
1543; SSE42-NEXT:    pextrb $0, %xmm0, %eax
1544; SSE42-NEXT:    andb $1, %al
1545; SSE42-NEXT:    movb %al, (%rdi)
1546; SSE42-NEXT:    movq %rdi, %rax
1547; SSE42-NEXT:    retq
1548;
1549; AVX1-LABEL: test_cmp_v64i8:
1550; AVX1:       # BB#0:
1551; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm4
1552; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
1553; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1554; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm0
1555; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm2
1556; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
1557; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1558; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm1
1559; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
1560; AVX1-NEXT:    andb $1, %al
1561; AVX1-NEXT:    movb %al, 4(%rdi)
1562; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
1563; AVX1-NEXT:    andb $1, %al
1564; AVX1-NEXT:    movb %al, 4(%rdi)
1565; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
1566; AVX1-NEXT:    andb $1, %al
1567; AVX1-NEXT:    movb %al, 4(%rdi)
1568; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
1569; AVX1-NEXT:    andb $1, %al
1570; AVX1-NEXT:    movb %al, 4(%rdi)
1571; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
1572; AVX1-NEXT:    andb $1, %al
1573; AVX1-NEXT:    movb %al, 4(%rdi)
1574; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
1575; AVX1-NEXT:    andb $1, %al
1576; AVX1-NEXT:    movb %al, 4(%rdi)
1577; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
1578; AVX1-NEXT:    andb $1, %al
1579; AVX1-NEXT:    movb %al, 4(%rdi)
1580; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
1581; AVX1-NEXT:    andb $1, %al
1582; AVX1-NEXT:    movb %al, 4(%rdi)
1583; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
1584; AVX1-NEXT:    andb $1, %al
1585; AVX1-NEXT:    movb %al, 4(%rdi)
1586; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
1587; AVX1-NEXT:    andb $1, %al
1588; AVX1-NEXT:    movb %al, 4(%rdi)
1589; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
1590; AVX1-NEXT:    andb $1, %al
1591; AVX1-NEXT:    movb %al, 4(%rdi)
1592; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
1593; AVX1-NEXT:    andb $1, %al
1594; AVX1-NEXT:    movb %al, 4(%rdi)
1595; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
1596; AVX1-NEXT:    andb $1, %al
1597; AVX1-NEXT:    movb %al, 4(%rdi)
1598; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
1599; AVX1-NEXT:    andb $1, %al
1600; AVX1-NEXT:    movb %al, 4(%rdi)
1601; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
1602; AVX1-NEXT:    andb $1, %al
1603; AVX1-NEXT:    movb %al, 4(%rdi)
1604; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
1605; AVX1-NEXT:    andb $1, %al
1606; AVX1-NEXT:    movb %al, 4(%rdi)
1607; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
1608; AVX1-NEXT:    andb $1, %al
1609; AVX1-NEXT:    movb %al, 4(%rdi)
1610; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
1611; AVX1-NEXT:    andb $1, %al
1612; AVX1-NEXT:    movb %al, 4(%rdi)
1613; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
1614; AVX1-NEXT:    andb $1, %al
1615; AVX1-NEXT:    movb %al, 4(%rdi)
1616; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
1617; AVX1-NEXT:    andb $1, %al
1618; AVX1-NEXT:    movb %al, 4(%rdi)
1619; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
1620; AVX1-NEXT:    andb $1, %al
1621; AVX1-NEXT:    movb %al, 4(%rdi)
1622; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
1623; AVX1-NEXT:    andb $1, %al
1624; AVX1-NEXT:    movb %al, 4(%rdi)
1625; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
1626; AVX1-NEXT:    andb $1, %al
1627; AVX1-NEXT:    movb %al, 4(%rdi)
1628; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
1629; AVX1-NEXT:    andb $1, %al
1630; AVX1-NEXT:    movb %al, 4(%rdi)
1631; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
1632; AVX1-NEXT:    andb $1, %al
1633; AVX1-NEXT:    movb %al, 4(%rdi)
1634; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
1635; AVX1-NEXT:    andb $1, %al
1636; AVX1-NEXT:    movb %al, 4(%rdi)
1637; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
1638; AVX1-NEXT:    andb $1, %al
1639; AVX1-NEXT:    movb %al, 4(%rdi)
1640; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
1641; AVX1-NEXT:    andb $1, %al
1642; AVX1-NEXT:    movb %al, 4(%rdi)
1643; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
1644; AVX1-NEXT:    andb $1, %al
1645; AVX1-NEXT:    movb %al, 4(%rdi)
1646; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
1647; AVX1-NEXT:    andb $1, %al
1648; AVX1-NEXT:    movb %al, 4(%rdi)
1649; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
1650; AVX1-NEXT:    andb $1, %al
1651; AVX1-NEXT:    movb %al, 4(%rdi)
1652; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
1653; AVX1-NEXT:    andb $1, %al
1654; AVX1-NEXT:    movb %al, 4(%rdi)
1655; AVX1-NEXT:    vpextrb $15, %xmm0, %eax
1656; AVX1-NEXT:    andb $1, %al
1657; AVX1-NEXT:    movb %al, (%rdi)
1658; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
1659; AVX1-NEXT:    andb $1, %al
1660; AVX1-NEXT:    movb %al, (%rdi)
1661; AVX1-NEXT:    vpextrb $13, %xmm0, %eax
1662; AVX1-NEXT:    andb $1, %al
1663; AVX1-NEXT:    movb %al, (%rdi)
1664; AVX1-NEXT:    vpextrb $12, %xmm0, %eax
1665; AVX1-NEXT:    andb $1, %al
1666; AVX1-NEXT:    movb %al, (%rdi)
1667; AVX1-NEXT:    vpextrb $11, %xmm0, %eax
1668; AVX1-NEXT:    andb $1, %al
1669; AVX1-NEXT:    movb %al, (%rdi)
1670; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
1671; AVX1-NEXT:    andb $1, %al
1672; AVX1-NEXT:    movb %al, (%rdi)
1673; AVX1-NEXT:    vpextrb $9, %xmm0, %eax
1674; AVX1-NEXT:    andb $1, %al
1675; AVX1-NEXT:    movb %al, (%rdi)
1676; AVX1-NEXT:    vpextrb $8, %xmm0, %eax
1677; AVX1-NEXT:    andb $1, %al
1678; AVX1-NEXT:    movb %al, (%rdi)
1679; AVX1-NEXT:    vpextrb $7, %xmm0, %eax
1680; AVX1-NEXT:    andb $1, %al
1681; AVX1-NEXT:    movb %al, (%rdi)
1682; AVX1-NEXT:    vpextrb $6, %xmm0, %eax
1683; AVX1-NEXT:    andb $1, %al
1684; AVX1-NEXT:    movb %al, (%rdi)
1685; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
1686; AVX1-NEXT:    andb $1, %al
1687; AVX1-NEXT:    movb %al, (%rdi)
1688; AVX1-NEXT:    vpextrb $4, %xmm0, %eax
1689; AVX1-NEXT:    andb $1, %al
1690; AVX1-NEXT:    movb %al, (%rdi)
1691; AVX1-NEXT:    vpextrb $3, %xmm0, %eax
1692; AVX1-NEXT:    andb $1, %al
1693; AVX1-NEXT:    movb %al, (%rdi)
1694; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
1695; AVX1-NEXT:    andb $1, %al
1696; AVX1-NEXT:    movb %al, (%rdi)
1697; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
1698; AVX1-NEXT:    andb $1, %al
1699; AVX1-NEXT:    movb %al, (%rdi)
1700; AVX1-NEXT:    vpextrb $0, %xmm0, %eax
1701; AVX1-NEXT:    andb $1, %al
1702; AVX1-NEXT:    movb %al, (%rdi)
1703; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
1704; AVX1-NEXT:    andb $1, %al
1705; AVX1-NEXT:    movb %al, (%rdi)
1706; AVX1-NEXT:    vpextrb $14, %xmm4, %eax
1707; AVX1-NEXT:    andb $1, %al
1708; AVX1-NEXT:    movb %al, (%rdi)
1709; AVX1-NEXT:    vpextrb $13, %xmm4, %eax
1710; AVX1-NEXT:    andb $1, %al
1711; AVX1-NEXT:    movb %al, (%rdi)
1712; AVX1-NEXT:    vpextrb $12, %xmm4, %eax
1713; AVX1-NEXT:    andb $1, %al
1714; AVX1-NEXT:    movb %al, (%rdi)
1715; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
1716; AVX1-NEXT:    andb $1, %al
1717; AVX1-NEXT:    movb %al, (%rdi)
1718; AVX1-NEXT:    vpextrb $10, %xmm4, %eax
1719; AVX1-NEXT:    andb $1, %al
1720; AVX1-NEXT:    movb %al, (%rdi)
1721; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
1722; AVX1-NEXT:    andb $1, %al
1723; AVX1-NEXT:    movb %al, (%rdi)
1724; AVX1-NEXT:    vpextrb $8, %xmm4, %eax
1725; AVX1-NEXT:    andb $1, %al
1726; AVX1-NEXT:    movb %al, (%rdi)
1727; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
1728; AVX1-NEXT:    andb $1, %al
1729; AVX1-NEXT:    movb %al, (%rdi)
1730; AVX1-NEXT:    vpextrb $6, %xmm4, %eax
1731; AVX1-NEXT:    andb $1, %al
1732; AVX1-NEXT:    movb %al, (%rdi)
1733; AVX1-NEXT:    vpextrb $5, %xmm4, %eax
1734; AVX1-NEXT:    andb $1, %al
1735; AVX1-NEXT:    movb %al, (%rdi)
1736; AVX1-NEXT:    vpextrb $4, %xmm4, %eax
1737; AVX1-NEXT:    andb $1, %al
1738; AVX1-NEXT:    movb %al, (%rdi)
1739; AVX1-NEXT:    vpextrb $3, %xmm4, %eax
1740; AVX1-NEXT:    andb $1, %al
1741; AVX1-NEXT:    movb %al, (%rdi)
1742; AVX1-NEXT:    vpextrb $2, %xmm4, %eax
1743; AVX1-NEXT:    andb $1, %al
1744; AVX1-NEXT:    movb %al, (%rdi)
1745; AVX1-NEXT:    vpextrb $1, %xmm4, %eax
1746; AVX1-NEXT:    andb $1, %al
1747; AVX1-NEXT:    movb %al, (%rdi)
1748; AVX1-NEXT:    vpextrb $0, %xmm4, %eax
1749; AVX1-NEXT:    andb $1, %al
1750; AVX1-NEXT:    movb %al, (%rdi)
1751; AVX1-NEXT:    movq %rdi, %rax
1752; AVX1-NEXT:    vzeroupper
1753; AVX1-NEXT:    retq
1754;
1755; AVX2-LABEL: test_cmp_v64i8:
1756; AVX2:       # BB#0:
1757; AVX2-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
1758; AVX2-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm1
1759; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
1760; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
1761; AVX2-NEXT:    andb $1, %al
1762; AVX2-NEXT:    movb %al, 4(%rdi)
1763; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
1764; AVX2-NEXT:    andb $1, %al
1765; AVX2-NEXT:    movb %al, 4(%rdi)
1766; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
1767; AVX2-NEXT:    andb $1, %al
1768; AVX2-NEXT:    movb %al, 4(%rdi)
1769; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
1770; AVX2-NEXT:    andb $1, %al
1771; AVX2-NEXT:    movb %al, 4(%rdi)
1772; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
1773; AVX2-NEXT:    andb $1, %al
1774; AVX2-NEXT:    movb %al, 4(%rdi)
1775; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
1776; AVX2-NEXT:    andb $1, %al
1777; AVX2-NEXT:    movb %al, 4(%rdi)
1778; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
1779; AVX2-NEXT:    andb $1, %al
1780; AVX2-NEXT:    movb %al, 4(%rdi)
1781; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
1782; AVX2-NEXT:    andb $1, %al
1783; AVX2-NEXT:    movb %al, 4(%rdi)
1784; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
1785; AVX2-NEXT:    andb $1, %al
1786; AVX2-NEXT:    movb %al, 4(%rdi)
1787; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
1788; AVX2-NEXT:    andb $1, %al
1789; AVX2-NEXT:    movb %al, 4(%rdi)
1790; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
1791; AVX2-NEXT:    andb $1, %al
1792; AVX2-NEXT:    movb %al, 4(%rdi)
1793; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
1794; AVX2-NEXT:    andb $1, %al
1795; AVX2-NEXT:    movb %al, 4(%rdi)
1796; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
1797; AVX2-NEXT:    andb $1, %al
1798; AVX2-NEXT:    movb %al, 4(%rdi)
1799; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
1800; AVX2-NEXT:    andb $1, %al
1801; AVX2-NEXT:    movb %al, 4(%rdi)
1802; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
1803; AVX2-NEXT:    andb $1, %al
1804; AVX2-NEXT:    movb %al, 4(%rdi)
1805; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
1806; AVX2-NEXT:    andb $1, %al
1807; AVX2-NEXT:    movb %al, 4(%rdi)
1808; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
1809; AVX2-NEXT:    andb $1, %al
1810; AVX2-NEXT:    movb %al, 4(%rdi)
1811; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
1812; AVX2-NEXT:    andb $1, %al
1813; AVX2-NEXT:    movb %al, 4(%rdi)
1814; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
1815; AVX2-NEXT:    andb $1, %al
1816; AVX2-NEXT:    movb %al, 4(%rdi)
1817; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
1818; AVX2-NEXT:    andb $1, %al
1819; AVX2-NEXT:    movb %al, 4(%rdi)
1820; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
1821; AVX2-NEXT:    andb $1, %al
1822; AVX2-NEXT:    movb %al, 4(%rdi)
1823; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
1824; AVX2-NEXT:    andb $1, %al
1825; AVX2-NEXT:    movb %al, 4(%rdi)
1826; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
1827; AVX2-NEXT:    andb $1, %al
1828; AVX2-NEXT:    movb %al, 4(%rdi)
1829; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
1830; AVX2-NEXT:    andb $1, %al
1831; AVX2-NEXT:    movb %al, 4(%rdi)
1832; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
1833; AVX2-NEXT:    andb $1, %al
1834; AVX2-NEXT:    movb %al, 4(%rdi)
1835; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
1836; AVX2-NEXT:    andb $1, %al
1837; AVX2-NEXT:    movb %al, 4(%rdi)
1838; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
1839; AVX2-NEXT:    andb $1, %al
1840; AVX2-NEXT:    movb %al, 4(%rdi)
1841; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
1842; AVX2-NEXT:    andb $1, %al
1843; AVX2-NEXT:    movb %al, 4(%rdi)
1844; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
1845; AVX2-NEXT:    andb $1, %al
1846; AVX2-NEXT:    movb %al, 4(%rdi)
1847; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
1848; AVX2-NEXT:    andb $1, %al
1849; AVX2-NEXT:    movb %al, 4(%rdi)
1850; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
1851; AVX2-NEXT:    andb $1, %al
1852; AVX2-NEXT:    movb %al, 4(%rdi)
1853; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
1854; AVX2-NEXT:    andb $1, %al
1855; AVX2-NEXT:    movb %al, 4(%rdi)
1856; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1857; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
1858; AVX2-NEXT:    andb $1, %al
1859; AVX2-NEXT:    movb %al, (%rdi)
1860; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
1861; AVX2-NEXT:    andb $1, %al
1862; AVX2-NEXT:    movb %al, (%rdi)
1863; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
1864; AVX2-NEXT:    andb $1, %al
1865; AVX2-NEXT:    movb %al, (%rdi)
1866; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
1867; AVX2-NEXT:    andb $1, %al
1868; AVX2-NEXT:    movb %al, (%rdi)
1869; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
1870; AVX2-NEXT:    andb $1, %al
1871; AVX2-NEXT:    movb %al, (%rdi)
1872; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
1873; AVX2-NEXT:    andb $1, %al
1874; AVX2-NEXT:    movb %al, (%rdi)
1875; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
1876; AVX2-NEXT:    andb $1, %al
1877; AVX2-NEXT:    movb %al, (%rdi)
1878; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
1879; AVX2-NEXT:    andb $1, %al
1880; AVX2-NEXT:    movb %al, (%rdi)
1881; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
1882; AVX2-NEXT:    andb $1, %al
1883; AVX2-NEXT:    movb %al, (%rdi)
1884; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
1885; AVX2-NEXT:    andb $1, %al
1886; AVX2-NEXT:    movb %al, (%rdi)
1887; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
1888; AVX2-NEXT:    andb $1, %al
1889; AVX2-NEXT:    movb %al, (%rdi)
1890; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
1891; AVX2-NEXT:    andb $1, %al
1892; AVX2-NEXT:    movb %al, (%rdi)
1893; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
1894; AVX2-NEXT:    andb $1, %al
1895; AVX2-NEXT:    movb %al, (%rdi)
1896; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
1897; AVX2-NEXT:    andb $1, %al
1898; AVX2-NEXT:    movb %al, (%rdi)
1899; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
1900; AVX2-NEXT:    andb $1, %al
1901; AVX2-NEXT:    movb %al, (%rdi)
1902; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
1903; AVX2-NEXT:    andb $1, %al
1904; AVX2-NEXT:    movb %al, (%rdi)
1905; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
1906; AVX2-NEXT:    andb $1, %al
1907; AVX2-NEXT:    movb %al, (%rdi)
1908; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
1909; AVX2-NEXT:    andb $1, %al
1910; AVX2-NEXT:    movb %al, (%rdi)
1911; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
1912; AVX2-NEXT:    andb $1, %al
1913; AVX2-NEXT:    movb %al, (%rdi)
1914; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
1915; AVX2-NEXT:    andb $1, %al
1916; AVX2-NEXT:    movb %al, (%rdi)
1917; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
1918; AVX2-NEXT:    andb $1, %al
1919; AVX2-NEXT:    movb %al, (%rdi)
1920; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
1921; AVX2-NEXT:    andb $1, %al
1922; AVX2-NEXT:    movb %al, (%rdi)
1923; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
1924; AVX2-NEXT:    andb $1, %al
1925; AVX2-NEXT:    movb %al, (%rdi)
1926; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
1927; AVX2-NEXT:    andb $1, %al
1928; AVX2-NEXT:    movb %al, (%rdi)
1929; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
1930; AVX2-NEXT:    andb $1, %al
1931; AVX2-NEXT:    movb %al, (%rdi)
1932; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
1933; AVX2-NEXT:    andb $1, %al
1934; AVX2-NEXT:    movb %al, (%rdi)
1935; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
1936; AVX2-NEXT:    andb $1, %al
1937; AVX2-NEXT:    movb %al, (%rdi)
1938; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
1939; AVX2-NEXT:    andb $1, %al
1940; AVX2-NEXT:    movb %al, (%rdi)
1941; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
1942; AVX2-NEXT:    andb $1, %al
1943; AVX2-NEXT:    movb %al, (%rdi)
1944; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
1945; AVX2-NEXT:    andb $1, %al
1946; AVX2-NEXT:    movb %al, (%rdi)
1947; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
1948; AVX2-NEXT:    andb $1, %al
1949; AVX2-NEXT:    movb %al, (%rdi)
1950; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
1951; AVX2-NEXT:    andb $1, %al
1952; AVX2-NEXT:    movb %al, (%rdi)
1953; AVX2-NEXT:    movq %rdi, %rax
1954; AVX2-NEXT:    vzeroupper
1955; AVX2-NEXT:    retq
1956;
1957; AVX512F-LABEL: test_cmp_v64i8:
1958; AVX512F:       # BB#0:
1959; AVX512F-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm4
1960; AVX512F-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
1961; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1
1962; AVX512F-NEXT:    vextracti128 $1, %ymm4, %xmm3
1963; AVX512F-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1964; AVX512F-NEXT:    vmovdqa %xmm4, %xmm2
1965; AVX512F-NEXT:    retq
1966;
1967; AVX512DQ-LABEL: test_cmp_v64i8:
1968; AVX512DQ:       # BB#0:
1969; AVX512DQ-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm4
1970; AVX512DQ-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
1971; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm1
1972; AVX512DQ-NEXT:    vextracti128 $1, %ymm4, %xmm3
1973; AVX512DQ-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1974; AVX512DQ-NEXT:    vmovdqa %xmm4, %xmm2
1975; AVX512DQ-NEXT:    retq
1976;
1977; AVX512BW-LABEL: test_cmp_v64i8:
1978; AVX512BW:       # BB#0:
1979; AVX512BW-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0
1980; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
1981; AVX512BW-NEXT:    retq
1982  %1 = icmp sgt <64 x i8> %a0, %a1
1983  ret <64 x i1> %1
1984}
1985
1986;
1987; 1024-bit vector comparisons
1988;
1989
1990define <16 x i1> @test_cmp_v16f64(<16 x double> %a0, <16 x double> %a1) nounwind {
1991; SSE-LABEL: test_cmp_v16f64:
1992; SSE:       # BB#0:
1993; SSE-NEXT:    movapd %xmm0, %xmm8
1994; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
1995; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm11
1996; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm10
1997; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm12
1998; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm9
1999; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm13
2000; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm14
2001; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm15
2002; SSE-NEXT:    cmpltpd %xmm7, %xmm15
2003; SSE-NEXT:    cmpltpd %xmm6, %xmm14
2004; SSE-NEXT:    packsswb %xmm15, %xmm14
2005; SSE-NEXT:    cmpltpd %xmm5, %xmm13
2006; SSE-NEXT:    cmpltpd %xmm4, %xmm9
2007; SSE-NEXT:    packsswb %xmm13, %xmm9
2008; SSE-NEXT:    packsswb %xmm14, %xmm9
2009; SSE-NEXT:    cmpltpd %xmm3, %xmm12
2010; SSE-NEXT:    cmpltpd %xmm2, %xmm10
2011; SSE-NEXT:    packsswb %xmm12, %xmm10
2012; SSE-NEXT:    cmpltpd %xmm1, %xmm11
2013; SSE-NEXT:    cmpltpd %xmm8, %xmm0
2014; SSE-NEXT:    packsswb %xmm11, %xmm0
2015; SSE-NEXT:    packsswb %xmm10, %xmm0
2016; SSE-NEXT:    packsswb %xmm9, %xmm0
2017; SSE-NEXT:    retq
2018;
2019; AVX1-LABEL: test_cmp_v16f64:
2020; AVX1:       # BB#0:
2021; AVX1-NEXT:    vcmpltpd %ymm3, %ymm7, %ymm3
2022; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
2023; AVX1-NEXT:    vpacksswb %xmm7, %xmm3, %xmm3
2024; AVX1-NEXT:    vcmpltpd %ymm2, %ymm6, %ymm2
2025; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
2026; AVX1-NEXT:    vpacksswb %xmm6, %xmm2, %xmm2
2027; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
2028; AVX1-NEXT:    vcmpltpd %ymm1, %ymm5, %ymm1
2029; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
2030; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
2031; AVX1-NEXT:    vcmpltpd %ymm0, %ymm4, %ymm0
2032; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2033; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
2034; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2035; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
2036; AVX1-NEXT:    vzeroupper
2037; AVX1-NEXT:    retq
2038;
2039; AVX2-LABEL: test_cmp_v16f64:
2040; AVX2:       # BB#0:
2041; AVX2-NEXT:    vcmpltpd %ymm3, %ymm7, %ymm3
2042; AVX2-NEXT:    vcmpltpd %ymm2, %ymm6, %ymm2
2043; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
2044; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2045; AVX2-NEXT:    vcmpltpd %ymm1, %ymm5, %ymm1
2046; AVX2-NEXT:    vcmpltpd %ymm0, %ymm4, %ymm0
2047; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
2048; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2049; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
2050; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2051; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2052; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2053; AVX2-NEXT:    vzeroupper
2054; AVX2-NEXT:    retq
2055;
2056; AVX512F-LABEL: test_cmp_v16f64:
2057; AVX512F:       # BB#0:
2058; AVX512F-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2059; AVX512F-NEXT:    vextractf32x4 $3, %zmm0, %xmm5
2060; AVX512F-NEXT:    xorl %eax, %eax
2061; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2062; AVX512F-NEXT:    movq $-1, %rcx
2063; AVX512F-NEXT:    movl $0, %edx
2064; AVX512F-NEXT:    cmovaq %rcx, %rdx
2065; AVX512F-NEXT:    vmovq %rdx, %xmm6
2066; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2067; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2068; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2069; AVX512F-NEXT:    movl $0, %edx
2070; AVX512F-NEXT:    cmovaq %rcx, %rdx
2071; AVX512F-NEXT:    vmovq %rdx, %xmm4
2072; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2073; AVX512F-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2074; AVX512F-NEXT:    vextractf32x4 $2, %zmm0, %xmm6
2075; AVX512F-NEXT:    vucomisd %xmm5, %xmm6
2076; AVX512F-NEXT:    movl $0, %edx
2077; AVX512F-NEXT:    cmovaq %rcx, %rdx
2078; AVX512F-NEXT:    vmovq %rdx, %xmm7
2079; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2080; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2081; AVX512F-NEXT:    vucomisd %xmm5, %xmm6
2082; AVX512F-NEXT:    movl $0, %edx
2083; AVX512F-NEXT:    cmovaq %rcx, %rdx
2084; AVX512F-NEXT:    vmovq %rdx, %xmm5
2085; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2086; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
2087; AVX512F-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
2088; AVX512F-NEXT:    vextractf32x4 $1, %zmm0, %xmm6
2089; AVX512F-NEXT:    vucomisd %xmm5, %xmm6
2090; AVX512F-NEXT:    movl $0, %edx
2091; AVX512F-NEXT:    cmovaq %rcx, %rdx
2092; AVX512F-NEXT:    vmovq %rdx, %xmm7
2093; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2094; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2095; AVX512F-NEXT:    vucomisd %xmm5, %xmm6
2096; AVX512F-NEXT:    movl $0, %edx
2097; AVX512F-NEXT:    cmovaq %rcx, %rdx
2098; AVX512F-NEXT:    vmovq %rdx, %xmm5
2099; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2100; AVX512F-NEXT:    vucomisd %xmm2, %xmm0
2101; AVX512F-NEXT:    movl $0, %edx
2102; AVX512F-NEXT:    cmovaq %rcx, %rdx
2103; AVX512F-NEXT:    vmovq %rdx, %xmm6
2104; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2105; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2106; AVX512F-NEXT:    vucomisd %xmm2, %xmm0
2107; AVX512F-NEXT:    movl $0, %edx
2108; AVX512F-NEXT:    cmovaq %rcx, %rdx
2109; AVX512F-NEXT:    vmovq %rdx, %xmm0
2110; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm6[0],xmm0[0]
2111; AVX512F-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
2112; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
2113; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
2114; AVX512F-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
2115; AVX512F-NEXT:    vextractf32x4 $3, %zmm1, %xmm4
2116; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
2117; AVX512F-NEXT:    movl $0, %edx
2118; AVX512F-NEXT:    cmovaq %rcx, %rdx
2119; AVX512F-NEXT:    vmovq %rdx, %xmm5
2120; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2121; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2122; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
2123; AVX512F-NEXT:    movl $0, %edx
2124; AVX512F-NEXT:    cmovaq %rcx, %rdx
2125; AVX512F-NEXT:    vmovq %rdx, %xmm2
2126; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
2127; AVX512F-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
2128; AVX512F-NEXT:    vextractf32x4 $2, %zmm1, %xmm5
2129; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2130; AVX512F-NEXT:    movl $0, %edx
2131; AVX512F-NEXT:    cmovaq %rcx, %rdx
2132; AVX512F-NEXT:    vmovq %rdx, %xmm6
2133; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2134; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2135; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2136; AVX512F-NEXT:    movl $0, %edx
2137; AVX512F-NEXT:    cmovaq %rcx, %rdx
2138; AVX512F-NEXT:    vmovq %rdx, %xmm4
2139; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2140; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
2141; AVX512F-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
2142; AVX512F-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
2143; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2144; AVX512F-NEXT:    movl $0, %edx
2145; AVX512F-NEXT:    cmovaq %rcx, %rdx
2146; AVX512F-NEXT:    vmovq %rdx, %xmm6
2147; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2148; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2149; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2150; AVX512F-NEXT:    movl $0, %edx
2151; AVX512F-NEXT:    cmovaq %rcx, %rdx
2152; AVX512F-NEXT:    vmovq %rdx, %xmm4
2153; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2154; AVX512F-NEXT:    vucomisd %xmm3, %xmm1
2155; AVX512F-NEXT:    movl $0, %edx
2156; AVX512F-NEXT:    cmovaq %rcx, %rdx
2157; AVX512F-NEXT:    vmovq %rdx, %xmm5
2158; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
2159; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
2160; AVX512F-NEXT:    vucomisd %xmm3, %xmm1
2161; AVX512F-NEXT:    cmovaq %rcx, %rax
2162; AVX512F-NEXT:    vmovq %rax, %xmm1
2163; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
2164; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
2165; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
2166; AVX512F-NEXT:    vpmovqd %zmm1, %ymm1
2167; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2168; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
2169; AVX512F-NEXT:    retq
2170;
2171; AVX512DQ-LABEL: test_cmp_v16f64:
2172; AVX512DQ:       # BB#0:
2173; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm2, %xmm4
2174; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm0, %xmm5
2175; AVX512DQ-NEXT:    xorl %eax, %eax
2176; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2177; AVX512DQ-NEXT:    movq $-1, %rcx
2178; AVX512DQ-NEXT:    movl $0, %edx
2179; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2180; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
2181; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2182; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2183; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2184; AVX512DQ-NEXT:    movl $0, %edx
2185; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2186; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
2187; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2188; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm2, %xmm5
2189; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm0, %xmm6
2190; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm6
2191; AVX512DQ-NEXT:    movl $0, %edx
2192; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2193; AVX512DQ-NEXT:    vmovq %rdx, %xmm7
2194; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2195; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2196; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm6
2197; AVX512DQ-NEXT:    movl $0, %edx
2198; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2199; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
2200; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2201; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
2202; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm2, %xmm5
2203; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm0, %xmm6
2204; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm6
2205; AVX512DQ-NEXT:    movl $0, %edx
2206; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2207; AVX512DQ-NEXT:    vmovq %rdx, %xmm7
2208; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2209; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2210; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm6
2211; AVX512DQ-NEXT:    movl $0, %edx
2212; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2213; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
2214; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2215; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm0
2216; AVX512DQ-NEXT:    movl $0, %edx
2217; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2218; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
2219; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2220; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2221; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm0
2222; AVX512DQ-NEXT:    movl $0, %edx
2223; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2224; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
2225; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm6[0],xmm0[0]
2226; AVX512DQ-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
2227; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
2228; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
2229; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm3, %xmm2
2230; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm1, %xmm4
2231; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
2232; AVX512DQ-NEXT:    movl $0, %edx
2233; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2234; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
2235; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2236; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2237; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
2238; AVX512DQ-NEXT:    movl $0, %edx
2239; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2240; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
2241; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
2242; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm3, %xmm4
2243; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm1, %xmm5
2244; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2245; AVX512DQ-NEXT:    movl $0, %edx
2246; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2247; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
2248; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2249; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2250; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2251; AVX512DQ-NEXT:    movl $0, %edx
2252; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2253; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
2254; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2255; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
2256; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm3, %xmm4
2257; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm1, %xmm5
2258; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2259; AVX512DQ-NEXT:    movl $0, %edx
2260; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2261; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
2262; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2263; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2264; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2265; AVX512DQ-NEXT:    movl $0, %edx
2266; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2267; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
2268; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2269; AVX512DQ-NEXT:    vucomisd %xmm3, %xmm1
2270; AVX512DQ-NEXT:    movl $0, %edx
2271; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2272; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
2273; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
2274; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
2275; AVX512DQ-NEXT:    vucomisd %xmm3, %xmm1
2276; AVX512DQ-NEXT:    cmovaq %rcx, %rax
2277; AVX512DQ-NEXT:    vmovq %rax, %xmm1
2278; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
2279; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
2280; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
2281; AVX512DQ-NEXT:    vpmovqd %zmm1, %ymm1
2282; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm1, %zmm0, %zmm0
2283; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
2284; AVX512DQ-NEXT:    retq
2285;
2286; AVX512BW-LABEL: test_cmp_v16f64:
2287; AVX512BW:       # BB#0:
2288; AVX512BW-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2289; AVX512BW-NEXT:    vextractf32x4 $3, %zmm0, %xmm5
2290; AVX512BW-NEXT:    xorl %eax, %eax
2291; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2292; AVX512BW-NEXT:    movq $-1, %rcx
2293; AVX512BW-NEXT:    movl $0, %edx
2294; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2295; AVX512BW-NEXT:    vmovq %rdx, %xmm6
2296; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2297; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2298; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2299; AVX512BW-NEXT:    movl $0, %edx
2300; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2301; AVX512BW-NEXT:    vmovq %rdx, %xmm4
2302; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2303; AVX512BW-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2304; AVX512BW-NEXT:    vextractf32x4 $2, %zmm0, %xmm6
2305; AVX512BW-NEXT:    vucomisd %xmm5, %xmm6
2306; AVX512BW-NEXT:    movl $0, %edx
2307; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2308; AVX512BW-NEXT:    vmovq %rdx, %xmm7
2309; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2310; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2311; AVX512BW-NEXT:    vucomisd %xmm5, %xmm6
2312; AVX512BW-NEXT:    movl $0, %edx
2313; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2314; AVX512BW-NEXT:    vmovq %rdx, %xmm5
2315; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2316; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
2317; AVX512BW-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
2318; AVX512BW-NEXT:    vextractf32x4 $1, %zmm0, %xmm6
2319; AVX512BW-NEXT:    vucomisd %xmm5, %xmm6
2320; AVX512BW-NEXT:    movl $0, %edx
2321; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2322; AVX512BW-NEXT:    vmovq %rdx, %xmm7
2323; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2324; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2325; AVX512BW-NEXT:    vucomisd %xmm5, %xmm6
2326; AVX512BW-NEXT:    movl $0, %edx
2327; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2328; AVX512BW-NEXT:    vmovq %rdx, %xmm5
2329; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2330; AVX512BW-NEXT:    vucomisd %xmm2, %xmm0
2331; AVX512BW-NEXT:    movl $0, %edx
2332; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2333; AVX512BW-NEXT:    vmovq %rdx, %xmm6
2334; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2335; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2336; AVX512BW-NEXT:    vucomisd %xmm2, %xmm0
2337; AVX512BW-NEXT:    movl $0, %edx
2338; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2339; AVX512BW-NEXT:    vmovq %rdx, %xmm0
2340; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm6[0],xmm0[0]
2341; AVX512BW-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
2342; AVX512BW-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
2343; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
2344; AVX512BW-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
2345; AVX512BW-NEXT:    vextractf32x4 $3, %zmm1, %xmm4
2346; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
2347; AVX512BW-NEXT:    movl $0, %edx
2348; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2349; AVX512BW-NEXT:    vmovq %rdx, %xmm5
2350; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2351; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2352; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
2353; AVX512BW-NEXT:    movl $0, %edx
2354; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2355; AVX512BW-NEXT:    vmovq %rdx, %xmm2
2356; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
2357; AVX512BW-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
2358; AVX512BW-NEXT:    vextractf32x4 $2, %zmm1, %xmm5
2359; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2360; AVX512BW-NEXT:    movl $0, %edx
2361; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2362; AVX512BW-NEXT:    vmovq %rdx, %xmm6
2363; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2364; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2365; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2366; AVX512BW-NEXT:    movl $0, %edx
2367; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2368; AVX512BW-NEXT:    vmovq %rdx, %xmm4
2369; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2370; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
2371; AVX512BW-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
2372; AVX512BW-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
2373; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2374; AVX512BW-NEXT:    movl $0, %edx
2375; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2376; AVX512BW-NEXT:    vmovq %rdx, %xmm6
2377; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2378; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2379; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2380; AVX512BW-NEXT:    movl $0, %edx
2381; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2382; AVX512BW-NEXT:    vmovq %rdx, %xmm4
2383; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2384; AVX512BW-NEXT:    vucomisd %xmm3, %xmm1
2385; AVX512BW-NEXT:    movl $0, %edx
2386; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2387; AVX512BW-NEXT:    vmovq %rdx, %xmm5
2388; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
2389; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
2390; AVX512BW-NEXT:    vucomisd %xmm3, %xmm1
2391; AVX512BW-NEXT:    cmovaq %rcx, %rax
2392; AVX512BW-NEXT:    vmovq %rax, %xmm1
2393; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
2394; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
2395; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
2396; AVX512BW-NEXT:    vpmovqd %zmm1, %ymm1
2397; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2398; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0
2399; AVX512BW-NEXT:    retq
2400  %1 = fcmp ogt <16 x double> %a0, %a1
2401  ret <16 x i1> %1
2402}
2403
2404define <32 x i1> @test_cmp_v32f32(<32 x float> %a0, <32 x float> %a1) nounwind {
2405; SSE2-LABEL: test_cmp_v32f32:
2406; SSE2:       # BB#0:
2407; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
2408; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
2409; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
2410; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
2411; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
2412; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
2413; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
2414; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
2415; SSE2-NEXT:    cmpltps %xmm3, %xmm15
2416; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm15[0,2,2,3,4,5,6,7]
2417; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
2418; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
2419; SSE2-NEXT:    cmpltps %xmm2, %xmm14
2420; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm14[0,2,2,3,4,5,6,7]
2421; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
2422; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2423; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
2424; SSE2-NEXT:    psllw $15, %xmm2
2425; SSE2-NEXT:    psraw $15, %xmm2
2426; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
2427; SSE2-NEXT:    pand %xmm3, %xmm2
2428; SSE2-NEXT:    cmpltps %xmm1, %xmm13
2429; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm13[0,2,2,3,4,5,6,7]
2430; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2431; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2432; SSE2-NEXT:    cmpltps %xmm0, %xmm12
2433; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm12[0,2,2,3,4,5,6,7]
2434; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
2435; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2436; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2437; SSE2-NEXT:    psllw $15, %xmm0
2438; SSE2-NEXT:    psraw $15, %xmm0
2439; SSE2-NEXT:    pand %xmm3, %xmm0
2440; SSE2-NEXT:    packuswb %xmm2, %xmm0
2441; SSE2-NEXT:    cmpltps %xmm7, %xmm11
2442; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm11[0,2,2,3,4,5,6,7]
2443; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2444; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2445; SSE2-NEXT:    cmpltps %xmm6, %xmm10
2446; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm10[0,2,2,3,4,5,6,7]
2447; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
2448; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2449; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
2450; SSE2-NEXT:    psllw $15, %xmm2
2451; SSE2-NEXT:    psraw $15, %xmm2
2452; SSE2-NEXT:    pand %xmm3, %xmm2
2453; SSE2-NEXT:    cmpltps %xmm5, %xmm9
2454; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm9[0,2,2,3,4,5,6,7]
2455; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2456; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2457; SSE2-NEXT:    cmpltps %xmm4, %xmm8
2458; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm8[0,2,2,3,4,5,6,7]
2459; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
2460; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
2461; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm1[0]
2462; SSE2-NEXT:    psllw $15, %xmm4
2463; SSE2-NEXT:    psraw $15, %xmm4
2464; SSE2-NEXT:    pand %xmm3, %xmm4
2465; SSE2-NEXT:    packuswb %xmm2, %xmm4
2466; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
2467; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2468; SSE2-NEXT:    andb $1, %al
2469; SSE2-NEXT:    movb %al, 2(%rdi)
2470; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
2471; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2472; SSE2-NEXT:    andb $1, %al
2473; SSE2-NEXT:    movb %al, (%rdi)
2474; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2475; SSE2-NEXT:    andb $1, %al
2476; SSE2-NEXT:    movb %al, 2(%rdi)
2477; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2478; SSE2-NEXT:    andb $1, %al
2479; SSE2-NEXT:    movb %al, (%rdi)
2480; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2481; SSE2-NEXT:    andb $1, %al
2482; SSE2-NEXT:    movb %al, 2(%rdi)
2483; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2484; SSE2-NEXT:    andb $1, %al
2485; SSE2-NEXT:    movb %al, (%rdi)
2486; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2487; SSE2-NEXT:    andb $1, %al
2488; SSE2-NEXT:    movb %al, 2(%rdi)
2489; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2490; SSE2-NEXT:    andb $1, %al
2491; SSE2-NEXT:    movb %al, (%rdi)
2492; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2493; SSE2-NEXT:    andb $1, %al
2494; SSE2-NEXT:    movb %al, 2(%rdi)
2495; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2496; SSE2-NEXT:    andb $1, %al
2497; SSE2-NEXT:    movb %al, (%rdi)
2498; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2499; SSE2-NEXT:    andb $1, %al
2500; SSE2-NEXT:    movb %al, 2(%rdi)
2501; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2502; SSE2-NEXT:    andb $1, %al
2503; SSE2-NEXT:    movb %al, (%rdi)
2504; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2505; SSE2-NEXT:    andb $1, %al
2506; SSE2-NEXT:    movb %al, 2(%rdi)
2507; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2508; SSE2-NEXT:    andb $1, %al
2509; SSE2-NEXT:    movb %al, (%rdi)
2510; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2511; SSE2-NEXT:    andb $1, %al
2512; SSE2-NEXT:    movb %al, 2(%rdi)
2513; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2514; SSE2-NEXT:    andb $1, %al
2515; SSE2-NEXT:    movb %al, (%rdi)
2516; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2517; SSE2-NEXT:    andb $1, %al
2518; SSE2-NEXT:    movb %al, 2(%rdi)
2519; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2520; SSE2-NEXT:    andb $1, %al
2521; SSE2-NEXT:    movb %al, (%rdi)
2522; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2523; SSE2-NEXT:    andb $1, %al
2524; SSE2-NEXT:    movb %al, 2(%rdi)
2525; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2526; SSE2-NEXT:    andb $1, %al
2527; SSE2-NEXT:    movb %al, (%rdi)
2528; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2529; SSE2-NEXT:    andb $1, %al
2530; SSE2-NEXT:    movb %al, 2(%rdi)
2531; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2532; SSE2-NEXT:    andb $1, %al
2533; SSE2-NEXT:    movb %al, (%rdi)
2534; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2535; SSE2-NEXT:    andb $1, %al
2536; SSE2-NEXT:    movb %al, 2(%rdi)
2537; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2538; SSE2-NEXT:    andb $1, %al
2539; SSE2-NEXT:    movb %al, (%rdi)
2540; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2541; SSE2-NEXT:    andb $1, %al
2542; SSE2-NEXT:    movb %al, 2(%rdi)
2543; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2544; SSE2-NEXT:    andb $1, %al
2545; SSE2-NEXT:    movb %al, (%rdi)
2546; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2547; SSE2-NEXT:    andb $1, %al
2548; SSE2-NEXT:    movb %al, 2(%rdi)
2549; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2550; SSE2-NEXT:    andb $1, %al
2551; SSE2-NEXT:    movb %al, (%rdi)
2552; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2553; SSE2-NEXT:    andb $1, %al
2554; SSE2-NEXT:    movb %al, 2(%rdi)
2555; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2556; SSE2-NEXT:    andb $1, %al
2557; SSE2-NEXT:    movb %al, (%rdi)
2558; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2559; SSE2-NEXT:    andb $1, %al
2560; SSE2-NEXT:    movb %al, 2(%rdi)
2561; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2562; SSE2-NEXT:    andb $1, %al
2563; SSE2-NEXT:    movb %al, (%rdi)
2564; SSE2-NEXT:    movq %rdi, %rax
2565; SSE2-NEXT:    retq
2566;
2567; SSE42-LABEL: test_cmp_v32f32:
2568; SSE42:       # BB#0:
2569; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
2570; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
2571; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
2572; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
2573; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
2574; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
2575; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
2576; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
2577; SSE42-NEXT:    cmpltps %xmm1, %xmm15
2578; SSE42-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2579; SSE42-NEXT:    pshufb %xmm1, %xmm15
2580; SSE42-NEXT:    cmpltps %xmm0, %xmm8
2581; SSE42-NEXT:    pshufb %xmm1, %xmm8
2582; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm15[0]
2583; SSE42-NEXT:    psllw $15, %xmm8
2584; SSE42-NEXT:    psraw $15, %xmm8
2585; SSE42-NEXT:    cmpltps %xmm3, %xmm14
2586; SSE42-NEXT:    pshufb %xmm1, %xmm14
2587; SSE42-NEXT:    cmpltps %xmm2, %xmm9
2588; SSE42-NEXT:    pshufb %xmm1, %xmm9
2589; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm14[0]
2590; SSE42-NEXT:    psllw $15, %xmm9
2591; SSE42-NEXT:    psraw $15, %xmm9
2592; SSE42-NEXT:    cmpltps %xmm5, %xmm13
2593; SSE42-NEXT:    pshufb %xmm1, %xmm13
2594; SSE42-NEXT:    cmpltps %xmm4, %xmm10
2595; SSE42-NEXT:    pshufb %xmm1, %xmm10
2596; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm10 = xmm10[0],xmm13[0]
2597; SSE42-NEXT:    psllw $15, %xmm10
2598; SSE42-NEXT:    psraw $15, %xmm10
2599; SSE42-NEXT:    cmpltps %xmm7, %xmm12
2600; SSE42-NEXT:    pshufb %xmm1, %xmm12
2601; SSE42-NEXT:    cmpltps %xmm6, %xmm11
2602; SSE42-NEXT:    pshufb %xmm1, %xmm11
2603; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm11 = xmm11[0],xmm12[0]
2604; SSE42-NEXT:    psllw $15, %xmm11
2605; SSE42-NEXT:    psraw $15, %xmm11
2606; SSE42-NEXT:    pextrb $14, %xmm11, %eax
2607; SSE42-NEXT:    andb $1, %al
2608; SSE42-NEXT:    movb %al, 2(%rdi)
2609; SSE42-NEXT:    pextrb $12, %xmm11, %eax
2610; SSE42-NEXT:    andb $1, %al
2611; SSE42-NEXT:    movb %al, 2(%rdi)
2612; SSE42-NEXT:    pextrb $10, %xmm11, %eax
2613; SSE42-NEXT:    andb $1, %al
2614; SSE42-NEXT:    movb %al, 2(%rdi)
2615; SSE42-NEXT:    pextrb $8, %xmm11, %eax
2616; SSE42-NEXT:    andb $1, %al
2617; SSE42-NEXT:    movb %al, 2(%rdi)
2618; SSE42-NEXT:    pextrb $6, %xmm11, %eax
2619; SSE42-NEXT:    andb $1, %al
2620; SSE42-NEXT:    movb %al, 2(%rdi)
2621; SSE42-NEXT:    pextrb $4, %xmm11, %eax
2622; SSE42-NEXT:    andb $1, %al
2623; SSE42-NEXT:    movb %al, 2(%rdi)
2624; SSE42-NEXT:    pextrb $2, %xmm11, %eax
2625; SSE42-NEXT:    andb $1, %al
2626; SSE42-NEXT:    movb %al, 2(%rdi)
2627; SSE42-NEXT:    pextrb $0, %xmm11, %eax
2628; SSE42-NEXT:    andb $1, %al
2629; SSE42-NEXT:    movb %al, 2(%rdi)
2630; SSE42-NEXT:    pextrb $14, %xmm10, %eax
2631; SSE42-NEXT:    andb $1, %al
2632; SSE42-NEXT:    movb %al, 2(%rdi)
2633; SSE42-NEXT:    pextrb $12, %xmm10, %eax
2634; SSE42-NEXT:    andb $1, %al
2635; SSE42-NEXT:    movb %al, 2(%rdi)
2636; SSE42-NEXT:    pextrb $10, %xmm10, %eax
2637; SSE42-NEXT:    andb $1, %al
2638; SSE42-NEXT:    movb %al, 2(%rdi)
2639; SSE42-NEXT:    pextrb $8, %xmm10, %eax
2640; SSE42-NEXT:    andb $1, %al
2641; SSE42-NEXT:    movb %al, 2(%rdi)
2642; SSE42-NEXT:    pextrb $6, %xmm10, %eax
2643; SSE42-NEXT:    andb $1, %al
2644; SSE42-NEXT:    movb %al, 2(%rdi)
2645; SSE42-NEXT:    pextrb $4, %xmm10, %eax
2646; SSE42-NEXT:    andb $1, %al
2647; SSE42-NEXT:    movb %al, 2(%rdi)
2648; SSE42-NEXT:    pextrb $2, %xmm10, %eax
2649; SSE42-NEXT:    andb $1, %al
2650; SSE42-NEXT:    movb %al, 2(%rdi)
2651; SSE42-NEXT:    pextrb $0, %xmm10, %eax
2652; SSE42-NEXT:    andb $1, %al
2653; SSE42-NEXT:    movb %al, 2(%rdi)
2654; SSE42-NEXT:    pextrb $14, %xmm9, %eax
2655; SSE42-NEXT:    andb $1, %al
2656; SSE42-NEXT:    movb %al, (%rdi)
2657; SSE42-NEXT:    pextrb $12, %xmm9, %eax
2658; SSE42-NEXT:    andb $1, %al
2659; SSE42-NEXT:    movb %al, (%rdi)
2660; SSE42-NEXT:    pextrb $10, %xmm9, %eax
2661; SSE42-NEXT:    andb $1, %al
2662; SSE42-NEXT:    movb %al, (%rdi)
2663; SSE42-NEXT:    pextrb $8, %xmm9, %eax
2664; SSE42-NEXT:    andb $1, %al
2665; SSE42-NEXT:    movb %al, (%rdi)
2666; SSE42-NEXT:    pextrb $6, %xmm9, %eax
2667; SSE42-NEXT:    andb $1, %al
2668; SSE42-NEXT:    movb %al, (%rdi)
2669; SSE42-NEXT:    pextrb $4, %xmm9, %eax
2670; SSE42-NEXT:    andb $1, %al
2671; SSE42-NEXT:    movb %al, (%rdi)
2672; SSE42-NEXT:    pextrb $2, %xmm9, %eax
2673; SSE42-NEXT:    andb $1, %al
2674; SSE42-NEXT:    movb %al, (%rdi)
2675; SSE42-NEXT:    pextrb $0, %xmm9, %eax
2676; SSE42-NEXT:    andb $1, %al
2677; SSE42-NEXT:    movb %al, (%rdi)
2678; SSE42-NEXT:    pextrb $14, %xmm8, %eax
2679; SSE42-NEXT:    andb $1, %al
2680; SSE42-NEXT:    movb %al, (%rdi)
2681; SSE42-NEXT:    pextrb $12, %xmm8, %eax
2682; SSE42-NEXT:    andb $1, %al
2683; SSE42-NEXT:    movb %al, (%rdi)
2684; SSE42-NEXT:    pextrb $10, %xmm8, %eax
2685; SSE42-NEXT:    andb $1, %al
2686; SSE42-NEXT:    movb %al, (%rdi)
2687; SSE42-NEXT:    pextrb $8, %xmm8, %eax
2688; SSE42-NEXT:    andb $1, %al
2689; SSE42-NEXT:    movb %al, (%rdi)
2690; SSE42-NEXT:    pextrb $6, %xmm8, %eax
2691; SSE42-NEXT:    andb $1, %al
2692; SSE42-NEXT:    movb %al, (%rdi)
2693; SSE42-NEXT:    pextrb $4, %xmm8, %eax
2694; SSE42-NEXT:    andb $1, %al
2695; SSE42-NEXT:    movb %al, (%rdi)
2696; SSE42-NEXT:    pextrb $2, %xmm8, %eax
2697; SSE42-NEXT:    andb $1, %al
2698; SSE42-NEXT:    movb %al, (%rdi)
2699; SSE42-NEXT:    pextrb $0, %xmm8, %eax
2700; SSE42-NEXT:    andb $1, %al
2701; SSE42-NEXT:    movb %al, (%rdi)
2702; SSE42-NEXT:    movq %rdi, %rax
2703; SSE42-NEXT:    retq
2704;
2705; AVX1-LABEL: test_cmp_v32f32:
2706; AVX1:       # BB#0:
2707; AVX1-NEXT:    vcmpltps %ymm3, %ymm7, %ymm3
2708; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
2709; AVX1-NEXT:    vpacksswb %xmm7, %xmm3, %xmm3
2710; AVX1-NEXT:    vcmpltps %ymm2, %ymm6, %ymm2
2711; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
2712; AVX1-NEXT:    vpacksswb %xmm6, %xmm2, %xmm2
2713; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
2714; AVX1-NEXT:    vcmpltps %ymm1, %ymm5, %ymm1
2715; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
2716; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
2717; AVX1-NEXT:    vcmpltps %ymm0, %ymm4, %ymm0
2718; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2719; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
2720; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2721; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2722; AVX1-NEXT:    retq
2723;
2724; AVX2-LABEL: test_cmp_v32f32:
2725; AVX2:       # BB#0:
2726; AVX2-NEXT:    vcmpltps %ymm3, %ymm7, %ymm3
2727; AVX2-NEXT:    vcmpltps %ymm2, %ymm6, %ymm2
2728; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
2729; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2730; AVX2-NEXT:    vcmpltps %ymm1, %ymm5, %ymm1
2731; AVX2-NEXT:    vcmpltps %ymm0, %ymm4, %ymm0
2732; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
2733; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2734; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
2735; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2736; AVX2-NEXT:    retq
2737;
2738; AVX512F-LABEL: test_cmp_v32f32:
2739; AVX512F:       # BB#0:
2740; AVX512F-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2741; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
2742; AVX512F-NEXT:    vextractf32x4 $3, %zmm0, %xmm6
2743; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
2744; AVX512F-NEXT:    xorl %eax, %eax
2745; AVX512F-NEXT:    vucomiss %xmm5, %xmm7
2746; AVX512F-NEXT:    movl $-1, %ecx
2747; AVX512F-NEXT:    movl $0, %edx
2748; AVX512F-NEXT:    cmoval %ecx, %edx
2749; AVX512F-NEXT:    vucomiss %xmm4, %xmm6
2750; AVX512F-NEXT:    movl $0, %esi
2751; AVX512F-NEXT:    cmoval %ecx, %esi
2752; AVX512F-NEXT:    vmovd %esi, %xmm5
2753; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm8
2754; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
2755; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
2756; AVX512F-NEXT:    vucomiss %xmm7, %xmm5
2757; AVX512F-NEXT:    movl $0, %edx
2758; AVX512F-NEXT:    cmoval %ecx, %edx
2759; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm8, %xmm5
2760; AVX512F-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
2761; AVX512F-NEXT:    vpermilps {{.*#+}} xmm6 = xmm6[3,1,2,3]
2762; AVX512F-NEXT:    vucomiss %xmm4, %xmm6
2763; AVX512F-NEXT:    movl $0, %edx
2764; AVX512F-NEXT:    cmoval %ecx, %edx
2765; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm8
2766; AVX512F-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2767; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2768; AVX512F-NEXT:    vextractf32x4 $2, %zmm0, %xmm7
2769; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2770; AVX512F-NEXT:    vucomiss %xmm6, %xmm4
2771; AVX512F-NEXT:    movl $0, %edx
2772; AVX512F-NEXT:    cmoval %ecx, %edx
2773; AVX512F-NEXT:    vucomiss %xmm5, %xmm7
2774; AVX512F-NEXT:    movl $0, %esi
2775; AVX512F-NEXT:    cmoval %ecx, %esi
2776; AVX512F-NEXT:    vmovd %esi, %xmm4
2777; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
2778; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
2779; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
2780; AVX512F-NEXT:    vucomiss %xmm6, %xmm4
2781; AVX512F-NEXT:    movl $0, %edx
2782; AVX512F-NEXT:    cmoval %ecx, %edx
2783; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
2784; AVX512F-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2785; AVX512F-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
2786; AVX512F-NEXT:    vucomiss %xmm5, %xmm6
2787; AVX512F-NEXT:    movl $0, %edx
2788; AVX512F-NEXT:    cmoval %ecx, %edx
2789; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
2790; AVX512F-NEXT:    vinserti128 $1, %xmm8, %ymm4, %ymm8
2791; AVX512F-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
2792; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2793; AVX512F-NEXT:    vextractf32x4 $1, %zmm0, %xmm7
2794; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2795; AVX512F-NEXT:    vucomiss %xmm6, %xmm4
2796; AVX512F-NEXT:    movl $0, %edx
2797; AVX512F-NEXT:    cmoval %ecx, %edx
2798; AVX512F-NEXT:    vucomiss %xmm5, %xmm7
2799; AVX512F-NEXT:    movl $0, %esi
2800; AVX512F-NEXT:    cmoval %ecx, %esi
2801; AVX512F-NEXT:    vmovd %esi, %xmm4
2802; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
2803; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
2804; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
2805; AVX512F-NEXT:    vucomiss %xmm6, %xmm4
2806; AVX512F-NEXT:    movl $0, %edx
2807; AVX512F-NEXT:    cmoval %ecx, %edx
2808; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
2809; AVX512F-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2810; AVX512F-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
2811; AVX512F-NEXT:    vucomiss %xmm5, %xmm6
2812; AVX512F-NEXT:    movl $0, %edx
2813; AVX512F-NEXT:    cmoval %ecx, %edx
2814; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
2815; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]
2816; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
2817; AVX512F-NEXT:    vucomiss %xmm5, %xmm6
2818; AVX512F-NEXT:    movl $0, %edx
2819; AVX512F-NEXT:    cmoval %ecx, %edx
2820; AVX512F-NEXT:    vucomiss %xmm2, %xmm0
2821; AVX512F-NEXT:    movl $0, %esi
2822; AVX512F-NEXT:    cmoval %ecx, %esi
2823; AVX512F-NEXT:    vmovd %esi, %xmm5
2824; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
2825; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
2826; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm0[1,0]
2827; AVX512F-NEXT:    vucomiss %xmm6, %xmm7
2828; AVX512F-NEXT:    movl $0, %edx
2829; AVX512F-NEXT:    cmoval %ecx, %edx
2830; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
2831; AVX512F-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
2832; AVX512F-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2833; AVX512F-NEXT:    vucomiss %xmm2, %xmm0
2834; AVX512F-NEXT:    movl $0, %edx
2835; AVX512F-NEXT:    cmoval %ecx, %edx
2836; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm0
2837; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
2838; AVX512F-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
2839; AVX512F-NEXT:    vpmovdb %zmm0, %xmm8
2840; AVX512F-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
2841; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]
2842; AVX512F-NEXT:    vextractf32x4 $3, %zmm1, %xmm5
2843; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2844; AVX512F-NEXT:    vucomiss %xmm4, %xmm6
2845; AVX512F-NEXT:    movl $0, %edx
2846; AVX512F-NEXT:    cmoval %ecx, %edx
2847; AVX512F-NEXT:    vucomiss %xmm2, %xmm5
2848; AVX512F-NEXT:    movl $0, %esi
2849; AVX512F-NEXT:    cmoval %ecx, %esi
2850; AVX512F-NEXT:    vmovd %esi, %xmm4
2851; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2852; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
2853; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
2854; AVX512F-NEXT:    vucomiss %xmm6, %xmm7
2855; AVX512F-NEXT:    movl $0, %edx
2856; AVX512F-NEXT:    cmoval %ecx, %edx
2857; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2858; AVX512F-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
2859; AVX512F-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2860; AVX512F-NEXT:    vucomiss %xmm2, %xmm5
2861; AVX512F-NEXT:    movl $0, %edx
2862; AVX512F-NEXT:    cmoval %ecx, %edx
2863; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm2
2864; AVX512F-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
2865; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
2866; AVX512F-NEXT:    vextractf32x4 $2, %zmm1, %xmm6
2867; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
2868; AVX512F-NEXT:    vucomiss %xmm5, %xmm7
2869; AVX512F-NEXT:    movl $0, %edx
2870; AVX512F-NEXT:    cmoval %ecx, %edx
2871; AVX512F-NEXT:    vucomiss %xmm4, %xmm6
2872; AVX512F-NEXT:    movl $0, %esi
2873; AVX512F-NEXT:    cmoval %ecx, %esi
2874; AVX512F-NEXT:    vmovd %esi, %xmm5
2875; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
2876; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
2877; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm6[1,0]
2878; AVX512F-NEXT:    vucomiss %xmm7, %xmm0
2879; AVX512F-NEXT:    movl $0, %edx
2880; AVX512F-NEXT:    cmoval %ecx, %edx
2881; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm0
2882; AVX512F-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
2883; AVX512F-NEXT:    vpermilps {{.*#+}} xmm5 = xmm6[3,1,2,3]
2884; AVX512F-NEXT:    vucomiss %xmm4, %xmm5
2885; AVX512F-NEXT:    movl $0, %edx
2886; AVX512F-NEXT:    cmoval %ecx, %edx
2887; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm0
2888; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2889; AVX512F-NEXT:    vextractf32x4 $1, %zmm3, %xmm0
2890; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
2891; AVX512F-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
2892; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2893; AVX512F-NEXT:    vucomiss %xmm4, %xmm6
2894; AVX512F-NEXT:    movl $0, %edx
2895; AVX512F-NEXT:    cmoval %ecx, %edx
2896; AVX512F-NEXT:    vucomiss %xmm0, %xmm5
2897; AVX512F-NEXT:    movl $0, %esi
2898; AVX512F-NEXT:    cmoval %ecx, %esi
2899; AVX512F-NEXT:    vmovd %esi, %xmm4
2900; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2901; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm0[1,0]
2902; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
2903; AVX512F-NEXT:    vucomiss %xmm6, %xmm7
2904; AVX512F-NEXT:    movl $0, %edx
2905; AVX512F-NEXT:    cmoval %ecx, %edx
2906; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2907; AVX512F-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2908; AVX512F-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2909; AVX512F-NEXT:    vucomiss %xmm0, %xmm5
2910; AVX512F-NEXT:    movl $0, %edx
2911; AVX512F-NEXT:    cmoval %ecx, %edx
2912; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm0
2913; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
2914; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]
2915; AVX512F-NEXT:    vucomiss %xmm4, %xmm5
2916; AVX512F-NEXT:    movl $0, %edx
2917; AVX512F-NEXT:    cmoval %ecx, %edx
2918; AVX512F-NEXT:    vucomiss %xmm3, %xmm1
2919; AVX512F-NEXT:    movl $0, %esi
2920; AVX512F-NEXT:    cmoval %ecx, %esi
2921; AVX512F-NEXT:    vmovd %esi, %xmm4
2922; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2923; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm3[1,0]
2924; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm1[1,0]
2925; AVX512F-NEXT:    vucomiss %xmm5, %xmm6
2926; AVX512F-NEXT:    movl $0, %edx
2927; AVX512F-NEXT:    cmoval %ecx, %edx
2928; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2929; AVX512F-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[3,1,2,3]
2930; AVX512F-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
2931; AVX512F-NEXT:    vucomiss %xmm3, %xmm1
2932; AVX512F-NEXT:    cmoval %ecx, %eax
2933; AVX512F-NEXT:    vpinsrd $3, %eax, %xmm4, %xmm1
2934; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
2935; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
2936; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
2937; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
2938; AVX512F-NEXT:    retq
2939;
2940; AVX512DQ-LABEL: test_cmp_v32f32:
2941; AVX512DQ:       # BB#0:
2942; AVX512DQ-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2943; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
2944; AVX512DQ-NEXT:    vextractf32x4 $3, %zmm0, %xmm6
2945; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
2946; AVX512DQ-NEXT:    xorl %eax, %eax
2947; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm7
2948; AVX512DQ-NEXT:    movl $-1, %ecx
2949; AVX512DQ-NEXT:    movl $0, %edx
2950; AVX512DQ-NEXT:    cmoval %ecx, %edx
2951; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm6
2952; AVX512DQ-NEXT:    movl $0, %esi
2953; AVX512DQ-NEXT:    cmoval %ecx, %esi
2954; AVX512DQ-NEXT:    vmovd %esi, %xmm5
2955; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm8
2956; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
2957; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
2958; AVX512DQ-NEXT:    vucomiss %xmm7, %xmm5
2959; AVX512DQ-NEXT:    movl $0, %edx
2960; AVX512DQ-NEXT:    cmoval %ecx, %edx
2961; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm8, %xmm5
2962; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
2963; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm6 = xmm6[3,1,2,3]
2964; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm6
2965; AVX512DQ-NEXT:    movl $0, %edx
2966; AVX512DQ-NEXT:    cmoval %ecx, %edx
2967; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm8
2968; AVX512DQ-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2969; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2970; AVX512DQ-NEXT:    vextractf32x4 $2, %zmm0, %xmm7
2971; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2972; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm4
2973; AVX512DQ-NEXT:    movl $0, %edx
2974; AVX512DQ-NEXT:    cmoval %ecx, %edx
2975; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm7
2976; AVX512DQ-NEXT:    movl $0, %esi
2977; AVX512DQ-NEXT:    cmoval %ecx, %esi
2978; AVX512DQ-NEXT:    vmovd %esi, %xmm4
2979; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
2980; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
2981; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
2982; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm4
2983; AVX512DQ-NEXT:    movl $0, %edx
2984; AVX512DQ-NEXT:    cmoval %ecx, %edx
2985; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
2986; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2987; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
2988; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm6
2989; AVX512DQ-NEXT:    movl $0, %edx
2990; AVX512DQ-NEXT:    cmoval %ecx, %edx
2991; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
2992; AVX512DQ-NEXT:    vinserti128 $1, %xmm8, %ymm4, %ymm8
2993; AVX512DQ-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
2994; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2995; AVX512DQ-NEXT:    vextractf32x4 $1, %zmm0, %xmm7
2996; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2997; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm4
2998; AVX512DQ-NEXT:    movl $0, %edx
2999; AVX512DQ-NEXT:    cmoval %ecx, %edx
3000; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm7
3001; AVX512DQ-NEXT:    movl $0, %esi
3002; AVX512DQ-NEXT:    cmoval %ecx, %esi
3003; AVX512DQ-NEXT:    vmovd %esi, %xmm4
3004; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
3005; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
3006; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
3007; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm4
3008; AVX512DQ-NEXT:    movl $0, %edx
3009; AVX512DQ-NEXT:    cmoval %ecx, %edx
3010; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
3011; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3012; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
3013; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm6
3014; AVX512DQ-NEXT:    movl $0, %edx
3015; AVX512DQ-NEXT:    cmoval %ecx, %edx
3016; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
3017; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]
3018; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
3019; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm6
3020; AVX512DQ-NEXT:    movl $0, %edx
3021; AVX512DQ-NEXT:    cmoval %ecx, %edx
3022; AVX512DQ-NEXT:    vucomiss %xmm2, %xmm0
3023; AVX512DQ-NEXT:    movl $0, %esi
3024; AVX512DQ-NEXT:    cmoval %ecx, %esi
3025; AVX512DQ-NEXT:    vmovd %esi, %xmm5
3026; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3027; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
3028; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm0[1,0]
3029; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm7
3030; AVX512DQ-NEXT:    movl $0, %edx
3031; AVX512DQ-NEXT:    cmoval %ecx, %edx
3032; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
3033; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
3034; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
3035; AVX512DQ-NEXT:    vucomiss %xmm2, %xmm0
3036; AVX512DQ-NEXT:    movl $0, %edx
3037; AVX512DQ-NEXT:    cmoval %ecx, %edx
3038; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm0
3039; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
3040; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm8, %zmm0, %zmm0
3041; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm8
3042; AVX512DQ-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
3043; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]
3044; AVX512DQ-NEXT:    vextractf32x4 $3, %zmm1, %xmm5
3045; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3046; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm6
3047; AVX512DQ-NEXT:    movl $0, %edx
3048; AVX512DQ-NEXT:    cmoval %ecx, %edx
3049; AVX512DQ-NEXT:    vucomiss %xmm2, %xmm5
3050; AVX512DQ-NEXT:    movl $0, %esi
3051; AVX512DQ-NEXT:    cmoval %ecx, %esi
3052; AVX512DQ-NEXT:    vmovd %esi, %xmm4
3053; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3054; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
3055; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
3056; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm7
3057; AVX512DQ-NEXT:    movl $0, %edx
3058; AVX512DQ-NEXT:    cmoval %ecx, %edx
3059; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3060; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
3061; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3062; AVX512DQ-NEXT:    vucomiss %xmm2, %xmm5
3063; AVX512DQ-NEXT:    movl $0, %edx
3064; AVX512DQ-NEXT:    cmoval %ecx, %edx
3065; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm2
3066; AVX512DQ-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
3067; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
3068; AVX512DQ-NEXT:    vextractf32x4 $2, %zmm1, %xmm6
3069; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
3070; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm7
3071; AVX512DQ-NEXT:    movl $0, %edx
3072; AVX512DQ-NEXT:    cmoval %ecx, %edx
3073; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm6
3074; AVX512DQ-NEXT:    movl $0, %esi
3075; AVX512DQ-NEXT:    cmoval %ecx, %esi
3076; AVX512DQ-NEXT:    vmovd %esi, %xmm5
3077; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3078; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
3079; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm6[1,0]
3080; AVX512DQ-NEXT:    vucomiss %xmm7, %xmm0
3081; AVX512DQ-NEXT:    movl $0, %edx
3082; AVX512DQ-NEXT:    cmoval %ecx, %edx
3083; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm0
3084; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
3085; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm5 = xmm6[3,1,2,3]
3086; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm5
3087; AVX512DQ-NEXT:    movl $0, %edx
3088; AVX512DQ-NEXT:    cmoval %ecx, %edx
3089; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm0
3090; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
3091; AVX512DQ-NEXT:    vextractf32x4 $1, %zmm3, %xmm0
3092; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
3093; AVX512DQ-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
3094; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3095; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm6
3096; AVX512DQ-NEXT:    movl $0, %edx
3097; AVX512DQ-NEXT:    cmoval %ecx, %edx
3098; AVX512DQ-NEXT:    vucomiss %xmm0, %xmm5
3099; AVX512DQ-NEXT:    movl $0, %esi
3100; AVX512DQ-NEXT:    cmoval %ecx, %esi
3101; AVX512DQ-NEXT:    vmovd %esi, %xmm4
3102; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3103; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm0[1,0]
3104; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
3105; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm7
3106; AVX512DQ-NEXT:    movl $0, %edx
3107; AVX512DQ-NEXT:    cmoval %ecx, %edx
3108; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3109; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
3110; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3111; AVX512DQ-NEXT:    vucomiss %xmm0, %xmm5
3112; AVX512DQ-NEXT:    movl $0, %edx
3113; AVX512DQ-NEXT:    cmoval %ecx, %edx
3114; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm0
3115; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
3116; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]
3117; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm5
3118; AVX512DQ-NEXT:    movl $0, %edx
3119; AVX512DQ-NEXT:    cmoval %ecx, %edx
3120; AVX512DQ-NEXT:    vucomiss %xmm3, %xmm1
3121; AVX512DQ-NEXT:    movl $0, %esi
3122; AVX512DQ-NEXT:    cmoval %ecx, %esi
3123; AVX512DQ-NEXT:    vmovd %esi, %xmm4
3124; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3125; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm3[1,0]
3126; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm1[1,0]
3127; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm6
3128; AVX512DQ-NEXT:    movl $0, %edx
3129; AVX512DQ-NEXT:    cmoval %ecx, %edx
3130; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3131; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[3,1,2,3]
3132; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
3133; AVX512DQ-NEXT:    vucomiss %xmm3, %xmm1
3134; AVX512DQ-NEXT:    cmoval %ecx, %eax
3135; AVX512DQ-NEXT:    vpinsrd $3, %eax, %xmm4, %xmm1
3136; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
3137; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm2, %zmm0, %zmm0
3138; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
3139; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
3140; AVX512DQ-NEXT:    retq
3141;
3142; AVX512BW-LABEL: test_cmp_v32f32:
3143; AVX512BW:       # BB#0:
3144; AVX512BW-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
3145; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
3146; AVX512BW-NEXT:    vextractf32x4 $3, %zmm0, %xmm6
3147; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
3148; AVX512BW-NEXT:    xorl %eax, %eax
3149; AVX512BW-NEXT:    vucomiss %xmm5, %xmm7
3150; AVX512BW-NEXT:    movl $-1, %ecx
3151; AVX512BW-NEXT:    movl $0, %edx
3152; AVX512BW-NEXT:    cmoval %ecx, %edx
3153; AVX512BW-NEXT:    vucomiss %xmm4, %xmm6
3154; AVX512BW-NEXT:    movl $0, %esi
3155; AVX512BW-NEXT:    cmoval %ecx, %esi
3156; AVX512BW-NEXT:    vmovd %esi, %xmm5
3157; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm8
3158; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
3159; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
3160; AVX512BW-NEXT:    vucomiss %xmm7, %xmm5
3161; AVX512BW-NEXT:    movl $0, %edx
3162; AVX512BW-NEXT:    cmoval %ecx, %edx
3163; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm8, %xmm5
3164; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
3165; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm6 = xmm6[3,1,2,3]
3166; AVX512BW-NEXT:    vucomiss %xmm4, %xmm6
3167; AVX512BW-NEXT:    movl $0, %edx
3168; AVX512BW-NEXT:    cmoval %ecx, %edx
3169; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm8
3170; AVX512BW-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
3171; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3172; AVX512BW-NEXT:    vextractf32x4 $2, %zmm0, %xmm7
3173; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
3174; AVX512BW-NEXT:    vucomiss %xmm6, %xmm4
3175; AVX512BW-NEXT:    movl $0, %edx
3176; AVX512BW-NEXT:    cmoval %ecx, %edx
3177; AVX512BW-NEXT:    vucomiss %xmm5, %xmm7
3178; AVX512BW-NEXT:    movl $0, %esi
3179; AVX512BW-NEXT:    cmoval %ecx, %esi
3180; AVX512BW-NEXT:    vmovd %esi, %xmm4
3181; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
3182; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
3183; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
3184; AVX512BW-NEXT:    vucomiss %xmm6, %xmm4
3185; AVX512BW-NEXT:    movl $0, %edx
3186; AVX512BW-NEXT:    cmoval %ecx, %edx
3187; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
3188; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3189; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
3190; AVX512BW-NEXT:    vucomiss %xmm5, %xmm6
3191; AVX512BW-NEXT:    movl $0, %edx
3192; AVX512BW-NEXT:    cmoval %ecx, %edx
3193; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
3194; AVX512BW-NEXT:    vinserti128 $1, %xmm8, %ymm4, %ymm8
3195; AVX512BW-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
3196; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3197; AVX512BW-NEXT:    vextractf32x4 $1, %zmm0, %xmm7
3198; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
3199; AVX512BW-NEXT:    vucomiss %xmm6, %xmm4
3200; AVX512BW-NEXT:    movl $0, %edx
3201; AVX512BW-NEXT:    cmoval %ecx, %edx
3202; AVX512BW-NEXT:    vucomiss %xmm5, %xmm7
3203; AVX512BW-NEXT:    movl $0, %esi
3204; AVX512BW-NEXT:    cmoval %ecx, %esi
3205; AVX512BW-NEXT:    vmovd %esi, %xmm4
3206; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
3207; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
3208; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
3209; AVX512BW-NEXT:    vucomiss %xmm6, %xmm4
3210; AVX512BW-NEXT:    movl $0, %edx
3211; AVX512BW-NEXT:    cmoval %ecx, %edx
3212; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
3213; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3214; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
3215; AVX512BW-NEXT:    vucomiss %xmm5, %xmm6
3216; AVX512BW-NEXT:    movl $0, %edx
3217; AVX512BW-NEXT:    cmoval %ecx, %edx
3218; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
3219; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]
3220; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
3221; AVX512BW-NEXT:    vucomiss %xmm5, %xmm6
3222; AVX512BW-NEXT:    movl $0, %edx
3223; AVX512BW-NEXT:    cmoval %ecx, %edx
3224; AVX512BW-NEXT:    vucomiss %xmm2, %xmm0
3225; AVX512BW-NEXT:    movl $0, %esi
3226; AVX512BW-NEXT:    cmoval %ecx, %esi
3227; AVX512BW-NEXT:    vmovd %esi, %xmm5
3228; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3229; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
3230; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm0[1,0]
3231; AVX512BW-NEXT:    vucomiss %xmm6, %xmm7
3232; AVX512BW-NEXT:    movl $0, %edx
3233; AVX512BW-NEXT:    cmoval %ecx, %edx
3234; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
3235; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
3236; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
3237; AVX512BW-NEXT:    vucomiss %xmm2, %xmm0
3238; AVX512BW-NEXT:    movl $0, %edx
3239; AVX512BW-NEXT:    cmoval %ecx, %edx
3240; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm0
3241; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
3242; AVX512BW-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
3243; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm8
3244; AVX512BW-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
3245; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]
3246; AVX512BW-NEXT:    vextractf32x4 $3, %zmm1, %xmm5
3247; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3248; AVX512BW-NEXT:    vucomiss %xmm4, %xmm6
3249; AVX512BW-NEXT:    movl $0, %edx
3250; AVX512BW-NEXT:    cmoval %ecx, %edx
3251; AVX512BW-NEXT:    vucomiss %xmm2, %xmm5
3252; AVX512BW-NEXT:    movl $0, %esi
3253; AVX512BW-NEXT:    cmoval %ecx, %esi
3254; AVX512BW-NEXT:    vmovd %esi, %xmm4
3255; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3256; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
3257; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
3258; AVX512BW-NEXT:    vucomiss %xmm6, %xmm7
3259; AVX512BW-NEXT:    movl $0, %edx
3260; AVX512BW-NEXT:    cmoval %ecx, %edx
3261; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3262; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
3263; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3264; AVX512BW-NEXT:    vucomiss %xmm2, %xmm5
3265; AVX512BW-NEXT:    movl $0, %edx
3266; AVX512BW-NEXT:    cmoval %ecx, %edx
3267; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm2
3268; AVX512BW-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
3269; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
3270; AVX512BW-NEXT:    vextractf32x4 $2, %zmm1, %xmm6
3271; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
3272; AVX512BW-NEXT:    vucomiss %xmm5, %xmm7
3273; AVX512BW-NEXT:    movl $0, %edx
3274; AVX512BW-NEXT:    cmoval %ecx, %edx
3275; AVX512BW-NEXT:    vucomiss %xmm4, %xmm6
3276; AVX512BW-NEXT:    movl $0, %esi
3277; AVX512BW-NEXT:    cmoval %ecx, %esi
3278; AVX512BW-NEXT:    vmovd %esi, %xmm5
3279; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3280; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
3281; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm6[1,0]
3282; AVX512BW-NEXT:    vucomiss %xmm7, %xmm0
3283; AVX512BW-NEXT:    movl $0, %edx
3284; AVX512BW-NEXT:    cmoval %ecx, %edx
3285; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm0
3286; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
3287; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm5 = xmm6[3,1,2,3]
3288; AVX512BW-NEXT:    vucomiss %xmm4, %xmm5
3289; AVX512BW-NEXT:    movl $0, %edx
3290; AVX512BW-NEXT:    cmoval %ecx, %edx
3291; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm0
3292; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
3293; AVX512BW-NEXT:    vextractf32x4 $1, %zmm3, %xmm0
3294; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
3295; AVX512BW-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
3296; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3297; AVX512BW-NEXT:    vucomiss %xmm4, %xmm6
3298; AVX512BW-NEXT:    movl $0, %edx
3299; AVX512BW-NEXT:    cmoval %ecx, %edx
3300; AVX512BW-NEXT:    vucomiss %xmm0, %xmm5
3301; AVX512BW-NEXT:    movl $0, %esi
3302; AVX512BW-NEXT:    cmoval %ecx, %esi
3303; AVX512BW-NEXT:    vmovd %esi, %xmm4
3304; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3305; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm0[1,0]
3306; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
3307; AVX512BW-NEXT:    vucomiss %xmm6, %xmm7
3308; AVX512BW-NEXT:    movl $0, %edx
3309; AVX512BW-NEXT:    cmoval %ecx, %edx
3310; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3311; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
3312; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3313; AVX512BW-NEXT:    vucomiss %xmm0, %xmm5
3314; AVX512BW-NEXT:    movl $0, %edx
3315; AVX512BW-NEXT:    cmoval %ecx, %edx
3316; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm0
3317; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
3318; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]
3319; AVX512BW-NEXT:    vucomiss %xmm4, %xmm5
3320; AVX512BW-NEXT:    movl $0, %edx
3321; AVX512BW-NEXT:    cmoval %ecx, %edx
3322; AVX512BW-NEXT:    vucomiss %xmm3, %xmm1
3323; AVX512BW-NEXT:    movl $0, %esi
3324; AVX512BW-NEXT:    cmoval %ecx, %esi
3325; AVX512BW-NEXT:    vmovd %esi, %xmm4
3326; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3327; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm3[1,0]
3328; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm1[1,0]
3329; AVX512BW-NEXT:    vucomiss %xmm5, %xmm6
3330; AVX512BW-NEXT:    movl $0, %edx
3331; AVX512BW-NEXT:    cmoval %ecx, %edx
3332; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3333; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[3,1,2,3]
3334; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
3335; AVX512BW-NEXT:    vucomiss %xmm3, %xmm1
3336; AVX512BW-NEXT:    cmoval %ecx, %eax
3337; AVX512BW-NEXT:    vpinsrd $3, %eax, %xmm4, %xmm1
3338; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
3339; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3340; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
3341; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
3342; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
3343; AVX512BW-NEXT:    retq
3344  %1 = fcmp ogt <32 x float> %a0, %a1
3345  ret <32 x i1> %1
3346}
3347
3348define <16 x i1> @test_cmp_v16i64(<16 x i64> %a0, <16 x i64> %a1) nounwind {
3349; SSE2-LABEL: test_cmp_v16i64:
3350; SSE2:       # BB#0:
3351; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
3352; SSE2-NEXT:    pxor %xmm8, %xmm7
3353; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
3354; SSE2-NEXT:    pxor %xmm8, %xmm9
3355; SSE2-NEXT:    movdqa %xmm7, %xmm10
3356; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
3357; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
3358; SSE2-NEXT:    pcmpeqd %xmm7, %xmm9
3359; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
3360; SSE2-NEXT:    pand %xmm11, %xmm7
3361; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
3362; SSE2-NEXT:    por %xmm7, %xmm9
3363; SSE2-NEXT:    pxor %xmm8, %xmm6
3364; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
3365; SSE2-NEXT:    pxor %xmm8, %xmm7
3366; SSE2-NEXT:    movdqa %xmm6, %xmm10
3367; SSE2-NEXT:    pcmpgtd %xmm7, %xmm10
3368; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
3369; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
3370; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
3371; SSE2-NEXT:    pand %xmm11, %xmm7
3372; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
3373; SSE2-NEXT:    por %xmm7, %xmm10
3374; SSE2-NEXT:    packsswb %xmm9, %xmm10
3375; SSE2-NEXT:    pxor %xmm8, %xmm5
3376; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
3377; SSE2-NEXT:    pxor %xmm8, %xmm7
3378; SSE2-NEXT:    movdqa %xmm5, %xmm6
3379; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
3380; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2]
3381; SSE2-NEXT:    pcmpeqd %xmm5, %xmm7
3382; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
3383; SSE2-NEXT:    pand %xmm9, %xmm5
3384; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
3385; SSE2-NEXT:    por %xmm5, %xmm6
3386; SSE2-NEXT:    pxor %xmm8, %xmm4
3387; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
3388; SSE2-NEXT:    pxor %xmm8, %xmm5
3389; SSE2-NEXT:    movdqa %xmm4, %xmm7
3390; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
3391; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,0,2,2]
3392; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
3393; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
3394; SSE2-NEXT:    pand %xmm9, %xmm5
3395; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
3396; SSE2-NEXT:    por %xmm5, %xmm4
3397; SSE2-NEXT:    packsswb %xmm6, %xmm4
3398; SSE2-NEXT:    packsswb %xmm10, %xmm4
3399; SSE2-NEXT:    pxor %xmm8, %xmm3
3400; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
3401; SSE2-NEXT:    pxor %xmm8, %xmm5
3402; SSE2-NEXT:    movdqa %xmm3, %xmm6
3403; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
3404; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
3405; SSE2-NEXT:    pcmpeqd %xmm3, %xmm5
3406; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
3407; SSE2-NEXT:    pand %xmm7, %xmm3
3408; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
3409; SSE2-NEXT:    por %xmm3, %xmm5
3410; SSE2-NEXT:    pxor %xmm8, %xmm2
3411; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
3412; SSE2-NEXT:    pxor %xmm8, %xmm3
3413; SSE2-NEXT:    movdqa %xmm2, %xmm6
3414; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
3415; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
3416; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
3417; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
3418; SSE2-NEXT:    pand %xmm7, %xmm3
3419; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
3420; SSE2-NEXT:    por %xmm3, %xmm2
3421; SSE2-NEXT:    packsswb %xmm5, %xmm2
3422; SSE2-NEXT:    pxor %xmm8, %xmm1
3423; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
3424; SSE2-NEXT:    pxor %xmm8, %xmm3
3425; SSE2-NEXT:    movdqa %xmm1, %xmm5
3426; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
3427; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
3428; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
3429; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
3430; SSE2-NEXT:    pand %xmm6, %xmm1
3431; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
3432; SSE2-NEXT:    por %xmm1, %xmm3
3433; SSE2-NEXT:    pxor %xmm8, %xmm0
3434; SSE2-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm8
3435; SSE2-NEXT:    movdqa %xmm0, %xmm1
3436; SSE2-NEXT:    pcmpgtd %xmm8, %xmm1
3437; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
3438; SSE2-NEXT:    pcmpeqd %xmm0, %xmm8
3439; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[1,1,3,3]
3440; SSE2-NEXT:    pand %xmm5, %xmm6
3441; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
3442; SSE2-NEXT:    por %xmm6, %xmm0
3443; SSE2-NEXT:    packsswb %xmm3, %xmm0
3444; SSE2-NEXT:    packsswb %xmm2, %xmm0
3445; SSE2-NEXT:    packsswb %xmm4, %xmm0
3446; SSE2-NEXT:    retq
3447;
3448; SSE42-LABEL: test_cmp_v16i64:
3449; SSE42:       # BB#0:
3450; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm7
3451; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm6
3452; SSE42-NEXT:    packsswb %xmm7, %xmm6
3453; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm5
3454; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm4
3455; SSE42-NEXT:    packsswb %xmm5, %xmm4
3456; SSE42-NEXT:    packsswb %xmm6, %xmm4
3457; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm3
3458; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm2
3459; SSE42-NEXT:    packsswb %xmm3, %xmm2
3460; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
3461; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm0
3462; SSE42-NEXT:    packsswb %xmm1, %xmm0
3463; SSE42-NEXT:    packsswb %xmm2, %xmm0
3464; SSE42-NEXT:    packsswb %xmm4, %xmm0
3465; SSE42-NEXT:    retq
3466;
3467; AVX1-LABEL: test_cmp_v16i64:
3468; AVX1:       # BB#0:
3469; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm8
3470; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm9
3471; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm9, %xmm8
3472; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm3, %xmm3
3473; AVX1-NEXT:    vpacksswb %xmm8, %xmm3, %xmm8
3474; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
3475; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
3476; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm3, %xmm3
3477; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm2, %xmm2
3478; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
3479; AVX1-NEXT:    vpacksswb %xmm8, %xmm2, %xmm2
3480; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
3481; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
3482; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm3
3483; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm1, %xmm1
3484; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
3485; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm3
3486; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3487; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3
3488; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm0
3489; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
3490; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
3491; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
3492; AVX1-NEXT:    vzeroupper
3493; AVX1-NEXT:    retq
3494;
3495; AVX2-LABEL: test_cmp_v16i64:
3496; AVX2:       # BB#0:
3497; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm3, %ymm3
3498; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm2, %ymm2
3499; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
3500; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
3501; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm1, %ymm1
3502; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm0
3503; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
3504; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3505; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
3506; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3507; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
3508; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
3509; AVX2-NEXT:    vzeroupper
3510; AVX2-NEXT:    retq
3511;
3512; AVX512F-LABEL: test_cmp_v16i64:
3513; AVX512F:       # BB#0:
3514; AVX512F-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
3515; AVX512F-NEXT:    vpextrq $1, %xmm4, %rcx
3516; AVX512F-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
3517; AVX512F-NEXT:    vpextrq $1, %xmm5, %rdx
3518; AVX512F-NEXT:    xorl %eax, %eax
3519; AVX512F-NEXT:    cmpq %rcx, %rdx
3520; AVX512F-NEXT:    movq $-1, %rcx
3521; AVX512F-NEXT:    movl $0, %edx
3522; AVX512F-NEXT:    cmovgq %rcx, %rdx
3523; AVX512F-NEXT:    vmovq %rdx, %xmm6
3524; AVX512F-NEXT:    vmovq %xmm4, %rdx
3525; AVX512F-NEXT:    vmovq %xmm5, %rsi
3526; AVX512F-NEXT:    cmpq %rdx, %rsi
3527; AVX512F-NEXT:    movl $0, %edx
3528; AVX512F-NEXT:    cmovgq %rcx, %rdx
3529; AVX512F-NEXT:    vmovq %rdx, %xmm4
3530; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3531; AVX512F-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
3532; AVX512F-NEXT:    vpextrq $1, %xmm5, %rdx
3533; AVX512F-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
3534; AVX512F-NEXT:    vpextrq $1, %xmm6, %rsi
3535; AVX512F-NEXT:    cmpq %rdx, %rsi
3536; AVX512F-NEXT:    movl $0, %edx
3537; AVX512F-NEXT:    cmovgq %rcx, %rdx
3538; AVX512F-NEXT:    vmovq %rdx, %xmm7
3539; AVX512F-NEXT:    vmovq %xmm5, %rdx
3540; AVX512F-NEXT:    vmovq %xmm6, %rsi
3541; AVX512F-NEXT:    cmpq %rdx, %rsi
3542; AVX512F-NEXT:    movl $0, %edx
3543; AVX512F-NEXT:    cmovgq %rcx, %rdx
3544; AVX512F-NEXT:    vmovq %rdx, %xmm5
3545; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3546; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
3547; AVX512F-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
3548; AVX512F-NEXT:    vpextrq $1, %xmm5, %rdx
3549; AVX512F-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
3550; AVX512F-NEXT:    vpextrq $1, %xmm6, %rsi
3551; AVX512F-NEXT:    cmpq %rdx, %rsi
3552; AVX512F-NEXT:    movl $0, %edx
3553; AVX512F-NEXT:    cmovgq %rcx, %rdx
3554; AVX512F-NEXT:    vmovq %rdx, %xmm7
3555; AVX512F-NEXT:    vmovq %xmm5, %rdx
3556; AVX512F-NEXT:    vmovq %xmm6, %rsi
3557; AVX512F-NEXT:    cmpq %rdx, %rsi
3558; AVX512F-NEXT:    movl $0, %edx
3559; AVX512F-NEXT:    cmovgq %rcx, %rdx
3560; AVX512F-NEXT:    vmovq %rdx, %xmm5
3561; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3562; AVX512F-NEXT:    vpextrq $1, %xmm2, %rdx
3563; AVX512F-NEXT:    vpextrq $1, %xmm0, %rsi
3564; AVX512F-NEXT:    cmpq %rdx, %rsi
3565; AVX512F-NEXT:    movl $0, %edx
3566; AVX512F-NEXT:    cmovgq %rcx, %rdx
3567; AVX512F-NEXT:    vmovq %rdx, %xmm6
3568; AVX512F-NEXT:    vmovq %xmm2, %rdx
3569; AVX512F-NEXT:    vmovq %xmm0, %rsi
3570; AVX512F-NEXT:    cmpq %rdx, %rsi
3571; AVX512F-NEXT:    movl $0, %edx
3572; AVX512F-NEXT:    cmovgq %rcx, %rdx
3573; AVX512F-NEXT:    vmovq %rdx, %xmm0
3574; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
3575; AVX512F-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
3576; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
3577; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
3578; AVX512F-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
3579; AVX512F-NEXT:    vpextrq $1, %xmm2, %rdx
3580; AVX512F-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
3581; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
3582; AVX512F-NEXT:    cmpq %rdx, %rsi
3583; AVX512F-NEXT:    movl $0, %edx
3584; AVX512F-NEXT:    cmovgq %rcx, %rdx
3585; AVX512F-NEXT:    vmovq %rdx, %xmm5
3586; AVX512F-NEXT:    vmovq %xmm2, %rdx
3587; AVX512F-NEXT:    vmovq %xmm4, %rsi
3588; AVX512F-NEXT:    cmpq %rdx, %rsi
3589; AVX512F-NEXT:    movl $0, %edx
3590; AVX512F-NEXT:    cmovgq %rcx, %rdx
3591; AVX512F-NEXT:    vmovq %rdx, %xmm2
3592; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
3593; AVX512F-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
3594; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
3595; AVX512F-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
3596; AVX512F-NEXT:    vpextrq $1, %xmm5, %rsi
3597; AVX512F-NEXT:    cmpq %rdx, %rsi
3598; AVX512F-NEXT:    movl $0, %edx
3599; AVX512F-NEXT:    cmovgq %rcx, %rdx
3600; AVX512F-NEXT:    vmovq %rdx, %xmm6
3601; AVX512F-NEXT:    vmovq %xmm4, %rdx
3602; AVX512F-NEXT:    vmovq %xmm5, %rsi
3603; AVX512F-NEXT:    cmpq %rdx, %rsi
3604; AVX512F-NEXT:    movl $0, %edx
3605; AVX512F-NEXT:    cmovgq %rcx, %rdx
3606; AVX512F-NEXT:    vmovq %rdx, %xmm4
3607; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3608; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
3609; AVX512F-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
3610; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
3611; AVX512F-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
3612; AVX512F-NEXT:    vpextrq $1, %xmm5, %rsi
3613; AVX512F-NEXT:    cmpq %rdx, %rsi
3614; AVX512F-NEXT:    movl $0, %edx
3615; AVX512F-NEXT:    cmovgq %rcx, %rdx
3616; AVX512F-NEXT:    vmovq %rdx, %xmm6
3617; AVX512F-NEXT:    vmovq %xmm4, %rdx
3618; AVX512F-NEXT:    vmovq %xmm5, %rsi
3619; AVX512F-NEXT:    cmpq %rdx, %rsi
3620; AVX512F-NEXT:    movl $0, %edx
3621; AVX512F-NEXT:    cmovgq %rcx, %rdx
3622; AVX512F-NEXT:    vmovq %rdx, %xmm4
3623; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3624; AVX512F-NEXT:    vpextrq $1, %xmm3, %rdx
3625; AVX512F-NEXT:    vpextrq $1, %xmm1, %rsi
3626; AVX512F-NEXT:    cmpq %rdx, %rsi
3627; AVX512F-NEXT:    movl $0, %edx
3628; AVX512F-NEXT:    cmovgq %rcx, %rdx
3629; AVX512F-NEXT:    vmovq %rdx, %xmm5
3630; AVX512F-NEXT:    vmovq %xmm3, %rdx
3631; AVX512F-NEXT:    vmovq %xmm1, %rsi
3632; AVX512F-NEXT:    cmpq %rdx, %rsi
3633; AVX512F-NEXT:    cmovgq %rcx, %rax
3634; AVX512F-NEXT:    vmovq %rax, %xmm1
3635; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
3636; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
3637; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
3638; AVX512F-NEXT:    vpmovqd %zmm1, %ymm1
3639; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3640; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
3641; AVX512F-NEXT:    retq
3642;
3643; AVX512DQ-LABEL: test_cmp_v16i64:
3644; AVX512DQ:       # BB#0:
3645; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm2, %xmm4
3646; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rcx
3647; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm0, %xmm5
3648; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rdx
3649; AVX512DQ-NEXT:    xorl %eax, %eax
3650; AVX512DQ-NEXT:    cmpq %rcx, %rdx
3651; AVX512DQ-NEXT:    movq $-1, %rcx
3652; AVX512DQ-NEXT:    movl $0, %edx
3653; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3654; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
3655; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
3656; AVX512DQ-NEXT:    vmovq %xmm5, %rsi
3657; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3658; AVX512DQ-NEXT:    movl $0, %edx
3659; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3660; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
3661; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3662; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm2, %xmm5
3663; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rdx
3664; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm0, %xmm6
3665; AVX512DQ-NEXT:    vpextrq $1, %xmm6, %rsi
3666; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3667; AVX512DQ-NEXT:    movl $0, %edx
3668; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3669; AVX512DQ-NEXT:    vmovq %rdx, %xmm7
3670; AVX512DQ-NEXT:    vmovq %xmm5, %rdx
3671; AVX512DQ-NEXT:    vmovq %xmm6, %rsi
3672; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3673; AVX512DQ-NEXT:    movl $0, %edx
3674; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3675; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
3676; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3677; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
3678; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm2, %xmm5
3679; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rdx
3680; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm0, %xmm6
3681; AVX512DQ-NEXT:    vpextrq $1, %xmm6, %rsi
3682; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3683; AVX512DQ-NEXT:    movl $0, %edx
3684; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3685; AVX512DQ-NEXT:    vmovq %rdx, %xmm7
3686; AVX512DQ-NEXT:    vmovq %xmm5, %rdx
3687; AVX512DQ-NEXT:    vmovq %xmm6, %rsi
3688; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3689; AVX512DQ-NEXT:    movl $0, %edx
3690; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3691; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
3692; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3693; AVX512DQ-NEXT:    vpextrq $1, %xmm2, %rdx
3694; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rsi
3695; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3696; AVX512DQ-NEXT:    movl $0, %edx
3697; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3698; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
3699; AVX512DQ-NEXT:    vmovq %xmm2, %rdx
3700; AVX512DQ-NEXT:    vmovq %xmm0, %rsi
3701; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3702; AVX512DQ-NEXT:    movl $0, %edx
3703; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3704; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
3705; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
3706; AVX512DQ-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
3707; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
3708; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
3709; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm3, %xmm2
3710; AVX512DQ-NEXT:    vpextrq $1, %xmm2, %rdx
3711; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm1, %xmm4
3712; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
3713; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3714; AVX512DQ-NEXT:    movl $0, %edx
3715; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3716; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
3717; AVX512DQ-NEXT:    vmovq %xmm2, %rdx
3718; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
3719; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3720; AVX512DQ-NEXT:    movl $0, %edx
3721; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3722; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
3723; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
3724; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm3, %xmm4
3725; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
3726; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm1, %xmm5
3727; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rsi
3728; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3729; AVX512DQ-NEXT:    movl $0, %edx
3730; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3731; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
3732; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
3733; AVX512DQ-NEXT:    vmovq %xmm5, %rsi
3734; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3735; AVX512DQ-NEXT:    movl $0, %edx
3736; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3737; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
3738; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3739; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
3740; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm3, %xmm4
3741; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
3742; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm1, %xmm5
3743; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rsi
3744; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3745; AVX512DQ-NEXT:    movl $0, %edx
3746; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3747; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
3748; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
3749; AVX512DQ-NEXT:    vmovq %xmm5, %rsi
3750; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3751; AVX512DQ-NEXT:    movl $0, %edx
3752; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3753; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
3754; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3755; AVX512DQ-NEXT:    vpextrq $1, %xmm3, %rdx
3756; AVX512DQ-NEXT:    vpextrq $1, %xmm1, %rsi
3757; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3758; AVX512DQ-NEXT:    movl $0, %edx
3759; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3760; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
3761; AVX512DQ-NEXT:    vmovq %xmm3, %rdx
3762; AVX512DQ-NEXT:    vmovq %xmm1, %rsi
3763; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3764; AVX512DQ-NEXT:    cmovgq %rcx, %rax
3765; AVX512DQ-NEXT:    vmovq %rax, %xmm1
3766; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
3767; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
3768; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
3769; AVX512DQ-NEXT:    vpmovqd %zmm1, %ymm1
3770; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm1, %zmm0, %zmm0
3771; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
3772; AVX512DQ-NEXT:    retq
3773;
3774; AVX512BW-LABEL: test_cmp_v16i64:
3775; AVX512BW:       # BB#0:
3776; AVX512BW-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
3777; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rcx
3778; AVX512BW-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
3779; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rdx
3780; AVX512BW-NEXT:    xorl %eax, %eax
3781; AVX512BW-NEXT:    cmpq %rcx, %rdx
3782; AVX512BW-NEXT:    movq $-1, %rcx
3783; AVX512BW-NEXT:    movl $0, %edx
3784; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3785; AVX512BW-NEXT:    vmovq %rdx, %xmm6
3786; AVX512BW-NEXT:    vmovq %xmm4, %rdx
3787; AVX512BW-NEXT:    vmovq %xmm5, %rsi
3788; AVX512BW-NEXT:    cmpq %rdx, %rsi
3789; AVX512BW-NEXT:    movl $0, %edx
3790; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3791; AVX512BW-NEXT:    vmovq %rdx, %xmm4
3792; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3793; AVX512BW-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
3794; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rdx
3795; AVX512BW-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
3796; AVX512BW-NEXT:    vpextrq $1, %xmm6, %rsi
3797; AVX512BW-NEXT:    cmpq %rdx, %rsi
3798; AVX512BW-NEXT:    movl $0, %edx
3799; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3800; AVX512BW-NEXT:    vmovq %rdx, %xmm7
3801; AVX512BW-NEXT:    vmovq %xmm5, %rdx
3802; AVX512BW-NEXT:    vmovq %xmm6, %rsi
3803; AVX512BW-NEXT:    cmpq %rdx, %rsi
3804; AVX512BW-NEXT:    movl $0, %edx
3805; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3806; AVX512BW-NEXT:    vmovq %rdx, %xmm5
3807; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3808; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
3809; AVX512BW-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
3810; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rdx
3811; AVX512BW-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
3812; AVX512BW-NEXT:    vpextrq $1, %xmm6, %rsi
3813; AVX512BW-NEXT:    cmpq %rdx, %rsi
3814; AVX512BW-NEXT:    movl $0, %edx
3815; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3816; AVX512BW-NEXT:    vmovq %rdx, %xmm7
3817; AVX512BW-NEXT:    vmovq %xmm5, %rdx
3818; AVX512BW-NEXT:    vmovq %xmm6, %rsi
3819; AVX512BW-NEXT:    cmpq %rdx, %rsi
3820; AVX512BW-NEXT:    movl $0, %edx
3821; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3822; AVX512BW-NEXT:    vmovq %rdx, %xmm5
3823; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3824; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rdx
3825; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rsi
3826; AVX512BW-NEXT:    cmpq %rdx, %rsi
3827; AVX512BW-NEXT:    movl $0, %edx
3828; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3829; AVX512BW-NEXT:    vmovq %rdx, %xmm6
3830; AVX512BW-NEXT:    vmovq %xmm2, %rdx
3831; AVX512BW-NEXT:    vmovq %xmm0, %rsi
3832; AVX512BW-NEXT:    cmpq %rdx, %rsi
3833; AVX512BW-NEXT:    movl $0, %edx
3834; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3835; AVX512BW-NEXT:    vmovq %rdx, %xmm0
3836; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
3837; AVX512BW-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
3838; AVX512BW-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
3839; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
3840; AVX512BW-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
3841; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rdx
3842; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
3843; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
3844; AVX512BW-NEXT:    cmpq %rdx, %rsi
3845; AVX512BW-NEXT:    movl $0, %edx
3846; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3847; AVX512BW-NEXT:    vmovq %rdx, %xmm5
3848; AVX512BW-NEXT:    vmovq %xmm2, %rdx
3849; AVX512BW-NEXT:    vmovq %xmm4, %rsi
3850; AVX512BW-NEXT:    cmpq %rdx, %rsi
3851; AVX512BW-NEXT:    movl $0, %edx
3852; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3853; AVX512BW-NEXT:    vmovq %rdx, %xmm2
3854; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
3855; AVX512BW-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
3856; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
3857; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
3858; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rsi
3859; AVX512BW-NEXT:    cmpq %rdx, %rsi
3860; AVX512BW-NEXT:    movl $0, %edx
3861; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3862; AVX512BW-NEXT:    vmovq %rdx, %xmm6
3863; AVX512BW-NEXT:    vmovq %xmm4, %rdx
3864; AVX512BW-NEXT:    vmovq %xmm5, %rsi
3865; AVX512BW-NEXT:    cmpq %rdx, %rsi
3866; AVX512BW-NEXT:    movl $0, %edx
3867; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3868; AVX512BW-NEXT:    vmovq %rdx, %xmm4
3869; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3870; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
3871; AVX512BW-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
3872; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
3873; AVX512BW-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
3874; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rsi
3875; AVX512BW-NEXT:    cmpq %rdx, %rsi
3876; AVX512BW-NEXT:    movl $0, %edx
3877; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3878; AVX512BW-NEXT:    vmovq %rdx, %xmm6
3879; AVX512BW-NEXT:    vmovq %xmm4, %rdx
3880; AVX512BW-NEXT:    vmovq %xmm5, %rsi
3881; AVX512BW-NEXT:    cmpq %rdx, %rsi
3882; AVX512BW-NEXT:    movl $0, %edx
3883; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3884; AVX512BW-NEXT:    vmovq %rdx, %xmm4
3885; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3886; AVX512BW-NEXT:    vpextrq $1, %xmm3, %rdx
3887; AVX512BW-NEXT:    vpextrq $1, %xmm1, %rsi
3888; AVX512BW-NEXT:    cmpq %rdx, %rsi
3889; AVX512BW-NEXT:    movl $0, %edx
3890; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3891; AVX512BW-NEXT:    vmovq %rdx, %xmm5
3892; AVX512BW-NEXT:    vmovq %xmm3, %rdx
3893; AVX512BW-NEXT:    vmovq %xmm1, %rsi
3894; AVX512BW-NEXT:    cmpq %rdx, %rsi
3895; AVX512BW-NEXT:    cmovgq %rcx, %rax
3896; AVX512BW-NEXT:    vmovq %rax, %xmm1
3897; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
3898; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
3899; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
3900; AVX512BW-NEXT:    vpmovqd %zmm1, %ymm1
3901; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3902; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0
3903; AVX512BW-NEXT:    retq
3904  %1 = icmp sgt <16 x i64> %a0, %a1
3905  ret <16 x i1> %1
3906}
3907
3908define <32 x i1> @test_cmp_v32i32(<32 x i32> %a0, <32 x i32> %a1) nounwind {
3909; SSE2-LABEL: test_cmp_v32i32:
3910; SSE2:       # BB#0:
3911; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
3912; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
3913; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
3914; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
3915; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
3916; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
3917; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
3918; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
3919; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
3920; SSE2-NEXT:    psllw $15, %xmm2
3921; SSE2-NEXT:    psraw $15, %xmm2
3922; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
3923; SSE2-NEXT:    pand %xmm3, %xmm2
3924; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
3925; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
3926; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
3927; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3928; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
3929; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
3930; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
3931; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
3932; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3933; SSE2-NEXT:    psllw $15, %xmm0
3934; SSE2-NEXT:    psraw $15, %xmm0
3935; SSE2-NEXT:    pand %xmm3, %xmm0
3936; SSE2-NEXT:    packuswb %xmm2, %xmm0
3937; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
3938; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm7[0,2,2,3,4,5,6,7]
3939; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
3940; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3941; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
3942; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm6[0,2,2,3,4,5,6,7]
3943; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
3944; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
3945; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
3946; SSE2-NEXT:    psllw $15, %xmm2
3947; SSE2-NEXT:    psraw $15, %xmm2
3948; SSE2-NEXT:    pand %xmm3, %xmm2
3949; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
3950; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm5[0,2,2,3,4,5,6,7]
3951; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
3952; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3953; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
3954; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,2,2,3,4,5,6,7]
3955; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
3956; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
3957; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm1[0]
3958; SSE2-NEXT:    psllw $15, %xmm4
3959; SSE2-NEXT:    psraw $15, %xmm4
3960; SSE2-NEXT:    pand %xmm3, %xmm4
3961; SSE2-NEXT:    packuswb %xmm2, %xmm4
3962; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
3963; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3964; SSE2-NEXT:    andb $1, %al
3965; SSE2-NEXT:    movb %al, 2(%rdi)
3966; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
3967; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3968; SSE2-NEXT:    andb $1, %al
3969; SSE2-NEXT:    movb %al, (%rdi)
3970; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3971; SSE2-NEXT:    andb $1, %al
3972; SSE2-NEXT:    movb %al, 2(%rdi)
3973; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3974; SSE2-NEXT:    andb $1, %al
3975; SSE2-NEXT:    movb %al, (%rdi)
3976; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3977; SSE2-NEXT:    andb $1, %al
3978; SSE2-NEXT:    movb %al, 2(%rdi)
3979; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3980; SSE2-NEXT:    andb $1, %al
3981; SSE2-NEXT:    movb %al, (%rdi)
3982; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3983; SSE2-NEXT:    andb $1, %al
3984; SSE2-NEXT:    movb %al, 2(%rdi)
3985; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3986; SSE2-NEXT:    andb $1, %al
3987; SSE2-NEXT:    movb %al, (%rdi)
3988; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3989; SSE2-NEXT:    andb $1, %al
3990; SSE2-NEXT:    movb %al, 2(%rdi)
3991; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3992; SSE2-NEXT:    andb $1, %al
3993; SSE2-NEXT:    movb %al, (%rdi)
3994; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3995; SSE2-NEXT:    andb $1, %al
3996; SSE2-NEXT:    movb %al, 2(%rdi)
3997; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3998; SSE2-NEXT:    andb $1, %al
3999; SSE2-NEXT:    movb %al, (%rdi)
4000; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4001; SSE2-NEXT:    andb $1, %al
4002; SSE2-NEXT:    movb %al, 2(%rdi)
4003; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4004; SSE2-NEXT:    andb $1, %al
4005; SSE2-NEXT:    movb %al, (%rdi)
4006; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4007; SSE2-NEXT:    andb $1, %al
4008; SSE2-NEXT:    movb %al, 2(%rdi)
4009; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4010; SSE2-NEXT:    andb $1, %al
4011; SSE2-NEXT:    movb %al, (%rdi)
4012; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4013; SSE2-NEXT:    andb $1, %al
4014; SSE2-NEXT:    movb %al, 2(%rdi)
4015; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4016; SSE2-NEXT:    andb $1, %al
4017; SSE2-NEXT:    movb %al, (%rdi)
4018; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4019; SSE2-NEXT:    andb $1, %al
4020; SSE2-NEXT:    movb %al, 2(%rdi)
4021; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4022; SSE2-NEXT:    andb $1, %al
4023; SSE2-NEXT:    movb %al, (%rdi)
4024; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4025; SSE2-NEXT:    andb $1, %al
4026; SSE2-NEXT:    movb %al, 2(%rdi)
4027; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4028; SSE2-NEXT:    andb $1, %al
4029; SSE2-NEXT:    movb %al, (%rdi)
4030; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4031; SSE2-NEXT:    andb $1, %al
4032; SSE2-NEXT:    movb %al, 2(%rdi)
4033; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4034; SSE2-NEXT:    andb $1, %al
4035; SSE2-NEXT:    movb %al, (%rdi)
4036; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4037; SSE2-NEXT:    andb $1, %al
4038; SSE2-NEXT:    movb %al, 2(%rdi)
4039; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4040; SSE2-NEXT:    andb $1, %al
4041; SSE2-NEXT:    movb %al, (%rdi)
4042; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4043; SSE2-NEXT:    andb $1, %al
4044; SSE2-NEXT:    movb %al, 2(%rdi)
4045; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4046; SSE2-NEXT:    andb $1, %al
4047; SSE2-NEXT:    movb %al, (%rdi)
4048; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4049; SSE2-NEXT:    andb $1, %al
4050; SSE2-NEXT:    movb %al, 2(%rdi)
4051; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4052; SSE2-NEXT:    andb $1, %al
4053; SSE2-NEXT:    movb %al, (%rdi)
4054; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4055; SSE2-NEXT:    andb $1, %al
4056; SSE2-NEXT:    movb %al, 2(%rdi)
4057; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4058; SSE2-NEXT:    andb $1, %al
4059; SSE2-NEXT:    movb %al, (%rdi)
4060; SSE2-NEXT:    movq %rdi, %rax
4061; SSE2-NEXT:    retq
4062;
4063; SSE42-LABEL: test_cmp_v32i32:
4064; SSE42:       # BB#0:
4065; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
4066; SSE42-NEXT:    movdqa {{.*#+}} xmm8 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
4067; SSE42-NEXT:    pshufb %xmm8, %xmm1
4068; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
4069; SSE42-NEXT:    pshufb %xmm8, %xmm0
4070; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4071; SSE42-NEXT:    psllw $15, %xmm0
4072; SSE42-NEXT:    psraw $15, %xmm0
4073; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
4074; SSE42-NEXT:    pshufb %xmm8, %xmm3
4075; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
4076; SSE42-NEXT:    pshufb %xmm8, %xmm2
4077; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
4078; SSE42-NEXT:    psllw $15, %xmm2
4079; SSE42-NEXT:    psraw $15, %xmm2
4080; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
4081; SSE42-NEXT:    pshufb %xmm8, %xmm5
4082; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
4083; SSE42-NEXT:    pshufb %xmm8, %xmm4
4084; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
4085; SSE42-NEXT:    psllw $15, %xmm4
4086; SSE42-NEXT:    psraw $15, %xmm4
4087; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
4088; SSE42-NEXT:    pshufb %xmm8, %xmm7
4089; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
4090; SSE42-NEXT:    pshufb %xmm8, %xmm6
4091; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]
4092; SSE42-NEXT:    psllw $15, %xmm6
4093; SSE42-NEXT:    psraw $15, %xmm6
4094; SSE42-NEXT:    pextrb $14, %xmm6, %eax
4095; SSE42-NEXT:    andb $1, %al
4096; SSE42-NEXT:    movb %al, 2(%rdi)
4097; SSE42-NEXT:    pextrb $12, %xmm6, %eax
4098; SSE42-NEXT:    andb $1, %al
4099; SSE42-NEXT:    movb %al, 2(%rdi)
4100; SSE42-NEXT:    pextrb $10, %xmm6, %eax
4101; SSE42-NEXT:    andb $1, %al
4102; SSE42-NEXT:    movb %al, 2(%rdi)
4103; SSE42-NEXT:    pextrb $8, %xmm6, %eax
4104; SSE42-NEXT:    andb $1, %al
4105; SSE42-NEXT:    movb %al, 2(%rdi)
4106; SSE42-NEXT:    pextrb $6, %xmm6, %eax
4107; SSE42-NEXT:    andb $1, %al
4108; SSE42-NEXT:    movb %al, 2(%rdi)
4109; SSE42-NEXT:    pextrb $4, %xmm6, %eax
4110; SSE42-NEXT:    andb $1, %al
4111; SSE42-NEXT:    movb %al, 2(%rdi)
4112; SSE42-NEXT:    pextrb $2, %xmm6, %eax
4113; SSE42-NEXT:    andb $1, %al
4114; SSE42-NEXT:    movb %al, 2(%rdi)
4115; SSE42-NEXT:    pextrb $0, %xmm6, %eax
4116; SSE42-NEXT:    andb $1, %al
4117; SSE42-NEXT:    movb %al, 2(%rdi)
4118; SSE42-NEXT:    pextrb $14, %xmm4, %eax
4119; SSE42-NEXT:    andb $1, %al
4120; SSE42-NEXT:    movb %al, 2(%rdi)
4121; SSE42-NEXT:    pextrb $12, %xmm4, %eax
4122; SSE42-NEXT:    andb $1, %al
4123; SSE42-NEXT:    movb %al, 2(%rdi)
4124; SSE42-NEXT:    pextrb $10, %xmm4, %eax
4125; SSE42-NEXT:    andb $1, %al
4126; SSE42-NEXT:    movb %al, 2(%rdi)
4127; SSE42-NEXT:    pextrb $8, %xmm4, %eax
4128; SSE42-NEXT:    andb $1, %al
4129; SSE42-NEXT:    movb %al, 2(%rdi)
4130; SSE42-NEXT:    pextrb $6, %xmm4, %eax
4131; SSE42-NEXT:    andb $1, %al
4132; SSE42-NEXT:    movb %al, 2(%rdi)
4133; SSE42-NEXT:    pextrb $4, %xmm4, %eax
4134; SSE42-NEXT:    andb $1, %al
4135; SSE42-NEXT:    movb %al, 2(%rdi)
4136; SSE42-NEXT:    pextrb $2, %xmm4, %eax
4137; SSE42-NEXT:    andb $1, %al
4138; SSE42-NEXT:    movb %al, 2(%rdi)
4139; SSE42-NEXT:    pextrb $0, %xmm4, %eax
4140; SSE42-NEXT:    andb $1, %al
4141; SSE42-NEXT:    movb %al, 2(%rdi)
4142; SSE42-NEXT:    pextrb $14, %xmm2, %eax
4143; SSE42-NEXT:    andb $1, %al
4144; SSE42-NEXT:    movb %al, (%rdi)
4145; SSE42-NEXT:    pextrb $12, %xmm2, %eax
4146; SSE42-NEXT:    andb $1, %al
4147; SSE42-NEXT:    movb %al, (%rdi)
4148; SSE42-NEXT:    pextrb $10, %xmm2, %eax
4149; SSE42-NEXT:    andb $1, %al
4150; SSE42-NEXT:    movb %al, (%rdi)
4151; SSE42-NEXT:    pextrb $8, %xmm2, %eax
4152; SSE42-NEXT:    andb $1, %al
4153; SSE42-NEXT:    movb %al, (%rdi)
4154; SSE42-NEXT:    pextrb $6, %xmm2, %eax
4155; SSE42-NEXT:    andb $1, %al
4156; SSE42-NEXT:    movb %al, (%rdi)
4157; SSE42-NEXT:    pextrb $4, %xmm2, %eax
4158; SSE42-NEXT:    andb $1, %al
4159; SSE42-NEXT:    movb %al, (%rdi)
4160; SSE42-NEXT:    pextrb $2, %xmm2, %eax
4161; SSE42-NEXT:    andb $1, %al
4162; SSE42-NEXT:    movb %al, (%rdi)
4163; SSE42-NEXT:    pextrb $0, %xmm2, %eax
4164; SSE42-NEXT:    andb $1, %al
4165; SSE42-NEXT:    movb %al, (%rdi)
4166; SSE42-NEXT:    pextrb $14, %xmm0, %eax
4167; SSE42-NEXT:    andb $1, %al
4168; SSE42-NEXT:    movb %al, (%rdi)
4169; SSE42-NEXT:    pextrb $12, %xmm0, %eax
4170; SSE42-NEXT:    andb $1, %al
4171; SSE42-NEXT:    movb %al, (%rdi)
4172; SSE42-NEXT:    pextrb $10, %xmm0, %eax
4173; SSE42-NEXT:    andb $1, %al
4174; SSE42-NEXT:    movb %al, (%rdi)
4175; SSE42-NEXT:    pextrb $8, %xmm0, %eax
4176; SSE42-NEXT:    andb $1, %al
4177; SSE42-NEXT:    movb %al, (%rdi)
4178; SSE42-NEXT:    pextrb $6, %xmm0, %eax
4179; SSE42-NEXT:    andb $1, %al
4180; SSE42-NEXT:    movb %al, (%rdi)
4181; SSE42-NEXT:    pextrb $4, %xmm0, %eax
4182; SSE42-NEXT:    andb $1, %al
4183; SSE42-NEXT:    movb %al, (%rdi)
4184; SSE42-NEXT:    pextrb $2, %xmm0, %eax
4185; SSE42-NEXT:    andb $1, %al
4186; SSE42-NEXT:    movb %al, (%rdi)
4187; SSE42-NEXT:    pextrb $0, %xmm0, %eax
4188; SSE42-NEXT:    andb $1, %al
4189; SSE42-NEXT:    movb %al, (%rdi)
4190; SSE42-NEXT:    movq %rdi, %rax
4191; SSE42-NEXT:    retq
4192;
4193; AVX1-LABEL: test_cmp_v32i32:
4194; AVX1:       # BB#0:
4195; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm8
4196; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm9
4197; AVX1-NEXT:    vpcmpgtd %xmm8, %xmm9, %xmm8
4198; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm3, %xmm3
4199; AVX1-NEXT:    vpacksswb %xmm8, %xmm3, %xmm8
4200; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
4201; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
4202; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm3, %xmm3
4203; AVX1-NEXT:    vpcmpgtd %xmm6, %xmm2, %xmm2
4204; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
4205; AVX1-NEXT:    vpacksswb %xmm8, %xmm2, %xmm2
4206; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
4207; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
4208; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm6, %xmm3
4209; AVX1-NEXT:    vpcmpgtd %xmm5, %xmm1, %xmm1
4210; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
4211; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm3
4212; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4213; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm5, %xmm3
4214; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm0, %xmm0
4215; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
4216; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
4217; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
4218; AVX1-NEXT:    retq
4219;
4220; AVX2-LABEL: test_cmp_v32i32:
4221; AVX2:       # BB#0:
4222; AVX2-NEXT:    vpcmpgtd %ymm7, %ymm3, %ymm3
4223; AVX2-NEXT:    vpcmpgtd %ymm6, %ymm2, %ymm2
4224; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
4225; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
4226; AVX2-NEXT:    vpcmpgtd %ymm5, %ymm1, %ymm1
4227; AVX2-NEXT:    vpcmpgtd %ymm4, %ymm0, %ymm0
4228; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
4229; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
4230; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
4231; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
4232; AVX2-NEXT:    retq
4233;
4234; AVX512F-LABEL: test_cmp_v32i32:
4235; AVX512F:       # BB#0:
4236; AVX512F-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
4237; AVX512F-NEXT:    vpextrd $1, %xmm4, %ecx
4238; AVX512F-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
4239; AVX512F-NEXT:    vpextrd $1, %xmm5, %edx
4240; AVX512F-NEXT:    xorl %eax, %eax
4241; AVX512F-NEXT:    cmpl %ecx, %edx
4242; AVX512F-NEXT:    movl $-1, %ecx
4243; AVX512F-NEXT:    movl $0, %edx
4244; AVX512F-NEXT:    cmovgl %ecx, %edx
4245; AVX512F-NEXT:    vmovd %xmm4, %esi
4246; AVX512F-NEXT:    vmovd %xmm5, %edi
4247; AVX512F-NEXT:    cmpl %esi, %edi
4248; AVX512F-NEXT:    movl $0, %esi
4249; AVX512F-NEXT:    cmovgl %ecx, %esi
4250; AVX512F-NEXT:    vmovd %esi, %xmm6
4251; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4252; AVX512F-NEXT:    vpextrd $2, %xmm4, %edx
4253; AVX512F-NEXT:    vpextrd $2, %xmm5, %esi
4254; AVX512F-NEXT:    cmpl %edx, %esi
4255; AVX512F-NEXT:    movl $0, %edx
4256; AVX512F-NEXT:    cmovgl %ecx, %edx
4257; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4258; AVX512F-NEXT:    vpextrd $3, %xmm4, %edx
4259; AVX512F-NEXT:    vpextrd $3, %xmm5, %esi
4260; AVX512F-NEXT:    cmpl %edx, %esi
4261; AVX512F-NEXT:    movl $0, %edx
4262; AVX512F-NEXT:    cmovgl %ecx, %edx
4263; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4264; AVX512F-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
4265; AVX512F-NEXT:    vpextrd $1, %xmm5, %edx
4266; AVX512F-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
4267; AVX512F-NEXT:    vpextrd $1, %xmm6, %esi
4268; AVX512F-NEXT:    cmpl %edx, %esi
4269; AVX512F-NEXT:    movl $0, %edx
4270; AVX512F-NEXT:    cmovgl %ecx, %edx
4271; AVX512F-NEXT:    vmovd %xmm5, %esi
4272; AVX512F-NEXT:    vmovd %xmm6, %edi
4273; AVX512F-NEXT:    cmpl %esi, %edi
4274; AVX512F-NEXT:    movl $0, %esi
4275; AVX512F-NEXT:    cmovgl %ecx, %esi
4276; AVX512F-NEXT:    vmovd %esi, %xmm7
4277; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4278; AVX512F-NEXT:    vpextrd $2, %xmm5, %edx
4279; AVX512F-NEXT:    vpextrd $2, %xmm6, %esi
4280; AVX512F-NEXT:    cmpl %edx, %esi
4281; AVX512F-NEXT:    movl $0, %edx
4282; AVX512F-NEXT:    cmovgl %ecx, %edx
4283; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4284; AVX512F-NEXT:    vpextrd $3, %xmm5, %edx
4285; AVX512F-NEXT:    vpextrd $3, %xmm6, %esi
4286; AVX512F-NEXT:    cmpl %edx, %esi
4287; AVX512F-NEXT:    movl $0, %edx
4288; AVX512F-NEXT:    cmovgl %ecx, %edx
4289; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4290; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
4291; AVX512F-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
4292; AVX512F-NEXT:    vpextrd $1, %xmm5, %edx
4293; AVX512F-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
4294; AVX512F-NEXT:    vpextrd $1, %xmm6, %esi
4295; AVX512F-NEXT:    cmpl %edx, %esi
4296; AVX512F-NEXT:    movl $0, %edx
4297; AVX512F-NEXT:    cmovgl %ecx, %edx
4298; AVX512F-NEXT:    vmovd %xmm5, %esi
4299; AVX512F-NEXT:    vmovd %xmm6, %edi
4300; AVX512F-NEXT:    cmpl %esi, %edi
4301; AVX512F-NEXT:    movl $0, %esi
4302; AVX512F-NEXT:    cmovgl %ecx, %esi
4303; AVX512F-NEXT:    vmovd %esi, %xmm7
4304; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4305; AVX512F-NEXT:    vpextrd $2, %xmm5, %edx
4306; AVX512F-NEXT:    vpextrd $2, %xmm6, %esi
4307; AVX512F-NEXT:    cmpl %edx, %esi
4308; AVX512F-NEXT:    movl $0, %edx
4309; AVX512F-NEXT:    cmovgl %ecx, %edx
4310; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4311; AVX512F-NEXT:    vpextrd $3, %xmm5, %edx
4312; AVX512F-NEXT:    vpextrd $3, %xmm6, %esi
4313; AVX512F-NEXT:    cmpl %edx, %esi
4314; AVX512F-NEXT:    movl $0, %edx
4315; AVX512F-NEXT:    cmovgl %ecx, %edx
4316; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4317; AVX512F-NEXT:    vpextrd $1, %xmm2, %edx
4318; AVX512F-NEXT:    vpextrd $1, %xmm0, %esi
4319; AVX512F-NEXT:    cmpl %edx, %esi
4320; AVX512F-NEXT:    movl $0, %edx
4321; AVX512F-NEXT:    cmovgl %ecx, %edx
4322; AVX512F-NEXT:    vmovd %xmm2, %esi
4323; AVX512F-NEXT:    vmovd %xmm0, %edi
4324; AVX512F-NEXT:    cmpl %esi, %edi
4325; AVX512F-NEXT:    movl $0, %esi
4326; AVX512F-NEXT:    cmovgl %ecx, %esi
4327; AVX512F-NEXT:    vmovd %esi, %xmm6
4328; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4329; AVX512F-NEXT:    vpextrd $2, %xmm2, %edx
4330; AVX512F-NEXT:    vpextrd $2, %xmm0, %esi
4331; AVX512F-NEXT:    cmpl %edx, %esi
4332; AVX512F-NEXT:    movl $0, %edx
4333; AVX512F-NEXT:    cmovgl %ecx, %edx
4334; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4335; AVX512F-NEXT:    vpextrd $3, %xmm2, %edx
4336; AVX512F-NEXT:    vpextrd $3, %xmm0, %esi
4337; AVX512F-NEXT:    cmpl %edx, %esi
4338; AVX512F-NEXT:    movl $0, %edx
4339; AVX512F-NEXT:    cmovgl %ecx, %edx
4340; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm0
4341; AVX512F-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
4342; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
4343; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
4344; AVX512F-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
4345; AVX512F-NEXT:    vpextrd $1, %xmm2, %edx
4346; AVX512F-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
4347; AVX512F-NEXT:    vpextrd $1, %xmm4, %esi
4348; AVX512F-NEXT:    cmpl %edx, %esi
4349; AVX512F-NEXT:    movl $0, %edx
4350; AVX512F-NEXT:    cmovgl %ecx, %edx
4351; AVX512F-NEXT:    vmovd %xmm2, %esi
4352; AVX512F-NEXT:    vmovd %xmm4, %edi
4353; AVX512F-NEXT:    cmpl %esi, %edi
4354; AVX512F-NEXT:    movl $0, %esi
4355; AVX512F-NEXT:    cmovgl %ecx, %esi
4356; AVX512F-NEXT:    vmovd %esi, %xmm5
4357; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4358; AVX512F-NEXT:    vpextrd $2, %xmm2, %edx
4359; AVX512F-NEXT:    vpextrd $2, %xmm4, %esi
4360; AVX512F-NEXT:    cmpl %edx, %esi
4361; AVX512F-NEXT:    movl $0, %edx
4362; AVX512F-NEXT:    cmovgl %ecx, %edx
4363; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4364; AVX512F-NEXT:    vpextrd $3, %xmm2, %edx
4365; AVX512F-NEXT:    vpextrd $3, %xmm4, %esi
4366; AVX512F-NEXT:    cmpl %edx, %esi
4367; AVX512F-NEXT:    movl $0, %edx
4368; AVX512F-NEXT:    cmovgl %ecx, %edx
4369; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm2
4370; AVX512F-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
4371; AVX512F-NEXT:    vpextrd $1, %xmm4, %edx
4372; AVX512F-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
4373; AVX512F-NEXT:    vpextrd $1, %xmm5, %esi
4374; AVX512F-NEXT:    cmpl %edx, %esi
4375; AVX512F-NEXT:    movl $0, %edx
4376; AVX512F-NEXT:    cmovgl %ecx, %edx
4377; AVX512F-NEXT:    vmovd %xmm4, %esi
4378; AVX512F-NEXT:    vmovd %xmm5, %edi
4379; AVX512F-NEXT:    cmpl %esi, %edi
4380; AVX512F-NEXT:    movl $0, %esi
4381; AVX512F-NEXT:    cmovgl %ecx, %esi
4382; AVX512F-NEXT:    vmovd %esi, %xmm6
4383; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4384; AVX512F-NEXT:    vpextrd $2, %xmm4, %edx
4385; AVX512F-NEXT:    vpextrd $2, %xmm5, %esi
4386; AVX512F-NEXT:    cmpl %edx, %esi
4387; AVX512F-NEXT:    movl $0, %edx
4388; AVX512F-NEXT:    cmovgl %ecx, %edx
4389; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4390; AVX512F-NEXT:    vpextrd $3, %xmm4, %edx
4391; AVX512F-NEXT:    vpextrd $3, %xmm5, %esi
4392; AVX512F-NEXT:    cmpl %edx, %esi
4393; AVX512F-NEXT:    movl $0, %edx
4394; AVX512F-NEXT:    cmovgl %ecx, %edx
4395; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4396; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
4397; AVX512F-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
4398; AVX512F-NEXT:    vpextrd $1, %xmm4, %edx
4399; AVX512F-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
4400; AVX512F-NEXT:    vpextrd $1, %xmm5, %esi
4401; AVX512F-NEXT:    cmpl %edx, %esi
4402; AVX512F-NEXT:    movl $0, %edx
4403; AVX512F-NEXT:    cmovgl %ecx, %edx
4404; AVX512F-NEXT:    vmovd %xmm4, %esi
4405; AVX512F-NEXT:    vmovd %xmm5, %edi
4406; AVX512F-NEXT:    cmpl %esi, %edi
4407; AVX512F-NEXT:    movl $0, %esi
4408; AVX512F-NEXT:    cmovgl %ecx, %esi
4409; AVX512F-NEXT:    vmovd %esi, %xmm6
4410; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4411; AVX512F-NEXT:    vpextrd $2, %xmm4, %edx
4412; AVX512F-NEXT:    vpextrd $2, %xmm5, %esi
4413; AVX512F-NEXT:    cmpl %edx, %esi
4414; AVX512F-NEXT:    movl $0, %edx
4415; AVX512F-NEXT:    cmovgl %ecx, %edx
4416; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4417; AVX512F-NEXT:    vpextrd $3, %xmm4, %edx
4418; AVX512F-NEXT:    vpextrd $3, %xmm5, %esi
4419; AVX512F-NEXT:    cmpl %edx, %esi
4420; AVX512F-NEXT:    movl $0, %edx
4421; AVX512F-NEXT:    cmovgl %ecx, %edx
4422; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4423; AVX512F-NEXT:    vpextrd $1, %xmm3, %edx
4424; AVX512F-NEXT:    vpextrd $1, %xmm1, %esi
4425; AVX512F-NEXT:    cmpl %edx, %esi
4426; AVX512F-NEXT:    movl $0, %edx
4427; AVX512F-NEXT:    cmovgl %ecx, %edx
4428; AVX512F-NEXT:    vmovd %xmm3, %esi
4429; AVX512F-NEXT:    vmovd %xmm1, %edi
4430; AVX512F-NEXT:    cmpl %esi, %edi
4431; AVX512F-NEXT:    movl $0, %esi
4432; AVX512F-NEXT:    cmovgl %ecx, %esi
4433; AVX512F-NEXT:    vmovd %esi, %xmm5
4434; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4435; AVX512F-NEXT:    vpextrd $2, %xmm3, %edx
4436; AVX512F-NEXT:    vpextrd $2, %xmm1, %esi
4437; AVX512F-NEXT:    cmpl %edx, %esi
4438; AVX512F-NEXT:    movl $0, %edx
4439; AVX512F-NEXT:    cmovgl %ecx, %edx
4440; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4441; AVX512F-NEXT:    vpextrd $3, %xmm3, %edx
4442; AVX512F-NEXT:    vpextrd $3, %xmm1, %esi
4443; AVX512F-NEXT:    cmpl %edx, %esi
4444; AVX512F-NEXT:    cmovgl %ecx, %eax
4445; AVX512F-NEXT:    vpinsrd $3, %eax, %xmm5, %xmm1
4446; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
4447; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
4448; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
4449; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4450; AVX512F-NEXT:    retq
4451;
4452; AVX512DQ-LABEL: test_cmp_v32i32:
4453; AVX512DQ:       # BB#0:
4454; AVX512DQ-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
4455; AVX512DQ-NEXT:    vpextrd $1, %xmm4, %ecx
4456; AVX512DQ-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
4457; AVX512DQ-NEXT:    vpextrd $1, %xmm5, %edx
4458; AVX512DQ-NEXT:    xorl %eax, %eax
4459; AVX512DQ-NEXT:    cmpl %ecx, %edx
4460; AVX512DQ-NEXT:    movl $-1, %ecx
4461; AVX512DQ-NEXT:    movl $0, %edx
4462; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4463; AVX512DQ-NEXT:    vmovd %xmm4, %esi
4464; AVX512DQ-NEXT:    vmovd %xmm5, %edi
4465; AVX512DQ-NEXT:    cmpl %esi, %edi
4466; AVX512DQ-NEXT:    movl $0, %esi
4467; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4468; AVX512DQ-NEXT:    vmovd %esi, %xmm6
4469; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4470; AVX512DQ-NEXT:    vpextrd $2, %xmm4, %edx
4471; AVX512DQ-NEXT:    vpextrd $2, %xmm5, %esi
4472; AVX512DQ-NEXT:    cmpl %edx, %esi
4473; AVX512DQ-NEXT:    movl $0, %edx
4474; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4475; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4476; AVX512DQ-NEXT:    vpextrd $3, %xmm4, %edx
4477; AVX512DQ-NEXT:    vpextrd $3, %xmm5, %esi
4478; AVX512DQ-NEXT:    cmpl %edx, %esi
4479; AVX512DQ-NEXT:    movl $0, %edx
4480; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4481; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4482; AVX512DQ-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
4483; AVX512DQ-NEXT:    vpextrd $1, %xmm5, %edx
4484; AVX512DQ-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
4485; AVX512DQ-NEXT:    vpextrd $1, %xmm6, %esi
4486; AVX512DQ-NEXT:    cmpl %edx, %esi
4487; AVX512DQ-NEXT:    movl $0, %edx
4488; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4489; AVX512DQ-NEXT:    vmovd %xmm5, %esi
4490; AVX512DQ-NEXT:    vmovd %xmm6, %edi
4491; AVX512DQ-NEXT:    cmpl %esi, %edi
4492; AVX512DQ-NEXT:    movl $0, %esi
4493; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4494; AVX512DQ-NEXT:    vmovd %esi, %xmm7
4495; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4496; AVX512DQ-NEXT:    vpextrd $2, %xmm5, %edx
4497; AVX512DQ-NEXT:    vpextrd $2, %xmm6, %esi
4498; AVX512DQ-NEXT:    cmpl %edx, %esi
4499; AVX512DQ-NEXT:    movl $0, %edx
4500; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4501; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4502; AVX512DQ-NEXT:    vpextrd $3, %xmm5, %edx
4503; AVX512DQ-NEXT:    vpextrd $3, %xmm6, %esi
4504; AVX512DQ-NEXT:    cmpl %edx, %esi
4505; AVX512DQ-NEXT:    movl $0, %edx
4506; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4507; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4508; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
4509; AVX512DQ-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
4510; AVX512DQ-NEXT:    vpextrd $1, %xmm5, %edx
4511; AVX512DQ-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
4512; AVX512DQ-NEXT:    vpextrd $1, %xmm6, %esi
4513; AVX512DQ-NEXT:    cmpl %edx, %esi
4514; AVX512DQ-NEXT:    movl $0, %edx
4515; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4516; AVX512DQ-NEXT:    vmovd %xmm5, %esi
4517; AVX512DQ-NEXT:    vmovd %xmm6, %edi
4518; AVX512DQ-NEXT:    cmpl %esi, %edi
4519; AVX512DQ-NEXT:    movl $0, %esi
4520; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4521; AVX512DQ-NEXT:    vmovd %esi, %xmm7
4522; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4523; AVX512DQ-NEXT:    vpextrd $2, %xmm5, %edx
4524; AVX512DQ-NEXT:    vpextrd $2, %xmm6, %esi
4525; AVX512DQ-NEXT:    cmpl %edx, %esi
4526; AVX512DQ-NEXT:    movl $0, %edx
4527; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4528; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4529; AVX512DQ-NEXT:    vpextrd $3, %xmm5, %edx
4530; AVX512DQ-NEXT:    vpextrd $3, %xmm6, %esi
4531; AVX512DQ-NEXT:    cmpl %edx, %esi
4532; AVX512DQ-NEXT:    movl $0, %edx
4533; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4534; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4535; AVX512DQ-NEXT:    vpextrd $1, %xmm2, %edx
4536; AVX512DQ-NEXT:    vpextrd $1, %xmm0, %esi
4537; AVX512DQ-NEXT:    cmpl %edx, %esi
4538; AVX512DQ-NEXT:    movl $0, %edx
4539; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4540; AVX512DQ-NEXT:    vmovd %xmm2, %esi
4541; AVX512DQ-NEXT:    vmovd %xmm0, %edi
4542; AVX512DQ-NEXT:    cmpl %esi, %edi
4543; AVX512DQ-NEXT:    movl $0, %esi
4544; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4545; AVX512DQ-NEXT:    vmovd %esi, %xmm6
4546; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4547; AVX512DQ-NEXT:    vpextrd $2, %xmm2, %edx
4548; AVX512DQ-NEXT:    vpextrd $2, %xmm0, %esi
4549; AVX512DQ-NEXT:    cmpl %edx, %esi
4550; AVX512DQ-NEXT:    movl $0, %edx
4551; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4552; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4553; AVX512DQ-NEXT:    vpextrd $3, %xmm2, %edx
4554; AVX512DQ-NEXT:    vpextrd $3, %xmm0, %esi
4555; AVX512DQ-NEXT:    cmpl %edx, %esi
4556; AVX512DQ-NEXT:    movl $0, %edx
4557; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4558; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm0
4559; AVX512DQ-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
4560; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm4, %zmm0, %zmm0
4561; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
4562; AVX512DQ-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
4563; AVX512DQ-NEXT:    vpextrd $1, %xmm2, %edx
4564; AVX512DQ-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
4565; AVX512DQ-NEXT:    vpextrd $1, %xmm4, %esi
4566; AVX512DQ-NEXT:    cmpl %edx, %esi
4567; AVX512DQ-NEXT:    movl $0, %edx
4568; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4569; AVX512DQ-NEXT:    vmovd %xmm2, %esi
4570; AVX512DQ-NEXT:    vmovd %xmm4, %edi
4571; AVX512DQ-NEXT:    cmpl %esi, %edi
4572; AVX512DQ-NEXT:    movl $0, %esi
4573; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4574; AVX512DQ-NEXT:    vmovd %esi, %xmm5
4575; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4576; AVX512DQ-NEXT:    vpextrd $2, %xmm2, %edx
4577; AVX512DQ-NEXT:    vpextrd $2, %xmm4, %esi
4578; AVX512DQ-NEXT:    cmpl %edx, %esi
4579; AVX512DQ-NEXT:    movl $0, %edx
4580; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4581; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4582; AVX512DQ-NEXT:    vpextrd $3, %xmm2, %edx
4583; AVX512DQ-NEXT:    vpextrd $3, %xmm4, %esi
4584; AVX512DQ-NEXT:    cmpl %edx, %esi
4585; AVX512DQ-NEXT:    movl $0, %edx
4586; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4587; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm2
4588; AVX512DQ-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
4589; AVX512DQ-NEXT:    vpextrd $1, %xmm4, %edx
4590; AVX512DQ-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
4591; AVX512DQ-NEXT:    vpextrd $1, %xmm5, %esi
4592; AVX512DQ-NEXT:    cmpl %edx, %esi
4593; AVX512DQ-NEXT:    movl $0, %edx
4594; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4595; AVX512DQ-NEXT:    vmovd %xmm4, %esi
4596; AVX512DQ-NEXT:    vmovd %xmm5, %edi
4597; AVX512DQ-NEXT:    cmpl %esi, %edi
4598; AVX512DQ-NEXT:    movl $0, %esi
4599; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4600; AVX512DQ-NEXT:    vmovd %esi, %xmm6
4601; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4602; AVX512DQ-NEXT:    vpextrd $2, %xmm4, %edx
4603; AVX512DQ-NEXT:    vpextrd $2, %xmm5, %esi
4604; AVX512DQ-NEXT:    cmpl %edx, %esi
4605; AVX512DQ-NEXT:    movl $0, %edx
4606; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4607; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4608; AVX512DQ-NEXT:    vpextrd $3, %xmm4, %edx
4609; AVX512DQ-NEXT:    vpextrd $3, %xmm5, %esi
4610; AVX512DQ-NEXT:    cmpl %edx, %esi
4611; AVX512DQ-NEXT:    movl $0, %edx
4612; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4613; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4614; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
4615; AVX512DQ-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
4616; AVX512DQ-NEXT:    vpextrd $1, %xmm4, %edx
4617; AVX512DQ-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
4618; AVX512DQ-NEXT:    vpextrd $1, %xmm5, %esi
4619; AVX512DQ-NEXT:    cmpl %edx, %esi
4620; AVX512DQ-NEXT:    movl $0, %edx
4621; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4622; AVX512DQ-NEXT:    vmovd %xmm4, %esi
4623; AVX512DQ-NEXT:    vmovd %xmm5, %edi
4624; AVX512DQ-NEXT:    cmpl %esi, %edi
4625; AVX512DQ-NEXT:    movl $0, %esi
4626; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4627; AVX512DQ-NEXT:    vmovd %esi, %xmm6
4628; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4629; AVX512DQ-NEXT:    vpextrd $2, %xmm4, %edx
4630; AVX512DQ-NEXT:    vpextrd $2, %xmm5, %esi
4631; AVX512DQ-NEXT:    cmpl %edx, %esi
4632; AVX512DQ-NEXT:    movl $0, %edx
4633; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4634; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4635; AVX512DQ-NEXT:    vpextrd $3, %xmm4, %edx
4636; AVX512DQ-NEXT:    vpextrd $3, %xmm5, %esi
4637; AVX512DQ-NEXT:    cmpl %edx, %esi
4638; AVX512DQ-NEXT:    movl $0, %edx
4639; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4640; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4641; AVX512DQ-NEXT:    vpextrd $1, %xmm3, %edx
4642; AVX512DQ-NEXT:    vpextrd $1, %xmm1, %esi
4643; AVX512DQ-NEXT:    cmpl %edx, %esi
4644; AVX512DQ-NEXT:    movl $0, %edx
4645; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4646; AVX512DQ-NEXT:    vmovd %xmm3, %esi
4647; AVX512DQ-NEXT:    vmovd %xmm1, %edi
4648; AVX512DQ-NEXT:    cmpl %esi, %edi
4649; AVX512DQ-NEXT:    movl $0, %esi
4650; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4651; AVX512DQ-NEXT:    vmovd %esi, %xmm5
4652; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4653; AVX512DQ-NEXT:    vpextrd $2, %xmm3, %edx
4654; AVX512DQ-NEXT:    vpextrd $2, %xmm1, %esi
4655; AVX512DQ-NEXT:    cmpl %edx, %esi
4656; AVX512DQ-NEXT:    movl $0, %edx
4657; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4658; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4659; AVX512DQ-NEXT:    vpextrd $3, %xmm3, %edx
4660; AVX512DQ-NEXT:    vpextrd $3, %xmm1, %esi
4661; AVX512DQ-NEXT:    cmpl %edx, %esi
4662; AVX512DQ-NEXT:    cmovgl %ecx, %eax
4663; AVX512DQ-NEXT:    vpinsrd $3, %eax, %xmm5, %xmm1
4664; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
4665; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm2, %zmm1, %zmm1
4666; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm1
4667; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4668; AVX512DQ-NEXT:    retq
4669;
4670; AVX512BW-LABEL: test_cmp_v32i32:
4671; AVX512BW:       # BB#0:
4672; AVX512BW-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
4673; AVX512BW-NEXT:    vpextrd $1, %xmm4, %ecx
4674; AVX512BW-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
4675; AVX512BW-NEXT:    vpextrd $1, %xmm5, %edx
4676; AVX512BW-NEXT:    xorl %eax, %eax
4677; AVX512BW-NEXT:    cmpl %ecx, %edx
4678; AVX512BW-NEXT:    movl $-1, %ecx
4679; AVX512BW-NEXT:    movl $0, %edx
4680; AVX512BW-NEXT:    cmovgl %ecx, %edx
4681; AVX512BW-NEXT:    vmovd %xmm4, %esi
4682; AVX512BW-NEXT:    vmovd %xmm5, %edi
4683; AVX512BW-NEXT:    cmpl %esi, %edi
4684; AVX512BW-NEXT:    movl $0, %esi
4685; AVX512BW-NEXT:    cmovgl %ecx, %esi
4686; AVX512BW-NEXT:    vmovd %esi, %xmm6
4687; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4688; AVX512BW-NEXT:    vpextrd $2, %xmm4, %edx
4689; AVX512BW-NEXT:    vpextrd $2, %xmm5, %esi
4690; AVX512BW-NEXT:    cmpl %edx, %esi
4691; AVX512BW-NEXT:    movl $0, %edx
4692; AVX512BW-NEXT:    cmovgl %ecx, %edx
4693; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4694; AVX512BW-NEXT:    vpextrd $3, %xmm4, %edx
4695; AVX512BW-NEXT:    vpextrd $3, %xmm5, %esi
4696; AVX512BW-NEXT:    cmpl %edx, %esi
4697; AVX512BW-NEXT:    movl $0, %edx
4698; AVX512BW-NEXT:    cmovgl %ecx, %edx
4699; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4700; AVX512BW-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
4701; AVX512BW-NEXT:    vpextrd $1, %xmm5, %edx
4702; AVX512BW-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
4703; AVX512BW-NEXT:    vpextrd $1, %xmm6, %esi
4704; AVX512BW-NEXT:    cmpl %edx, %esi
4705; AVX512BW-NEXT:    movl $0, %edx
4706; AVX512BW-NEXT:    cmovgl %ecx, %edx
4707; AVX512BW-NEXT:    vmovd %xmm5, %esi
4708; AVX512BW-NEXT:    vmovd %xmm6, %edi
4709; AVX512BW-NEXT:    cmpl %esi, %edi
4710; AVX512BW-NEXT:    movl $0, %esi
4711; AVX512BW-NEXT:    cmovgl %ecx, %esi
4712; AVX512BW-NEXT:    vmovd %esi, %xmm7
4713; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4714; AVX512BW-NEXT:    vpextrd $2, %xmm5, %edx
4715; AVX512BW-NEXT:    vpextrd $2, %xmm6, %esi
4716; AVX512BW-NEXT:    cmpl %edx, %esi
4717; AVX512BW-NEXT:    movl $0, %edx
4718; AVX512BW-NEXT:    cmovgl %ecx, %edx
4719; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4720; AVX512BW-NEXT:    vpextrd $3, %xmm5, %edx
4721; AVX512BW-NEXT:    vpextrd $3, %xmm6, %esi
4722; AVX512BW-NEXT:    cmpl %edx, %esi
4723; AVX512BW-NEXT:    movl $0, %edx
4724; AVX512BW-NEXT:    cmovgl %ecx, %edx
4725; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4726; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
4727; AVX512BW-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
4728; AVX512BW-NEXT:    vpextrd $1, %xmm5, %edx
4729; AVX512BW-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
4730; AVX512BW-NEXT:    vpextrd $1, %xmm6, %esi
4731; AVX512BW-NEXT:    cmpl %edx, %esi
4732; AVX512BW-NEXT:    movl $0, %edx
4733; AVX512BW-NEXT:    cmovgl %ecx, %edx
4734; AVX512BW-NEXT:    vmovd %xmm5, %esi
4735; AVX512BW-NEXT:    vmovd %xmm6, %edi
4736; AVX512BW-NEXT:    cmpl %esi, %edi
4737; AVX512BW-NEXT:    movl $0, %esi
4738; AVX512BW-NEXT:    cmovgl %ecx, %esi
4739; AVX512BW-NEXT:    vmovd %esi, %xmm7
4740; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4741; AVX512BW-NEXT:    vpextrd $2, %xmm5, %edx
4742; AVX512BW-NEXT:    vpextrd $2, %xmm6, %esi
4743; AVX512BW-NEXT:    cmpl %edx, %esi
4744; AVX512BW-NEXT:    movl $0, %edx
4745; AVX512BW-NEXT:    cmovgl %ecx, %edx
4746; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4747; AVX512BW-NEXT:    vpextrd $3, %xmm5, %edx
4748; AVX512BW-NEXT:    vpextrd $3, %xmm6, %esi
4749; AVX512BW-NEXT:    cmpl %edx, %esi
4750; AVX512BW-NEXT:    movl $0, %edx
4751; AVX512BW-NEXT:    cmovgl %ecx, %edx
4752; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4753; AVX512BW-NEXT:    vpextrd $1, %xmm2, %edx
4754; AVX512BW-NEXT:    vpextrd $1, %xmm0, %esi
4755; AVX512BW-NEXT:    cmpl %edx, %esi
4756; AVX512BW-NEXT:    movl $0, %edx
4757; AVX512BW-NEXT:    cmovgl %ecx, %edx
4758; AVX512BW-NEXT:    vmovd %xmm2, %esi
4759; AVX512BW-NEXT:    vmovd %xmm0, %edi
4760; AVX512BW-NEXT:    cmpl %esi, %edi
4761; AVX512BW-NEXT:    movl $0, %esi
4762; AVX512BW-NEXT:    cmovgl %ecx, %esi
4763; AVX512BW-NEXT:    vmovd %esi, %xmm6
4764; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4765; AVX512BW-NEXT:    vpextrd $2, %xmm2, %edx
4766; AVX512BW-NEXT:    vpextrd $2, %xmm0, %esi
4767; AVX512BW-NEXT:    cmpl %edx, %esi
4768; AVX512BW-NEXT:    movl $0, %edx
4769; AVX512BW-NEXT:    cmovgl %ecx, %edx
4770; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4771; AVX512BW-NEXT:    vpextrd $3, %xmm2, %edx
4772; AVX512BW-NEXT:    vpextrd $3, %xmm0, %esi
4773; AVX512BW-NEXT:    cmpl %edx, %esi
4774; AVX512BW-NEXT:    movl $0, %edx
4775; AVX512BW-NEXT:    cmovgl %ecx, %edx
4776; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm0
4777; AVX512BW-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
4778; AVX512BW-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
4779; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
4780; AVX512BW-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
4781; AVX512BW-NEXT:    vpextrd $1, %xmm2, %edx
4782; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
4783; AVX512BW-NEXT:    vpextrd $1, %xmm4, %esi
4784; AVX512BW-NEXT:    cmpl %edx, %esi
4785; AVX512BW-NEXT:    movl $0, %edx
4786; AVX512BW-NEXT:    cmovgl %ecx, %edx
4787; AVX512BW-NEXT:    vmovd %xmm2, %esi
4788; AVX512BW-NEXT:    vmovd %xmm4, %edi
4789; AVX512BW-NEXT:    cmpl %esi, %edi
4790; AVX512BW-NEXT:    movl $0, %esi
4791; AVX512BW-NEXT:    cmovgl %ecx, %esi
4792; AVX512BW-NEXT:    vmovd %esi, %xmm5
4793; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4794; AVX512BW-NEXT:    vpextrd $2, %xmm2, %edx
4795; AVX512BW-NEXT:    vpextrd $2, %xmm4, %esi
4796; AVX512BW-NEXT:    cmpl %edx, %esi
4797; AVX512BW-NEXT:    movl $0, %edx
4798; AVX512BW-NEXT:    cmovgl %ecx, %edx
4799; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4800; AVX512BW-NEXT:    vpextrd $3, %xmm2, %edx
4801; AVX512BW-NEXT:    vpextrd $3, %xmm4, %esi
4802; AVX512BW-NEXT:    cmpl %edx, %esi
4803; AVX512BW-NEXT:    movl $0, %edx
4804; AVX512BW-NEXT:    cmovgl %ecx, %edx
4805; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm2
4806; AVX512BW-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
4807; AVX512BW-NEXT:    vpextrd $1, %xmm4, %edx
4808; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
4809; AVX512BW-NEXT:    vpextrd $1, %xmm5, %esi
4810; AVX512BW-NEXT:    cmpl %edx, %esi
4811; AVX512BW-NEXT:    movl $0, %edx
4812; AVX512BW-NEXT:    cmovgl %ecx, %edx
4813; AVX512BW-NEXT:    vmovd %xmm4, %esi
4814; AVX512BW-NEXT:    vmovd %xmm5, %edi
4815; AVX512BW-NEXT:    cmpl %esi, %edi
4816; AVX512BW-NEXT:    movl $0, %esi
4817; AVX512BW-NEXT:    cmovgl %ecx, %esi
4818; AVX512BW-NEXT:    vmovd %esi, %xmm6
4819; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4820; AVX512BW-NEXT:    vpextrd $2, %xmm4, %edx
4821; AVX512BW-NEXT:    vpextrd $2, %xmm5, %esi
4822; AVX512BW-NEXT:    cmpl %edx, %esi
4823; AVX512BW-NEXT:    movl $0, %edx
4824; AVX512BW-NEXT:    cmovgl %ecx, %edx
4825; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4826; AVX512BW-NEXT:    vpextrd $3, %xmm4, %edx
4827; AVX512BW-NEXT:    vpextrd $3, %xmm5, %esi
4828; AVX512BW-NEXT:    cmpl %edx, %esi
4829; AVX512BW-NEXT:    movl $0, %edx
4830; AVX512BW-NEXT:    cmovgl %ecx, %edx
4831; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4832; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
4833; AVX512BW-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
4834; AVX512BW-NEXT:    vpextrd $1, %xmm4, %edx
4835; AVX512BW-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
4836; AVX512BW-NEXT:    vpextrd $1, %xmm5, %esi
4837; AVX512BW-NEXT:    cmpl %edx, %esi
4838; AVX512BW-NEXT:    movl $0, %edx
4839; AVX512BW-NEXT:    cmovgl %ecx, %edx
4840; AVX512BW-NEXT:    vmovd %xmm4, %esi
4841; AVX512BW-NEXT:    vmovd %xmm5, %edi
4842; AVX512BW-NEXT:    cmpl %esi, %edi
4843; AVX512BW-NEXT:    movl $0, %esi
4844; AVX512BW-NEXT:    cmovgl %ecx, %esi
4845; AVX512BW-NEXT:    vmovd %esi, %xmm6
4846; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4847; AVX512BW-NEXT:    vpextrd $2, %xmm4, %edx
4848; AVX512BW-NEXT:    vpextrd $2, %xmm5, %esi
4849; AVX512BW-NEXT:    cmpl %edx, %esi
4850; AVX512BW-NEXT:    movl $0, %edx
4851; AVX512BW-NEXT:    cmovgl %ecx, %edx
4852; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4853; AVX512BW-NEXT:    vpextrd $3, %xmm4, %edx
4854; AVX512BW-NEXT:    vpextrd $3, %xmm5, %esi
4855; AVX512BW-NEXT:    cmpl %edx, %esi
4856; AVX512BW-NEXT:    movl $0, %edx
4857; AVX512BW-NEXT:    cmovgl %ecx, %edx
4858; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4859; AVX512BW-NEXT:    vpextrd $1, %xmm3, %edx
4860; AVX512BW-NEXT:    vpextrd $1, %xmm1, %esi
4861; AVX512BW-NEXT:    cmpl %edx, %esi
4862; AVX512BW-NEXT:    movl $0, %edx
4863; AVX512BW-NEXT:    cmovgl %ecx, %edx
4864; AVX512BW-NEXT:    vmovd %xmm3, %esi
4865; AVX512BW-NEXT:    vmovd %xmm1, %edi
4866; AVX512BW-NEXT:    cmpl %esi, %edi
4867; AVX512BW-NEXT:    movl $0, %esi
4868; AVX512BW-NEXT:    cmovgl %ecx, %esi
4869; AVX512BW-NEXT:    vmovd %esi, %xmm5
4870; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4871; AVX512BW-NEXT:    vpextrd $2, %xmm3, %edx
4872; AVX512BW-NEXT:    vpextrd $2, %xmm1, %esi
4873; AVX512BW-NEXT:    cmpl %edx, %esi
4874; AVX512BW-NEXT:    movl $0, %edx
4875; AVX512BW-NEXT:    cmovgl %ecx, %edx
4876; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4877; AVX512BW-NEXT:    vpextrd $3, %xmm3, %edx
4878; AVX512BW-NEXT:    vpextrd $3, %xmm1, %esi
4879; AVX512BW-NEXT:    cmpl %edx, %esi
4880; AVX512BW-NEXT:    cmovgl %ecx, %eax
4881; AVX512BW-NEXT:    vpinsrd $3, %eax, %xmm5, %xmm1
4882; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
4883; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
4884; AVX512BW-NEXT:    vpmovdw %zmm1, %ymm1
4885; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
4886; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
4887; AVX512BW-NEXT:    retq
4888  %1 = icmp sgt <32 x i32> %a0, %a1
4889  ret <32 x i1> %1
4890}
4891
4892define <64 x i1> @test_cmp_v64i16(<64 x i16> %a0, <64 x i16> %a1) nounwind {
4893; SSE2-LABEL: test_cmp_v64i16:
4894; SSE2:       # BB#0:
4895; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
4896; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [255,255,255,255,255,255,255,255]
4897; SSE2-NEXT:    pand %xmm8, %xmm1
4898; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
4899; SSE2-NEXT:    pand %xmm8, %xmm0
4900; SSE2-NEXT:    packuswb %xmm1, %xmm0
4901; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
4902; SSE2-NEXT:    pand %xmm8, %xmm3
4903; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
4904; SSE2-NEXT:    pand %xmm8, %xmm2
4905; SSE2-NEXT:    packuswb %xmm3, %xmm2
4906; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
4907; SSE2-NEXT:    pand %xmm8, %xmm5
4908; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
4909; SSE2-NEXT:    pand %xmm8, %xmm4
4910; SSE2-NEXT:    packuswb %xmm5, %xmm4
4911; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
4912; SSE2-NEXT:    pand %xmm8, %xmm7
4913; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
4914; SSE2-NEXT:    pand %xmm8, %xmm6
4915; SSE2-NEXT:    packuswb %xmm7, %xmm6
4916; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
4917; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4918; SSE2-NEXT:    andb $1, %al
4919; SSE2-NEXT:    movb %al, 6(%rdi)
4920; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
4921; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4922; SSE2-NEXT:    andb $1, %al
4923; SSE2-NEXT:    movb %al, 4(%rdi)
4924; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
4925; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4926; SSE2-NEXT:    andb $1, %al
4927; SSE2-NEXT:    movb %al, 2(%rdi)
4928; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
4929; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4930; SSE2-NEXT:    andb $1, %al
4931; SSE2-NEXT:    movb %al, (%rdi)
4932; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4933; SSE2-NEXT:    andb $1, %al
4934; SSE2-NEXT:    movb %al, 6(%rdi)
4935; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4936; SSE2-NEXT:    andb $1, %al
4937; SSE2-NEXT:    movb %al, 4(%rdi)
4938; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4939; SSE2-NEXT:    andb $1, %al
4940; SSE2-NEXT:    movb %al, 2(%rdi)
4941; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4942; SSE2-NEXT:    andb $1, %al
4943; SSE2-NEXT:    movb %al, (%rdi)
4944; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4945; SSE2-NEXT:    andb $1, %al
4946; SSE2-NEXT:    movb %al, 6(%rdi)
4947; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4948; SSE2-NEXT:    andb $1, %al
4949; SSE2-NEXT:    movb %al, 4(%rdi)
4950; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4951; SSE2-NEXT:    andb $1, %al
4952; SSE2-NEXT:    movb %al, 2(%rdi)
4953; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4954; SSE2-NEXT:    andb $1, %al
4955; SSE2-NEXT:    movb %al, (%rdi)
4956; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4957; SSE2-NEXT:    andb $1, %al
4958; SSE2-NEXT:    movb %al, 6(%rdi)
4959; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4960; SSE2-NEXT:    andb $1, %al
4961; SSE2-NEXT:    movb %al, 4(%rdi)
4962; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4963; SSE2-NEXT:    andb $1, %al
4964; SSE2-NEXT:    movb %al, 2(%rdi)
4965; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4966; SSE2-NEXT:    andb $1, %al
4967; SSE2-NEXT:    movb %al, (%rdi)
4968; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4969; SSE2-NEXT:    andb $1, %al
4970; SSE2-NEXT:    movb %al, 6(%rdi)
4971; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4972; SSE2-NEXT:    andb $1, %al
4973; SSE2-NEXT:    movb %al, 4(%rdi)
4974; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4975; SSE2-NEXT:    andb $1, %al
4976; SSE2-NEXT:    movb %al, 2(%rdi)
4977; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4978; SSE2-NEXT:    andb $1, %al
4979; SSE2-NEXT:    movb %al, (%rdi)
4980; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4981; SSE2-NEXT:    andb $1, %al
4982; SSE2-NEXT:    movb %al, 6(%rdi)
4983; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4984; SSE2-NEXT:    andb $1, %al
4985; SSE2-NEXT:    movb %al, 4(%rdi)
4986; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4987; SSE2-NEXT:    andb $1, %al
4988; SSE2-NEXT:    movb %al, 2(%rdi)
4989; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4990; SSE2-NEXT:    andb $1, %al
4991; SSE2-NEXT:    movb %al, (%rdi)
4992; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4993; SSE2-NEXT:    andb $1, %al
4994; SSE2-NEXT:    movb %al, 6(%rdi)
4995; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4996; SSE2-NEXT:    andb $1, %al
4997; SSE2-NEXT:    movb %al, 4(%rdi)
4998; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4999; SSE2-NEXT:    andb $1, %al
5000; SSE2-NEXT:    movb %al, 2(%rdi)
5001; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5002; SSE2-NEXT:    andb $1, %al
5003; SSE2-NEXT:    movb %al, (%rdi)
5004; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5005; SSE2-NEXT:    andb $1, %al
5006; SSE2-NEXT:    movb %al, 6(%rdi)
5007; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5008; SSE2-NEXT:    andb $1, %al
5009; SSE2-NEXT:    movb %al, 4(%rdi)
5010; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5011; SSE2-NEXT:    andb $1, %al
5012; SSE2-NEXT:    movb %al, 2(%rdi)
5013; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5014; SSE2-NEXT:    andb $1, %al
5015; SSE2-NEXT:    movb %al, (%rdi)
5016; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5017; SSE2-NEXT:    andb $1, %al
5018; SSE2-NEXT:    movb %al, 6(%rdi)
5019; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5020; SSE2-NEXT:    andb $1, %al
5021; SSE2-NEXT:    movb %al, 4(%rdi)
5022; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5023; SSE2-NEXT:    andb $1, %al
5024; SSE2-NEXT:    movb %al, 2(%rdi)
5025; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5026; SSE2-NEXT:    andb $1, %al
5027; SSE2-NEXT:    movb %al, (%rdi)
5028; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5029; SSE2-NEXT:    andb $1, %al
5030; SSE2-NEXT:    movb %al, 6(%rdi)
5031; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5032; SSE2-NEXT:    andb $1, %al
5033; SSE2-NEXT:    movb %al, 4(%rdi)
5034; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5035; SSE2-NEXT:    andb $1, %al
5036; SSE2-NEXT:    movb %al, 2(%rdi)
5037; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5038; SSE2-NEXT:    andb $1, %al
5039; SSE2-NEXT:    movb %al, (%rdi)
5040; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5041; SSE2-NEXT:    andb $1, %al
5042; SSE2-NEXT:    movb %al, 6(%rdi)
5043; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5044; SSE2-NEXT:    andb $1, %al
5045; SSE2-NEXT:    movb %al, 4(%rdi)
5046; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5047; SSE2-NEXT:    andb $1, %al
5048; SSE2-NEXT:    movb %al, 2(%rdi)
5049; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5050; SSE2-NEXT:    andb $1, %al
5051; SSE2-NEXT:    movb %al, (%rdi)
5052; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5053; SSE2-NEXT:    andb $1, %al
5054; SSE2-NEXT:    movb %al, 6(%rdi)
5055; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5056; SSE2-NEXT:    andb $1, %al
5057; SSE2-NEXT:    movb %al, 4(%rdi)
5058; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5059; SSE2-NEXT:    andb $1, %al
5060; SSE2-NEXT:    movb %al, 2(%rdi)
5061; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5062; SSE2-NEXT:    andb $1, %al
5063; SSE2-NEXT:    movb %al, (%rdi)
5064; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5065; SSE2-NEXT:    andb $1, %al
5066; SSE2-NEXT:    movb %al, 6(%rdi)
5067; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5068; SSE2-NEXT:    andb $1, %al
5069; SSE2-NEXT:    movb %al, 4(%rdi)
5070; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5071; SSE2-NEXT:    andb $1, %al
5072; SSE2-NEXT:    movb %al, 2(%rdi)
5073; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5074; SSE2-NEXT:    andb $1, %al
5075; SSE2-NEXT:    movb %al, (%rdi)
5076; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5077; SSE2-NEXT:    andb $1, %al
5078; SSE2-NEXT:    movb %al, 6(%rdi)
5079; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5080; SSE2-NEXT:    andb $1, %al
5081; SSE2-NEXT:    movb %al, 4(%rdi)
5082; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5083; SSE2-NEXT:    andb $1, %al
5084; SSE2-NEXT:    movb %al, 2(%rdi)
5085; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5086; SSE2-NEXT:    andb $1, %al
5087; SSE2-NEXT:    movb %al, (%rdi)
5088; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5089; SSE2-NEXT:    andb $1, %al
5090; SSE2-NEXT:    movb %al, 6(%rdi)
5091; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5092; SSE2-NEXT:    andb $1, %al
5093; SSE2-NEXT:    movb %al, 4(%rdi)
5094; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5095; SSE2-NEXT:    andb $1, %al
5096; SSE2-NEXT:    movb %al, 2(%rdi)
5097; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5098; SSE2-NEXT:    andb $1, %al
5099; SSE2-NEXT:    movb %al, (%rdi)
5100; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5101; SSE2-NEXT:    andb $1, %al
5102; SSE2-NEXT:    movb %al, 6(%rdi)
5103; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5104; SSE2-NEXT:    andb $1, %al
5105; SSE2-NEXT:    movb %al, 4(%rdi)
5106; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5107; SSE2-NEXT:    andb $1, %al
5108; SSE2-NEXT:    movb %al, 2(%rdi)
5109; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5110; SSE2-NEXT:    andb $1, %al
5111; SSE2-NEXT:    movb %al, (%rdi)
5112; SSE2-NEXT:    movq %rdi, %rax
5113; SSE2-NEXT:    retq
5114;
5115; SSE42-LABEL: test_cmp_v64i16:
5116; SSE42:       # BB#0:
5117; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
5118; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
5119; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
5120; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
5121; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
5122; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
5123; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
5124; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
5125; SSE42-NEXT:    pextrb $14, %xmm7, %eax
5126; SSE42-NEXT:    andb $1, %al
5127; SSE42-NEXT:    movb %al, 6(%rdi)
5128; SSE42-NEXT:    pextrb $12, %xmm7, %eax
5129; SSE42-NEXT:    andb $1, %al
5130; SSE42-NEXT:    movb %al, 6(%rdi)
5131; SSE42-NEXT:    pextrb $10, %xmm7, %eax
5132; SSE42-NEXT:    andb $1, %al
5133; SSE42-NEXT:    movb %al, 6(%rdi)
5134; SSE42-NEXT:    pextrb $8, %xmm7, %eax
5135; SSE42-NEXT:    andb $1, %al
5136; SSE42-NEXT:    movb %al, 6(%rdi)
5137; SSE42-NEXT:    pextrb $6, %xmm7, %eax
5138; SSE42-NEXT:    andb $1, %al
5139; SSE42-NEXT:    movb %al, 6(%rdi)
5140; SSE42-NEXT:    pextrb $4, %xmm7, %eax
5141; SSE42-NEXT:    andb $1, %al
5142; SSE42-NEXT:    movb %al, 6(%rdi)
5143; SSE42-NEXT:    pextrb $2, %xmm7, %eax
5144; SSE42-NEXT:    andb $1, %al
5145; SSE42-NEXT:    movb %al, 6(%rdi)
5146; SSE42-NEXT:    pextrb $0, %xmm7, %eax
5147; SSE42-NEXT:    andb $1, %al
5148; SSE42-NEXT:    movb %al, 6(%rdi)
5149; SSE42-NEXT:    pextrb $14, %xmm6, %eax
5150; SSE42-NEXT:    andb $1, %al
5151; SSE42-NEXT:    movb %al, 6(%rdi)
5152; SSE42-NEXT:    pextrb $12, %xmm6, %eax
5153; SSE42-NEXT:    andb $1, %al
5154; SSE42-NEXT:    movb %al, 6(%rdi)
5155; SSE42-NEXT:    pextrb $10, %xmm6, %eax
5156; SSE42-NEXT:    andb $1, %al
5157; SSE42-NEXT:    movb %al, 6(%rdi)
5158; SSE42-NEXT:    pextrb $8, %xmm6, %eax
5159; SSE42-NEXT:    andb $1, %al
5160; SSE42-NEXT:    movb %al, 6(%rdi)
5161; SSE42-NEXT:    pextrb $6, %xmm6, %eax
5162; SSE42-NEXT:    andb $1, %al
5163; SSE42-NEXT:    movb %al, 6(%rdi)
5164; SSE42-NEXT:    pextrb $4, %xmm6, %eax
5165; SSE42-NEXT:    andb $1, %al
5166; SSE42-NEXT:    movb %al, 6(%rdi)
5167; SSE42-NEXT:    pextrb $2, %xmm6, %eax
5168; SSE42-NEXT:    andb $1, %al
5169; SSE42-NEXT:    movb %al, 6(%rdi)
5170; SSE42-NEXT:    pextrb $0, %xmm6, %eax
5171; SSE42-NEXT:    andb $1, %al
5172; SSE42-NEXT:    movb %al, 6(%rdi)
5173; SSE42-NEXT:    pextrb $14, %xmm5, %eax
5174; SSE42-NEXT:    andb $1, %al
5175; SSE42-NEXT:    movb %al, 4(%rdi)
5176; SSE42-NEXT:    pextrb $12, %xmm5, %eax
5177; SSE42-NEXT:    andb $1, %al
5178; SSE42-NEXT:    movb %al, 4(%rdi)
5179; SSE42-NEXT:    pextrb $10, %xmm5, %eax
5180; SSE42-NEXT:    andb $1, %al
5181; SSE42-NEXT:    movb %al, 4(%rdi)
5182; SSE42-NEXT:    pextrb $8, %xmm5, %eax
5183; SSE42-NEXT:    andb $1, %al
5184; SSE42-NEXT:    movb %al, 4(%rdi)
5185; SSE42-NEXT:    pextrb $6, %xmm5, %eax
5186; SSE42-NEXT:    andb $1, %al
5187; SSE42-NEXT:    movb %al, 4(%rdi)
5188; SSE42-NEXT:    pextrb $4, %xmm5, %eax
5189; SSE42-NEXT:    andb $1, %al
5190; SSE42-NEXT:    movb %al, 4(%rdi)
5191; SSE42-NEXT:    pextrb $2, %xmm5, %eax
5192; SSE42-NEXT:    andb $1, %al
5193; SSE42-NEXT:    movb %al, 4(%rdi)
5194; SSE42-NEXT:    pextrb $0, %xmm5, %eax
5195; SSE42-NEXT:    andb $1, %al
5196; SSE42-NEXT:    movb %al, 4(%rdi)
5197; SSE42-NEXT:    pextrb $14, %xmm4, %eax
5198; SSE42-NEXT:    andb $1, %al
5199; SSE42-NEXT:    movb %al, 4(%rdi)
5200; SSE42-NEXT:    pextrb $12, %xmm4, %eax
5201; SSE42-NEXT:    andb $1, %al
5202; SSE42-NEXT:    movb %al, 4(%rdi)
5203; SSE42-NEXT:    pextrb $10, %xmm4, %eax
5204; SSE42-NEXT:    andb $1, %al
5205; SSE42-NEXT:    movb %al, 4(%rdi)
5206; SSE42-NEXT:    pextrb $8, %xmm4, %eax
5207; SSE42-NEXT:    andb $1, %al
5208; SSE42-NEXT:    movb %al, 4(%rdi)
5209; SSE42-NEXT:    pextrb $6, %xmm4, %eax
5210; SSE42-NEXT:    andb $1, %al
5211; SSE42-NEXT:    movb %al, 4(%rdi)
5212; SSE42-NEXT:    pextrb $4, %xmm4, %eax
5213; SSE42-NEXT:    andb $1, %al
5214; SSE42-NEXT:    movb %al, 4(%rdi)
5215; SSE42-NEXT:    pextrb $2, %xmm4, %eax
5216; SSE42-NEXT:    andb $1, %al
5217; SSE42-NEXT:    movb %al, 4(%rdi)
5218; SSE42-NEXT:    pextrb $0, %xmm4, %eax
5219; SSE42-NEXT:    andb $1, %al
5220; SSE42-NEXT:    movb %al, 4(%rdi)
5221; SSE42-NEXT:    pextrb $14, %xmm3, %eax
5222; SSE42-NEXT:    andb $1, %al
5223; SSE42-NEXT:    movb %al, 2(%rdi)
5224; SSE42-NEXT:    pextrb $12, %xmm3, %eax
5225; SSE42-NEXT:    andb $1, %al
5226; SSE42-NEXT:    movb %al, 2(%rdi)
5227; SSE42-NEXT:    pextrb $10, %xmm3, %eax
5228; SSE42-NEXT:    andb $1, %al
5229; SSE42-NEXT:    movb %al, 2(%rdi)
5230; SSE42-NEXT:    pextrb $8, %xmm3, %eax
5231; SSE42-NEXT:    andb $1, %al
5232; SSE42-NEXT:    movb %al, 2(%rdi)
5233; SSE42-NEXT:    pextrb $6, %xmm3, %eax
5234; SSE42-NEXT:    andb $1, %al
5235; SSE42-NEXT:    movb %al, 2(%rdi)
5236; SSE42-NEXT:    pextrb $4, %xmm3, %eax
5237; SSE42-NEXT:    andb $1, %al
5238; SSE42-NEXT:    movb %al, 2(%rdi)
5239; SSE42-NEXT:    pextrb $2, %xmm3, %eax
5240; SSE42-NEXT:    andb $1, %al
5241; SSE42-NEXT:    movb %al, 2(%rdi)
5242; SSE42-NEXT:    pextrb $0, %xmm3, %eax
5243; SSE42-NEXT:    andb $1, %al
5244; SSE42-NEXT:    movb %al, 2(%rdi)
5245; SSE42-NEXT:    pextrb $14, %xmm2, %eax
5246; SSE42-NEXT:    andb $1, %al
5247; SSE42-NEXT:    movb %al, 2(%rdi)
5248; SSE42-NEXT:    pextrb $12, %xmm2, %eax
5249; SSE42-NEXT:    andb $1, %al
5250; SSE42-NEXT:    movb %al, 2(%rdi)
5251; SSE42-NEXT:    pextrb $10, %xmm2, %eax
5252; SSE42-NEXT:    andb $1, %al
5253; SSE42-NEXT:    movb %al, 2(%rdi)
5254; SSE42-NEXT:    pextrb $8, %xmm2, %eax
5255; SSE42-NEXT:    andb $1, %al
5256; SSE42-NEXT:    movb %al, 2(%rdi)
5257; SSE42-NEXT:    pextrb $6, %xmm2, %eax
5258; SSE42-NEXT:    andb $1, %al
5259; SSE42-NEXT:    movb %al, 2(%rdi)
5260; SSE42-NEXT:    pextrb $4, %xmm2, %eax
5261; SSE42-NEXT:    andb $1, %al
5262; SSE42-NEXT:    movb %al, 2(%rdi)
5263; SSE42-NEXT:    pextrb $2, %xmm2, %eax
5264; SSE42-NEXT:    andb $1, %al
5265; SSE42-NEXT:    movb %al, 2(%rdi)
5266; SSE42-NEXT:    pextrb $0, %xmm2, %eax
5267; SSE42-NEXT:    andb $1, %al
5268; SSE42-NEXT:    movb %al, 2(%rdi)
5269; SSE42-NEXT:    pextrb $14, %xmm1, %eax
5270; SSE42-NEXT:    andb $1, %al
5271; SSE42-NEXT:    movb %al, (%rdi)
5272; SSE42-NEXT:    pextrb $12, %xmm1, %eax
5273; SSE42-NEXT:    andb $1, %al
5274; SSE42-NEXT:    movb %al, (%rdi)
5275; SSE42-NEXT:    pextrb $10, %xmm1, %eax
5276; SSE42-NEXT:    andb $1, %al
5277; SSE42-NEXT:    movb %al, (%rdi)
5278; SSE42-NEXT:    pextrb $8, %xmm1, %eax
5279; SSE42-NEXT:    andb $1, %al
5280; SSE42-NEXT:    movb %al, (%rdi)
5281; SSE42-NEXT:    pextrb $6, %xmm1, %eax
5282; SSE42-NEXT:    andb $1, %al
5283; SSE42-NEXT:    movb %al, (%rdi)
5284; SSE42-NEXT:    pextrb $4, %xmm1, %eax
5285; SSE42-NEXT:    andb $1, %al
5286; SSE42-NEXT:    movb %al, (%rdi)
5287; SSE42-NEXT:    pextrb $2, %xmm1, %eax
5288; SSE42-NEXT:    andb $1, %al
5289; SSE42-NEXT:    movb %al, (%rdi)
5290; SSE42-NEXT:    pextrb $0, %xmm1, %eax
5291; SSE42-NEXT:    andb $1, %al
5292; SSE42-NEXT:    movb %al, (%rdi)
5293; SSE42-NEXT:    pextrb $14, %xmm0, %eax
5294; SSE42-NEXT:    andb $1, %al
5295; SSE42-NEXT:    movb %al, (%rdi)
5296; SSE42-NEXT:    pextrb $12, %xmm0, %eax
5297; SSE42-NEXT:    andb $1, %al
5298; SSE42-NEXT:    movb %al, (%rdi)
5299; SSE42-NEXT:    pextrb $10, %xmm0, %eax
5300; SSE42-NEXT:    andb $1, %al
5301; SSE42-NEXT:    movb %al, (%rdi)
5302; SSE42-NEXT:    pextrb $8, %xmm0, %eax
5303; SSE42-NEXT:    andb $1, %al
5304; SSE42-NEXT:    movb %al, (%rdi)
5305; SSE42-NEXT:    pextrb $6, %xmm0, %eax
5306; SSE42-NEXT:    andb $1, %al
5307; SSE42-NEXT:    movb %al, (%rdi)
5308; SSE42-NEXT:    pextrb $4, %xmm0, %eax
5309; SSE42-NEXT:    andb $1, %al
5310; SSE42-NEXT:    movb %al, (%rdi)
5311; SSE42-NEXT:    pextrb $2, %xmm0, %eax
5312; SSE42-NEXT:    andb $1, %al
5313; SSE42-NEXT:    movb %al, (%rdi)
5314; SSE42-NEXT:    pextrb $0, %xmm0, %eax
5315; SSE42-NEXT:    andb $1, %al
5316; SSE42-NEXT:    movb %al, (%rdi)
5317; SSE42-NEXT:    movq %rdi, %rax
5318; SSE42-NEXT:    retq
5319;
5320; AVX1-LABEL: test_cmp_v64i16:
5321; AVX1:       # BB#0:
5322; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm8
5323; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm9
5324; AVX1-NEXT:    vpcmpgtw %xmm8, %xmm9, %xmm8
5325; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm0, %xmm0
5326; AVX1-NEXT:    vpacksswb %xmm8, %xmm0, %xmm8
5327; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm4
5328; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
5329; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm0, %xmm0
5330; AVX1-NEXT:    vpcmpgtw %xmm5, %xmm1, %xmm1
5331; AVX1-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
5332; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm0
5333; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5334; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm4, %xmm0
5335; AVX1-NEXT:    vpcmpgtw %xmm6, %xmm2, %xmm2
5336; AVX1-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
5337; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm0
5338; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5339; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm4, %xmm0
5340; AVX1-NEXT:    vpcmpgtw %xmm7, %xmm3, %xmm3
5341; AVX1-NEXT:    vpacksswb %xmm0, %xmm3, %xmm3
5342; AVX1-NEXT:    vpextrb $15, %xmm3, %eax
5343; AVX1-NEXT:    andb $1, %al
5344; AVX1-NEXT:    movb %al, 4(%rdi)
5345; AVX1-NEXT:    vpextrb $14, %xmm3, %eax
5346; AVX1-NEXT:    andb $1, %al
5347; AVX1-NEXT:    movb %al, 4(%rdi)
5348; AVX1-NEXT:    vpextrb $13, %xmm3, %eax
5349; AVX1-NEXT:    andb $1, %al
5350; AVX1-NEXT:    movb %al, 4(%rdi)
5351; AVX1-NEXT:    vpextrb $12, %xmm3, %eax
5352; AVX1-NEXT:    andb $1, %al
5353; AVX1-NEXT:    movb %al, 4(%rdi)
5354; AVX1-NEXT:    vpextrb $11, %xmm3, %eax
5355; AVX1-NEXT:    andb $1, %al
5356; AVX1-NEXT:    movb %al, 4(%rdi)
5357; AVX1-NEXT:    vpextrb $10, %xmm3, %eax
5358; AVX1-NEXT:    andb $1, %al
5359; AVX1-NEXT:    movb %al, 4(%rdi)
5360; AVX1-NEXT:    vpextrb $9, %xmm3, %eax
5361; AVX1-NEXT:    andb $1, %al
5362; AVX1-NEXT:    movb %al, 4(%rdi)
5363; AVX1-NEXT:    vpextrb $8, %xmm3, %eax
5364; AVX1-NEXT:    andb $1, %al
5365; AVX1-NEXT:    movb %al, 4(%rdi)
5366; AVX1-NEXT:    vpextrb $7, %xmm3, %eax
5367; AVX1-NEXT:    andb $1, %al
5368; AVX1-NEXT:    movb %al, 4(%rdi)
5369; AVX1-NEXT:    vpextrb $6, %xmm3, %eax
5370; AVX1-NEXT:    andb $1, %al
5371; AVX1-NEXT:    movb %al, 4(%rdi)
5372; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
5373; AVX1-NEXT:    andb $1, %al
5374; AVX1-NEXT:    movb %al, 4(%rdi)
5375; AVX1-NEXT:    vpextrb $4, %xmm3, %eax
5376; AVX1-NEXT:    andb $1, %al
5377; AVX1-NEXT:    movb %al, 4(%rdi)
5378; AVX1-NEXT:    vpextrb $3, %xmm3, %eax
5379; AVX1-NEXT:    andb $1, %al
5380; AVX1-NEXT:    movb %al, 4(%rdi)
5381; AVX1-NEXT:    vpextrb $2, %xmm3, %eax
5382; AVX1-NEXT:    andb $1, %al
5383; AVX1-NEXT:    movb %al, 4(%rdi)
5384; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
5385; AVX1-NEXT:    andb $1, %al
5386; AVX1-NEXT:    movb %al, 4(%rdi)
5387; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
5388; AVX1-NEXT:    andb $1, %al
5389; AVX1-NEXT:    movb %al, 4(%rdi)
5390; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
5391; AVX1-NEXT:    andb $1, %al
5392; AVX1-NEXT:    movb %al, 4(%rdi)
5393; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
5394; AVX1-NEXT:    andb $1, %al
5395; AVX1-NEXT:    movb %al, 4(%rdi)
5396; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
5397; AVX1-NEXT:    andb $1, %al
5398; AVX1-NEXT:    movb %al, 4(%rdi)
5399; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
5400; AVX1-NEXT:    andb $1, %al
5401; AVX1-NEXT:    movb %al, 4(%rdi)
5402; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
5403; AVX1-NEXT:    andb $1, %al
5404; AVX1-NEXT:    movb %al, 4(%rdi)
5405; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
5406; AVX1-NEXT:    andb $1, %al
5407; AVX1-NEXT:    movb %al, 4(%rdi)
5408; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
5409; AVX1-NEXT:    andb $1, %al
5410; AVX1-NEXT:    movb %al, 4(%rdi)
5411; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
5412; AVX1-NEXT:    andb $1, %al
5413; AVX1-NEXT:    movb %al, 4(%rdi)
5414; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
5415; AVX1-NEXT:    andb $1, %al
5416; AVX1-NEXT:    movb %al, 4(%rdi)
5417; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
5418; AVX1-NEXT:    andb $1, %al
5419; AVX1-NEXT:    movb %al, 4(%rdi)
5420; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
5421; AVX1-NEXT:    andb $1, %al
5422; AVX1-NEXT:    movb %al, 4(%rdi)
5423; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
5424; AVX1-NEXT:    andb $1, %al
5425; AVX1-NEXT:    movb %al, 4(%rdi)
5426; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
5427; AVX1-NEXT:    andb $1, %al
5428; AVX1-NEXT:    movb %al, 4(%rdi)
5429; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
5430; AVX1-NEXT:    andb $1, %al
5431; AVX1-NEXT:    movb %al, 4(%rdi)
5432; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
5433; AVX1-NEXT:    andb $1, %al
5434; AVX1-NEXT:    movb %al, 4(%rdi)
5435; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
5436; AVX1-NEXT:    andb $1, %al
5437; AVX1-NEXT:    movb %al, 4(%rdi)
5438; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
5439; AVX1-NEXT:    andb $1, %al
5440; AVX1-NEXT:    movb %al, (%rdi)
5441; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
5442; AVX1-NEXT:    andb $1, %al
5443; AVX1-NEXT:    movb %al, (%rdi)
5444; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
5445; AVX1-NEXT:    andb $1, %al
5446; AVX1-NEXT:    movb %al, (%rdi)
5447; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
5448; AVX1-NEXT:    andb $1, %al
5449; AVX1-NEXT:    movb %al, (%rdi)
5450; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
5451; AVX1-NEXT:    andb $1, %al
5452; AVX1-NEXT:    movb %al, (%rdi)
5453; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
5454; AVX1-NEXT:    andb $1, %al
5455; AVX1-NEXT:    movb %al, (%rdi)
5456; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
5457; AVX1-NEXT:    andb $1, %al
5458; AVX1-NEXT:    movb %al, (%rdi)
5459; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
5460; AVX1-NEXT:    andb $1, %al
5461; AVX1-NEXT:    movb %al, (%rdi)
5462; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
5463; AVX1-NEXT:    andb $1, %al
5464; AVX1-NEXT:    movb %al, (%rdi)
5465; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
5466; AVX1-NEXT:    andb $1, %al
5467; AVX1-NEXT:    movb %al, (%rdi)
5468; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
5469; AVX1-NEXT:    andb $1, %al
5470; AVX1-NEXT:    movb %al, (%rdi)
5471; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
5472; AVX1-NEXT:    andb $1, %al
5473; AVX1-NEXT:    movb %al, (%rdi)
5474; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
5475; AVX1-NEXT:    andb $1, %al
5476; AVX1-NEXT:    movb %al, (%rdi)
5477; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
5478; AVX1-NEXT:    andb $1, %al
5479; AVX1-NEXT:    movb %al, (%rdi)
5480; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
5481; AVX1-NEXT:    andb $1, %al
5482; AVX1-NEXT:    movb %al, (%rdi)
5483; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
5484; AVX1-NEXT:    andb $1, %al
5485; AVX1-NEXT:    movb %al, (%rdi)
5486; AVX1-NEXT:    vpextrb $15, %xmm8, %eax
5487; AVX1-NEXT:    andb $1, %al
5488; AVX1-NEXT:    movb %al, (%rdi)
5489; AVX1-NEXT:    vpextrb $14, %xmm8, %eax
5490; AVX1-NEXT:    andb $1, %al
5491; AVX1-NEXT:    movb %al, (%rdi)
5492; AVX1-NEXT:    vpextrb $13, %xmm8, %eax
5493; AVX1-NEXT:    andb $1, %al
5494; AVX1-NEXT:    movb %al, (%rdi)
5495; AVX1-NEXT:    vpextrb $12, %xmm8, %eax
5496; AVX1-NEXT:    andb $1, %al
5497; AVX1-NEXT:    movb %al, (%rdi)
5498; AVX1-NEXT:    vpextrb $11, %xmm8, %eax
5499; AVX1-NEXT:    andb $1, %al
5500; AVX1-NEXT:    movb %al, (%rdi)
5501; AVX1-NEXT:    vpextrb $10, %xmm8, %eax
5502; AVX1-NEXT:    andb $1, %al
5503; AVX1-NEXT:    movb %al, (%rdi)
5504; AVX1-NEXT:    vpextrb $9, %xmm8, %eax
5505; AVX1-NEXT:    andb $1, %al
5506; AVX1-NEXT:    movb %al, (%rdi)
5507; AVX1-NEXT:    vpextrb $8, %xmm8, %eax
5508; AVX1-NEXT:    andb $1, %al
5509; AVX1-NEXT:    movb %al, (%rdi)
5510; AVX1-NEXT:    vpextrb $7, %xmm8, %eax
5511; AVX1-NEXT:    andb $1, %al
5512; AVX1-NEXT:    movb %al, (%rdi)
5513; AVX1-NEXT:    vpextrb $6, %xmm8, %eax
5514; AVX1-NEXT:    andb $1, %al
5515; AVX1-NEXT:    movb %al, (%rdi)
5516; AVX1-NEXT:    vpextrb $5, %xmm8, %eax
5517; AVX1-NEXT:    andb $1, %al
5518; AVX1-NEXT:    movb %al, (%rdi)
5519; AVX1-NEXT:    vpextrb $4, %xmm8, %eax
5520; AVX1-NEXT:    andb $1, %al
5521; AVX1-NEXT:    movb %al, (%rdi)
5522; AVX1-NEXT:    vpextrb $3, %xmm8, %eax
5523; AVX1-NEXT:    andb $1, %al
5524; AVX1-NEXT:    movb %al, (%rdi)
5525; AVX1-NEXT:    vpextrb $2, %xmm8, %eax
5526; AVX1-NEXT:    andb $1, %al
5527; AVX1-NEXT:    movb %al, (%rdi)
5528; AVX1-NEXT:    vpextrb $1, %xmm8, %eax
5529; AVX1-NEXT:    andb $1, %al
5530; AVX1-NEXT:    movb %al, (%rdi)
5531; AVX1-NEXT:    vpextrb $0, %xmm8, %eax
5532; AVX1-NEXT:    andb $1, %al
5533; AVX1-NEXT:    movb %al, (%rdi)
5534; AVX1-NEXT:    movq %rdi, %rax
5535; AVX1-NEXT:    vzeroupper
5536; AVX1-NEXT:    retq
5537;
5538; AVX2-LABEL: test_cmp_v64i16:
5539; AVX2:       # BB#0:
5540; AVX2-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
5541; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
5542; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm0
5543; AVX2-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
5544; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm4
5545; AVX2-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
5546; AVX2-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
5547; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm4
5548; AVX2-NEXT:    vpacksswb %xmm4, %xmm2, %xmm2
5549; AVX2-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
5550; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4
5551; AVX2-NEXT:    vpacksswb %xmm4, %xmm3, %xmm3
5552; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
5553; AVX2-NEXT:    andb $1, %al
5554; AVX2-NEXT:    movb %al, 4(%rdi)
5555; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
5556; AVX2-NEXT:    andb $1, %al
5557; AVX2-NEXT:    movb %al, 4(%rdi)
5558; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
5559; AVX2-NEXT:    andb $1, %al
5560; AVX2-NEXT:    movb %al, 4(%rdi)
5561; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
5562; AVX2-NEXT:    andb $1, %al
5563; AVX2-NEXT:    movb %al, 4(%rdi)
5564; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
5565; AVX2-NEXT:    andb $1, %al
5566; AVX2-NEXT:    movb %al, 4(%rdi)
5567; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
5568; AVX2-NEXT:    andb $1, %al
5569; AVX2-NEXT:    movb %al, 4(%rdi)
5570; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
5571; AVX2-NEXT:    andb $1, %al
5572; AVX2-NEXT:    movb %al, 4(%rdi)
5573; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
5574; AVX2-NEXT:    andb $1, %al
5575; AVX2-NEXT:    movb %al, 4(%rdi)
5576; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
5577; AVX2-NEXT:    andb $1, %al
5578; AVX2-NEXT:    movb %al, 4(%rdi)
5579; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
5580; AVX2-NEXT:    andb $1, %al
5581; AVX2-NEXT:    movb %al, 4(%rdi)
5582; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
5583; AVX2-NEXT:    andb $1, %al
5584; AVX2-NEXT:    movb %al, 4(%rdi)
5585; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
5586; AVX2-NEXT:    andb $1, %al
5587; AVX2-NEXT:    movb %al, 4(%rdi)
5588; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
5589; AVX2-NEXT:    andb $1, %al
5590; AVX2-NEXT:    movb %al, 4(%rdi)
5591; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
5592; AVX2-NEXT:    andb $1, %al
5593; AVX2-NEXT:    movb %al, 4(%rdi)
5594; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
5595; AVX2-NEXT:    andb $1, %al
5596; AVX2-NEXT:    movb %al, 4(%rdi)
5597; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
5598; AVX2-NEXT:    andb $1, %al
5599; AVX2-NEXT:    movb %al, 4(%rdi)
5600; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
5601; AVX2-NEXT:    andb $1, %al
5602; AVX2-NEXT:    movb %al, 4(%rdi)
5603; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
5604; AVX2-NEXT:    andb $1, %al
5605; AVX2-NEXT:    movb %al, 4(%rdi)
5606; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
5607; AVX2-NEXT:    andb $1, %al
5608; AVX2-NEXT:    movb %al, 4(%rdi)
5609; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
5610; AVX2-NEXT:    andb $1, %al
5611; AVX2-NEXT:    movb %al, 4(%rdi)
5612; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
5613; AVX2-NEXT:    andb $1, %al
5614; AVX2-NEXT:    movb %al, 4(%rdi)
5615; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
5616; AVX2-NEXT:    andb $1, %al
5617; AVX2-NEXT:    movb %al, 4(%rdi)
5618; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
5619; AVX2-NEXT:    andb $1, %al
5620; AVX2-NEXT:    movb %al, 4(%rdi)
5621; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
5622; AVX2-NEXT:    andb $1, %al
5623; AVX2-NEXT:    movb %al, 4(%rdi)
5624; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
5625; AVX2-NEXT:    andb $1, %al
5626; AVX2-NEXT:    movb %al, 4(%rdi)
5627; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
5628; AVX2-NEXT:    andb $1, %al
5629; AVX2-NEXT:    movb %al, 4(%rdi)
5630; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
5631; AVX2-NEXT:    andb $1, %al
5632; AVX2-NEXT:    movb %al, 4(%rdi)
5633; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
5634; AVX2-NEXT:    andb $1, %al
5635; AVX2-NEXT:    movb %al, 4(%rdi)
5636; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
5637; AVX2-NEXT:    andb $1, %al
5638; AVX2-NEXT:    movb %al, 4(%rdi)
5639; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
5640; AVX2-NEXT:    andb $1, %al
5641; AVX2-NEXT:    movb %al, 4(%rdi)
5642; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
5643; AVX2-NEXT:    andb $1, %al
5644; AVX2-NEXT:    movb %al, 4(%rdi)
5645; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
5646; AVX2-NEXT:    andb $1, %al
5647; AVX2-NEXT:    movb %al, 4(%rdi)
5648; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
5649; AVX2-NEXT:    andb $1, %al
5650; AVX2-NEXT:    movb %al, (%rdi)
5651; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
5652; AVX2-NEXT:    andb $1, %al
5653; AVX2-NEXT:    movb %al, (%rdi)
5654; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
5655; AVX2-NEXT:    andb $1, %al
5656; AVX2-NEXT:    movb %al, (%rdi)
5657; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
5658; AVX2-NEXT:    andb $1, %al
5659; AVX2-NEXT:    movb %al, (%rdi)
5660; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
5661; AVX2-NEXT:    andb $1, %al
5662; AVX2-NEXT:    movb %al, (%rdi)
5663; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
5664; AVX2-NEXT:    andb $1, %al
5665; AVX2-NEXT:    movb %al, (%rdi)
5666; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
5667; AVX2-NEXT:    andb $1, %al
5668; AVX2-NEXT:    movb %al, (%rdi)
5669; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
5670; AVX2-NEXT:    andb $1, %al
5671; AVX2-NEXT:    movb %al, (%rdi)
5672; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
5673; AVX2-NEXT:    andb $1, %al
5674; AVX2-NEXT:    movb %al, (%rdi)
5675; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
5676; AVX2-NEXT:    andb $1, %al
5677; AVX2-NEXT:    movb %al, (%rdi)
5678; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
5679; AVX2-NEXT:    andb $1, %al
5680; AVX2-NEXT:    movb %al, (%rdi)
5681; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
5682; AVX2-NEXT:    andb $1, %al
5683; AVX2-NEXT:    movb %al, (%rdi)
5684; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
5685; AVX2-NEXT:    andb $1, %al
5686; AVX2-NEXT:    movb %al, (%rdi)
5687; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
5688; AVX2-NEXT:    andb $1, %al
5689; AVX2-NEXT:    movb %al, (%rdi)
5690; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
5691; AVX2-NEXT:    andb $1, %al
5692; AVX2-NEXT:    movb %al, (%rdi)
5693; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
5694; AVX2-NEXT:    andb $1, %al
5695; AVX2-NEXT:    movb %al, (%rdi)
5696; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
5697; AVX2-NEXT:    andb $1, %al
5698; AVX2-NEXT:    movb %al, (%rdi)
5699; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
5700; AVX2-NEXT:    andb $1, %al
5701; AVX2-NEXT:    movb %al, (%rdi)
5702; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
5703; AVX2-NEXT:    andb $1, %al
5704; AVX2-NEXT:    movb %al, (%rdi)
5705; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
5706; AVX2-NEXT:    andb $1, %al
5707; AVX2-NEXT:    movb %al, (%rdi)
5708; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
5709; AVX2-NEXT:    andb $1, %al
5710; AVX2-NEXT:    movb %al, (%rdi)
5711; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
5712; AVX2-NEXT:    andb $1, %al
5713; AVX2-NEXT:    movb %al, (%rdi)
5714; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
5715; AVX2-NEXT:    andb $1, %al
5716; AVX2-NEXT:    movb %al, (%rdi)
5717; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
5718; AVX2-NEXT:    andb $1, %al
5719; AVX2-NEXT:    movb %al, (%rdi)
5720; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
5721; AVX2-NEXT:    andb $1, %al
5722; AVX2-NEXT:    movb %al, (%rdi)
5723; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
5724; AVX2-NEXT:    andb $1, %al
5725; AVX2-NEXT:    movb %al, (%rdi)
5726; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
5727; AVX2-NEXT:    andb $1, %al
5728; AVX2-NEXT:    movb %al, (%rdi)
5729; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
5730; AVX2-NEXT:    andb $1, %al
5731; AVX2-NEXT:    movb %al, (%rdi)
5732; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
5733; AVX2-NEXT:    andb $1, %al
5734; AVX2-NEXT:    movb %al, (%rdi)
5735; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
5736; AVX2-NEXT:    andb $1, %al
5737; AVX2-NEXT:    movb %al, (%rdi)
5738; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
5739; AVX2-NEXT:    andb $1, %al
5740; AVX2-NEXT:    movb %al, (%rdi)
5741; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
5742; AVX2-NEXT:    andb $1, %al
5743; AVX2-NEXT:    movb %al, (%rdi)
5744; AVX2-NEXT:    movq %rdi, %rax
5745; AVX2-NEXT:    vzeroupper
5746; AVX2-NEXT:    retq
5747;
5748; AVX512F-LABEL: test_cmp_v64i16:
5749; AVX512F:       # BB#0:
5750; AVX512F-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
5751; AVX512F-NEXT:    vpmovsxwd %ymm3, %zmm3
5752; AVX512F-NEXT:    vpslld $31, %zmm3, %zmm3
5753; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
5754; AVX512F-NEXT:    kshiftlw $14, %k0, %k1
5755; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5756; AVX512F-NEXT:    kmovw %k1, %eax
5757; AVX512F-NEXT:    kshiftlw $15, %k0, %k1
5758; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5759; AVX512F-NEXT:    kmovw %k1, %ecx
5760; AVX512F-NEXT:    vmovd %ecx, %xmm3
5761; AVX512F-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
5762; AVX512F-NEXT:    kshiftlw $13, %k0, %k1
5763; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5764; AVX512F-NEXT:    kmovw %k1, %eax
5765; AVX512F-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
5766; AVX512F-NEXT:    kshiftlw $12, %k0, %k1
5767; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5768; AVX512F-NEXT:    kmovw %k1, %eax
5769; AVX512F-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
5770; AVX512F-NEXT:    kshiftlw $11, %k0, %k1
5771; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5772; AVX512F-NEXT:    kmovw %k1, %eax
5773; AVX512F-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
5774; AVX512F-NEXT:    kshiftlw $10, %k0, %k1
5775; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5776; AVX512F-NEXT:    kmovw %k1, %eax
5777; AVX512F-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
5778; AVX512F-NEXT:    kshiftlw $9, %k0, %k1
5779; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5780; AVX512F-NEXT:    kmovw %k1, %eax
5781; AVX512F-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
5782; AVX512F-NEXT:    kshiftlw $8, %k0, %k1
5783; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5784; AVX512F-NEXT:    kmovw %k1, %eax
5785; AVX512F-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
5786; AVX512F-NEXT:    kshiftlw $7, %k0, %k1
5787; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5788; AVX512F-NEXT:    kmovw %k1, %eax
5789; AVX512F-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
5790; AVX512F-NEXT:    kshiftlw $6, %k0, %k1
5791; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5792; AVX512F-NEXT:    kmovw %k1, %eax
5793; AVX512F-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
5794; AVX512F-NEXT:    kshiftlw $5, %k0, %k1
5795; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5796; AVX512F-NEXT:    kmovw %k1, %eax
5797; AVX512F-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
5798; AVX512F-NEXT:    kshiftlw $4, %k0, %k1
5799; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5800; AVX512F-NEXT:    kmovw %k1, %eax
5801; AVX512F-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
5802; AVX512F-NEXT:    kshiftlw $3, %k0, %k1
5803; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5804; AVX512F-NEXT:    kmovw %k1, %eax
5805; AVX512F-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
5806; AVX512F-NEXT:    kshiftlw $2, %k0, %k1
5807; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5808; AVX512F-NEXT:    kmovw %k1, %eax
5809; AVX512F-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
5810; AVX512F-NEXT:    kshiftlw $1, %k0, %k1
5811; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5812; AVX512F-NEXT:    kmovw %k1, %eax
5813; AVX512F-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
5814; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
5815; AVX512F-NEXT:    kmovw %k0, %eax
5816; AVX512F-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm3
5817; AVX512F-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
5818; AVX512F-NEXT:    vpmovsxwd %ymm2, %zmm2
5819; AVX512F-NEXT:    vpslld $31, %zmm2, %zmm2
5820; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
5821; AVX512F-NEXT:    kshiftlw $14, %k0, %k1
5822; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5823; AVX512F-NEXT:    kmovw %k1, %eax
5824; AVX512F-NEXT:    kshiftlw $15, %k0, %k1
5825; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5826; AVX512F-NEXT:    kmovw %k1, %ecx
5827; AVX512F-NEXT:    vmovd %ecx, %xmm2
5828; AVX512F-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm2
5829; AVX512F-NEXT:    kshiftlw $13, %k0, %k1
5830; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5831; AVX512F-NEXT:    kmovw %k1, %eax
5832; AVX512F-NEXT:    vpinsrb $2, %eax, %xmm2, %xmm2
5833; AVX512F-NEXT:    kshiftlw $12, %k0, %k1
5834; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5835; AVX512F-NEXT:    kmovw %k1, %eax
5836; AVX512F-NEXT:    vpinsrb $3, %eax, %xmm2, %xmm2
5837; AVX512F-NEXT:    kshiftlw $11, %k0, %k1
5838; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5839; AVX512F-NEXT:    kmovw %k1, %eax
5840; AVX512F-NEXT:    vpinsrb $4, %eax, %xmm2, %xmm2
5841; AVX512F-NEXT:    kshiftlw $10, %k0, %k1
5842; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5843; AVX512F-NEXT:    kmovw %k1, %eax
5844; AVX512F-NEXT:    vpinsrb $5, %eax, %xmm2, %xmm2
5845; AVX512F-NEXT:    kshiftlw $9, %k0, %k1
5846; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5847; AVX512F-NEXT:    kmovw %k1, %eax
5848; AVX512F-NEXT:    vpinsrb $6, %eax, %xmm2, %xmm2
5849; AVX512F-NEXT:    kshiftlw $8, %k0, %k1
5850; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5851; AVX512F-NEXT:    kmovw %k1, %eax
5852; AVX512F-NEXT:    vpinsrb $7, %eax, %xmm2, %xmm2
5853; AVX512F-NEXT:    kshiftlw $7, %k0, %k1
5854; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5855; AVX512F-NEXT:    kmovw %k1, %eax
5856; AVX512F-NEXT:    vpinsrb $8, %eax, %xmm2, %xmm2
5857; AVX512F-NEXT:    kshiftlw $6, %k0, %k1
5858; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5859; AVX512F-NEXT:    kmovw %k1, %eax
5860; AVX512F-NEXT:    vpinsrb $9, %eax, %xmm2, %xmm2
5861; AVX512F-NEXT:    kshiftlw $5, %k0, %k1
5862; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5863; AVX512F-NEXT:    kmovw %k1, %eax
5864; AVX512F-NEXT:    vpinsrb $10, %eax, %xmm2, %xmm2
5865; AVX512F-NEXT:    kshiftlw $4, %k0, %k1
5866; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5867; AVX512F-NEXT:    kmovw %k1, %eax
5868; AVX512F-NEXT:    vpinsrb $11, %eax, %xmm2, %xmm2
5869; AVX512F-NEXT:    kshiftlw $3, %k0, %k1
5870; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5871; AVX512F-NEXT:    kmovw %k1, %eax
5872; AVX512F-NEXT:    vpinsrb $12, %eax, %xmm2, %xmm2
5873; AVX512F-NEXT:    kshiftlw $2, %k0, %k1
5874; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5875; AVX512F-NEXT:    kmovw %k1, %eax
5876; AVX512F-NEXT:    vpinsrb $13, %eax, %xmm2, %xmm2
5877; AVX512F-NEXT:    kshiftlw $1, %k0, %k1
5878; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5879; AVX512F-NEXT:    kmovw %k1, %eax
5880; AVX512F-NEXT:    vpinsrb $14, %eax, %xmm2, %xmm2
5881; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
5882; AVX512F-NEXT:    kmovw %k0, %eax
5883; AVX512F-NEXT:    vpinsrb $15, %eax, %xmm2, %xmm2
5884; AVX512F-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
5885; AVX512F-NEXT:    vpsllw $7, %ymm2, %ymm2
5886; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm3 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
5887; AVX512F-NEXT:    vpand %ymm3, %ymm2, %ymm2
5888; AVX512F-NEXT:    vpxor %ymm6, %ymm6, %ymm6
5889; AVX512F-NEXT:    vpcmpgtb %ymm2, %ymm6, %ymm2
5890; AVX512F-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
5891; AVX512F-NEXT:    vpmovsxwd %ymm1, %zmm1
5892; AVX512F-NEXT:    vpslld $31, %zmm1, %zmm1
5893; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
5894; AVX512F-NEXT:    kshiftlw $14, %k0, %k1
5895; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5896; AVX512F-NEXT:    kmovw %k1, %eax
5897; AVX512F-NEXT:    kshiftlw $15, %k0, %k1
5898; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5899; AVX512F-NEXT:    kmovw %k1, %ecx
5900; AVX512F-NEXT:    vmovd %ecx, %xmm1
5901; AVX512F-NEXT:    vpinsrb $1, %eax, %xmm1, %xmm1
5902; AVX512F-NEXT:    kshiftlw $13, %k0, %k1
5903; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5904; AVX512F-NEXT:    kmovw %k1, %eax
5905; AVX512F-NEXT:    vpinsrb $2, %eax, %xmm1, %xmm1
5906; AVX512F-NEXT:    kshiftlw $12, %k0, %k1
5907; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5908; AVX512F-NEXT:    kmovw %k1, %eax
5909; AVX512F-NEXT:    vpinsrb $3, %eax, %xmm1, %xmm1
5910; AVX512F-NEXT:    kshiftlw $11, %k0, %k1
5911; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5912; AVX512F-NEXT:    kmovw %k1, %eax
5913; AVX512F-NEXT:    vpinsrb $4, %eax, %xmm1, %xmm1
5914; AVX512F-NEXT:    kshiftlw $10, %k0, %k1
5915; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5916; AVX512F-NEXT:    kmovw %k1, %eax
5917; AVX512F-NEXT:    vpinsrb $5, %eax, %xmm1, %xmm1
5918; AVX512F-NEXT:    kshiftlw $9, %k0, %k1
5919; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5920; AVX512F-NEXT:    kmovw %k1, %eax
5921; AVX512F-NEXT:    vpinsrb $6, %eax, %xmm1, %xmm1
5922; AVX512F-NEXT:    kshiftlw $8, %k0, %k1
5923; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5924; AVX512F-NEXT:    kmovw %k1, %eax
5925; AVX512F-NEXT:    vpinsrb $7, %eax, %xmm1, %xmm1
5926; AVX512F-NEXT:    kshiftlw $7, %k0, %k1
5927; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5928; AVX512F-NEXT:    kmovw %k1, %eax
5929; AVX512F-NEXT:    vpinsrb $8, %eax, %xmm1, %xmm1
5930; AVX512F-NEXT:    kshiftlw $6, %k0, %k1
5931; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5932; AVX512F-NEXT:    kmovw %k1, %eax
5933; AVX512F-NEXT:    vpinsrb $9, %eax, %xmm1, %xmm1
5934; AVX512F-NEXT:    kshiftlw $5, %k0, %k1
5935; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5936; AVX512F-NEXT:    kmovw %k1, %eax
5937; AVX512F-NEXT:    vpinsrb $10, %eax, %xmm1, %xmm1
5938; AVX512F-NEXT:    kshiftlw $4, %k0, %k1
5939; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5940; AVX512F-NEXT:    kmovw %k1, %eax
5941; AVX512F-NEXT:    vpinsrb $11, %eax, %xmm1, %xmm1
5942; AVX512F-NEXT:    kshiftlw $3, %k0, %k1
5943; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5944; AVX512F-NEXT:    kmovw %k1, %eax
5945; AVX512F-NEXT:    vpinsrb $12, %eax, %xmm1, %xmm1
5946; AVX512F-NEXT:    kshiftlw $2, %k0, %k1
5947; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5948; AVX512F-NEXT:    kmovw %k1, %eax
5949; AVX512F-NEXT:    vpinsrb $13, %eax, %xmm1, %xmm1
5950; AVX512F-NEXT:    kshiftlw $1, %k0, %k1
5951; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5952; AVX512F-NEXT:    kmovw %k1, %eax
5953; AVX512F-NEXT:    vpinsrb $14, %eax, %xmm1, %xmm1
5954; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
5955; AVX512F-NEXT:    kmovw %k0, %eax
5956; AVX512F-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm1
5957; AVX512F-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
5958; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
5959; AVX512F-NEXT:    vpslld $31, %zmm0, %zmm0
5960; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
5961; AVX512F-NEXT:    kshiftlw $14, %k0, %k1
5962; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5963; AVX512F-NEXT:    kmovw %k1, %eax
5964; AVX512F-NEXT:    kshiftlw $15, %k0, %k1
5965; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5966; AVX512F-NEXT:    kmovw %k1, %ecx
5967; AVX512F-NEXT:    vmovd %ecx, %xmm0
5968; AVX512F-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0
5969; AVX512F-NEXT:    kshiftlw $13, %k0, %k1
5970; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5971; AVX512F-NEXT:    kmovw %k1, %eax
5972; AVX512F-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0
5973; AVX512F-NEXT:    kshiftlw $12, %k0, %k1
5974; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5975; AVX512F-NEXT:    kmovw %k1, %eax
5976; AVX512F-NEXT:    vpinsrb $3, %eax, %xmm0, %xmm0
5977; AVX512F-NEXT:    kshiftlw $11, %k0, %k1
5978; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5979; AVX512F-NEXT:    kmovw %k1, %eax
5980; AVX512F-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0
5981; AVX512F-NEXT:    kshiftlw $10, %k0, %k1
5982; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5983; AVX512F-NEXT:    kmovw %k1, %eax
5984; AVX512F-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0
5985; AVX512F-NEXT:    kshiftlw $9, %k0, %k1
5986; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5987; AVX512F-NEXT:    kmovw %k1, %eax
5988; AVX512F-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0
5989; AVX512F-NEXT:    kshiftlw $8, %k0, %k1
5990; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5991; AVX512F-NEXT:    kmovw %k1, %eax
5992; AVX512F-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0
5993; AVX512F-NEXT:    kshiftlw $7, %k0, %k1
5994; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5995; AVX512F-NEXT:    kmovw %k1, %eax
5996; AVX512F-NEXT:    vpinsrb $8, %eax, %xmm0, %xmm0
5997; AVX512F-NEXT:    kshiftlw $6, %k0, %k1
5998; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5999; AVX512F-NEXT:    kmovw %k1, %eax
6000; AVX512F-NEXT:    vpinsrb $9, %eax, %xmm0, %xmm0
6001; AVX512F-NEXT:    kshiftlw $5, %k0, %k1
6002; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6003; AVX512F-NEXT:    kmovw %k1, %eax
6004; AVX512F-NEXT:    vpinsrb $10, %eax, %xmm0, %xmm0
6005; AVX512F-NEXT:    kshiftlw $4, %k0, %k1
6006; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6007; AVX512F-NEXT:    kmovw %k1, %eax
6008; AVX512F-NEXT:    vpinsrb $11, %eax, %xmm0, %xmm0
6009; AVX512F-NEXT:    kshiftlw $3, %k0, %k1
6010; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6011; AVX512F-NEXT:    kmovw %k1, %eax
6012; AVX512F-NEXT:    vpinsrb $12, %eax, %xmm0, %xmm0
6013; AVX512F-NEXT:    kshiftlw $2, %k0, %k1
6014; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6015; AVX512F-NEXT:    kmovw %k1, %eax
6016; AVX512F-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0
6017; AVX512F-NEXT:    kshiftlw $1, %k0, %k1
6018; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6019; AVX512F-NEXT:    kmovw %k1, %eax
6020; AVX512F-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0
6021; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
6022; AVX512F-NEXT:    kmovw %k0, %eax
6023; AVX512F-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0
6024; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
6025; AVX512F-NEXT:    vpsllw $7, %ymm0, %ymm0
6026; AVX512F-NEXT:    vpand %ymm3, %ymm0, %ymm0
6027; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm6, %ymm0
6028; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1
6029; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm3
6030; AVX512F-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
6031; AVX512F-NEXT:    # kill: %XMM2<def> %XMM2<kill> %YMM2<kill>
6032; AVX512F-NEXT:    retq
6033;
6034; AVX512DQ-LABEL: test_cmp_v64i16:
6035; AVX512DQ:       # BB#0:
6036; AVX512DQ-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
6037; AVX512DQ-NEXT:    vpmovsxwd %ymm3, %zmm3
6038; AVX512DQ-NEXT:    vpslld $31, %zmm3, %zmm3
6039; AVX512DQ-NEXT:    vptestmd %zmm3, %zmm3, %k0
6040; AVX512DQ-NEXT:    kshiftlw $14, %k0, %k1
6041; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6042; AVX512DQ-NEXT:    kmovw %k1, %eax
6043; AVX512DQ-NEXT:    kshiftlw $15, %k0, %k1
6044; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6045; AVX512DQ-NEXT:    kmovw %k1, %ecx
6046; AVX512DQ-NEXT:    vmovd %ecx, %xmm3
6047; AVX512DQ-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
6048; AVX512DQ-NEXT:    kshiftlw $13, %k0, %k1
6049; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6050; AVX512DQ-NEXT:    kmovw %k1, %eax
6051; AVX512DQ-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
6052; AVX512DQ-NEXT:    kshiftlw $12, %k0, %k1
6053; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6054; AVX512DQ-NEXT:    kmovw %k1, %eax
6055; AVX512DQ-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
6056; AVX512DQ-NEXT:    kshiftlw $11, %k0, %k1
6057; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6058; AVX512DQ-NEXT:    kmovw %k1, %eax
6059; AVX512DQ-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
6060; AVX512DQ-NEXT:    kshiftlw $10, %k0, %k1
6061; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6062; AVX512DQ-NEXT:    kmovw %k1, %eax
6063; AVX512DQ-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
6064; AVX512DQ-NEXT:    kshiftlw $9, %k0, %k1
6065; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6066; AVX512DQ-NEXT:    kmovw %k1, %eax
6067; AVX512DQ-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
6068; AVX512DQ-NEXT:    kshiftlw $8, %k0, %k1
6069; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6070; AVX512DQ-NEXT:    kmovw %k1, %eax
6071; AVX512DQ-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
6072; AVX512DQ-NEXT:    kshiftlw $7, %k0, %k1
6073; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6074; AVX512DQ-NEXT:    kmovw %k1, %eax
6075; AVX512DQ-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
6076; AVX512DQ-NEXT:    kshiftlw $6, %k0, %k1
6077; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6078; AVX512DQ-NEXT:    kmovw %k1, %eax
6079; AVX512DQ-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
6080; AVX512DQ-NEXT:    kshiftlw $5, %k0, %k1
6081; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6082; AVX512DQ-NEXT:    kmovw %k1, %eax
6083; AVX512DQ-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
6084; AVX512DQ-NEXT:    kshiftlw $4, %k0, %k1
6085; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6086; AVX512DQ-NEXT:    kmovw %k1, %eax
6087; AVX512DQ-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
6088; AVX512DQ-NEXT:    kshiftlw $3, %k0, %k1
6089; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6090; AVX512DQ-NEXT:    kmovw %k1, %eax
6091; AVX512DQ-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
6092; AVX512DQ-NEXT:    kshiftlw $2, %k0, %k1
6093; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6094; AVX512DQ-NEXT:    kmovw %k1, %eax
6095; AVX512DQ-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
6096; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k1
6097; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6098; AVX512DQ-NEXT:    kmovw %k1, %eax
6099; AVX512DQ-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
6100; AVX512DQ-NEXT:    kshiftrw $15, %k0, %k0
6101; AVX512DQ-NEXT:    kmovw %k0, %eax
6102; AVX512DQ-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm3
6103; AVX512DQ-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
6104; AVX512DQ-NEXT:    vpmovsxwd %ymm2, %zmm2
6105; AVX512DQ-NEXT:    vpslld $31, %zmm2, %zmm2
6106; AVX512DQ-NEXT:    vptestmd %zmm2, %zmm2, %k0
6107; AVX512DQ-NEXT:    kshiftlw $14, %k0, %k1
6108; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6109; AVX512DQ-NEXT:    kmovw %k1, %eax
6110; AVX512DQ-NEXT:    kshiftlw $15, %k0, %k1
6111; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6112; AVX512DQ-NEXT:    kmovw %k1, %ecx
6113; AVX512DQ-NEXT:    vmovd %ecx, %xmm2
6114; AVX512DQ-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm2
6115; AVX512DQ-NEXT:    kshiftlw $13, %k0, %k1
6116; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6117; AVX512DQ-NEXT:    kmovw %k1, %eax
6118; AVX512DQ-NEXT:    vpinsrb $2, %eax, %xmm2, %xmm2
6119; AVX512DQ-NEXT:    kshiftlw $12, %k0, %k1
6120; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6121; AVX512DQ-NEXT:    kmovw %k1, %eax
6122; AVX512DQ-NEXT:    vpinsrb $3, %eax, %xmm2, %xmm2
6123; AVX512DQ-NEXT:    kshiftlw $11, %k0, %k1
6124; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6125; AVX512DQ-NEXT:    kmovw %k1, %eax
6126; AVX512DQ-NEXT:    vpinsrb $4, %eax, %xmm2, %xmm2
6127; AVX512DQ-NEXT:    kshiftlw $10, %k0, %k1
6128; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6129; AVX512DQ-NEXT:    kmovw %k1, %eax
6130; AVX512DQ-NEXT:    vpinsrb $5, %eax, %xmm2, %xmm2
6131; AVX512DQ-NEXT:    kshiftlw $9, %k0, %k1
6132; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6133; AVX512DQ-NEXT:    kmovw %k1, %eax
6134; AVX512DQ-NEXT:    vpinsrb $6, %eax, %xmm2, %xmm2
6135; AVX512DQ-NEXT:    kshiftlw $8, %k0, %k1
6136; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6137; AVX512DQ-NEXT:    kmovw %k1, %eax
6138; AVX512DQ-NEXT:    vpinsrb $7, %eax, %xmm2, %xmm2
6139; AVX512DQ-NEXT:    kshiftlw $7, %k0, %k1
6140; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6141; AVX512DQ-NEXT:    kmovw %k1, %eax
6142; AVX512DQ-NEXT:    vpinsrb $8, %eax, %xmm2, %xmm2
6143; AVX512DQ-NEXT:    kshiftlw $6, %k0, %k1
6144; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6145; AVX512DQ-NEXT:    kmovw %k1, %eax
6146; AVX512DQ-NEXT:    vpinsrb $9, %eax, %xmm2, %xmm2
6147; AVX512DQ-NEXT:    kshiftlw $5, %k0, %k1
6148; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6149; AVX512DQ-NEXT:    kmovw %k1, %eax
6150; AVX512DQ-NEXT:    vpinsrb $10, %eax, %xmm2, %xmm2
6151; AVX512DQ-NEXT:    kshiftlw $4, %k0, %k1
6152; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6153; AVX512DQ-NEXT:    kmovw %k1, %eax
6154; AVX512DQ-NEXT:    vpinsrb $11, %eax, %xmm2, %xmm2
6155; AVX512DQ-NEXT:    kshiftlw $3, %k0, %k1
6156; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6157; AVX512DQ-NEXT:    kmovw %k1, %eax
6158; AVX512DQ-NEXT:    vpinsrb $12, %eax, %xmm2, %xmm2
6159; AVX512DQ-NEXT:    kshiftlw $2, %k0, %k1
6160; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6161; AVX512DQ-NEXT:    kmovw %k1, %eax
6162; AVX512DQ-NEXT:    vpinsrb $13, %eax, %xmm2, %xmm2
6163; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k1
6164; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6165; AVX512DQ-NEXT:    kmovw %k1, %eax
6166; AVX512DQ-NEXT:    vpinsrb $14, %eax, %xmm2, %xmm2
6167; AVX512DQ-NEXT:    kshiftrw $15, %k0, %k0
6168; AVX512DQ-NEXT:    kmovw %k0, %eax
6169; AVX512DQ-NEXT:    vpinsrb $15, %eax, %xmm2, %xmm2
6170; AVX512DQ-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
6171; AVX512DQ-NEXT:    vpsllw $7, %ymm2, %ymm2
6172; AVX512DQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
6173; AVX512DQ-NEXT:    vpand %ymm3, %ymm2, %ymm2
6174; AVX512DQ-NEXT:    vpxor %ymm6, %ymm6, %ymm6
6175; AVX512DQ-NEXT:    vpcmpgtb %ymm2, %ymm6, %ymm2
6176; AVX512DQ-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
6177; AVX512DQ-NEXT:    vpmovsxwd %ymm1, %zmm1
6178; AVX512DQ-NEXT:    vpslld $31, %zmm1, %zmm1
6179; AVX512DQ-NEXT:    vptestmd %zmm1, %zmm1, %k0
6180; AVX512DQ-NEXT:    kshiftlw $14, %k0, %k1
6181; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6182; AVX512DQ-NEXT:    kmovw %k1, %eax
6183; AVX512DQ-NEXT:    kshiftlw $15, %k0, %k1
6184; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6185; AVX512DQ-NEXT:    kmovw %k1, %ecx
6186; AVX512DQ-NEXT:    vmovd %ecx, %xmm1
6187; AVX512DQ-NEXT:    vpinsrb $1, %eax, %xmm1, %xmm1
6188; AVX512DQ-NEXT:    kshiftlw $13, %k0, %k1
6189; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6190; AVX512DQ-NEXT:    kmovw %k1, %eax
6191; AVX512DQ-NEXT:    vpinsrb $2, %eax, %xmm1, %xmm1
6192; AVX512DQ-NEXT:    kshiftlw $12, %k0, %k1
6193; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6194; AVX512DQ-NEXT:    kmovw %k1, %eax
6195; AVX512DQ-NEXT:    vpinsrb $3, %eax, %xmm1, %xmm1
6196; AVX512DQ-NEXT:    kshiftlw $11, %k0, %k1
6197; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6198; AVX512DQ-NEXT:    kmovw %k1, %eax
6199; AVX512DQ-NEXT:    vpinsrb $4, %eax, %xmm1, %xmm1
6200; AVX512DQ-NEXT:    kshiftlw $10, %k0, %k1
6201; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6202; AVX512DQ-NEXT:    kmovw %k1, %eax
6203; AVX512DQ-NEXT:    vpinsrb $5, %eax, %xmm1, %xmm1
6204; AVX512DQ-NEXT:    kshiftlw $9, %k0, %k1
6205; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6206; AVX512DQ-NEXT:    kmovw %k1, %eax
6207; AVX512DQ-NEXT:    vpinsrb $6, %eax, %xmm1, %xmm1
6208; AVX512DQ-NEXT:    kshiftlw $8, %k0, %k1
6209; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6210; AVX512DQ-NEXT:    kmovw %k1, %eax
6211; AVX512DQ-NEXT:    vpinsrb $7, %eax, %xmm1, %xmm1
6212; AVX512DQ-NEXT:    kshiftlw $7, %k0, %k1
6213; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6214; AVX512DQ-NEXT:    kmovw %k1, %eax
6215; AVX512DQ-NEXT:    vpinsrb $8, %eax, %xmm1, %xmm1
6216; AVX512DQ-NEXT:    kshiftlw $6, %k0, %k1
6217; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6218; AVX512DQ-NEXT:    kmovw %k1, %eax
6219; AVX512DQ-NEXT:    vpinsrb $9, %eax, %xmm1, %xmm1
6220; AVX512DQ-NEXT:    kshiftlw $5, %k0, %k1
6221; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6222; AVX512DQ-NEXT:    kmovw %k1, %eax
6223; AVX512DQ-NEXT:    vpinsrb $10, %eax, %xmm1, %xmm1
6224; AVX512DQ-NEXT:    kshiftlw $4, %k0, %k1
6225; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6226; AVX512DQ-NEXT:    kmovw %k1, %eax
6227; AVX512DQ-NEXT:    vpinsrb $11, %eax, %xmm1, %xmm1
6228; AVX512DQ-NEXT:    kshiftlw $3, %k0, %k1
6229; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6230; AVX512DQ-NEXT:    kmovw %k1, %eax
6231; AVX512DQ-NEXT:    vpinsrb $12, %eax, %xmm1, %xmm1
6232; AVX512DQ-NEXT:    kshiftlw $2, %k0, %k1
6233; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6234; AVX512DQ-NEXT:    kmovw %k1, %eax
6235; AVX512DQ-NEXT:    vpinsrb $13, %eax, %xmm1, %xmm1
6236; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k1
6237; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6238; AVX512DQ-NEXT:    kmovw %k1, %eax
6239; AVX512DQ-NEXT:    vpinsrb $14, %eax, %xmm1, %xmm1
6240; AVX512DQ-NEXT:    kshiftrw $15, %k0, %k0
6241; AVX512DQ-NEXT:    kmovw %k0, %eax
6242; AVX512DQ-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm1
6243; AVX512DQ-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
6244; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm0
6245; AVX512DQ-NEXT:    vpslld $31, %zmm0, %zmm0
6246; AVX512DQ-NEXT:    vptestmd %zmm0, %zmm0, %k0
6247; AVX512DQ-NEXT:    kshiftlw $14, %k0, %k1
6248; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6249; AVX512DQ-NEXT:    kmovw %k1, %eax
6250; AVX512DQ-NEXT:    kshiftlw $15, %k0, %k1
6251; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6252; AVX512DQ-NEXT:    kmovw %k1, %ecx
6253; AVX512DQ-NEXT:    vmovd %ecx, %xmm0
6254; AVX512DQ-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0
6255; AVX512DQ-NEXT:    kshiftlw $13, %k0, %k1
6256; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6257; AVX512DQ-NEXT:    kmovw %k1, %eax
6258; AVX512DQ-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0
6259; AVX512DQ-NEXT:    kshiftlw $12, %k0, %k1
6260; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6261; AVX512DQ-NEXT:    kmovw %k1, %eax
6262; AVX512DQ-NEXT:    vpinsrb $3, %eax, %xmm0, %xmm0
6263; AVX512DQ-NEXT:    kshiftlw $11, %k0, %k1
6264; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6265; AVX512DQ-NEXT:    kmovw %k1, %eax
6266; AVX512DQ-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0
6267; AVX512DQ-NEXT:    kshiftlw $10, %k0, %k1
6268; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6269; AVX512DQ-NEXT:    kmovw %k1, %eax
6270; AVX512DQ-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0
6271; AVX512DQ-NEXT:    kshiftlw $9, %k0, %k1
6272; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6273; AVX512DQ-NEXT:    kmovw %k1, %eax
6274; AVX512DQ-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0
6275; AVX512DQ-NEXT:    kshiftlw $8, %k0, %k1
6276; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6277; AVX512DQ-NEXT:    kmovw %k1, %eax
6278; AVX512DQ-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0
6279; AVX512DQ-NEXT:    kshiftlw $7, %k0, %k1
6280; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6281; AVX512DQ-NEXT:    kmovw %k1, %eax
6282; AVX512DQ-NEXT:    vpinsrb $8, %eax, %xmm0, %xmm0
6283; AVX512DQ-NEXT:    kshiftlw $6, %k0, %k1
6284; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6285; AVX512DQ-NEXT:    kmovw %k1, %eax
6286; AVX512DQ-NEXT:    vpinsrb $9, %eax, %xmm0, %xmm0
6287; AVX512DQ-NEXT:    kshiftlw $5, %k0, %k1
6288; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6289; AVX512DQ-NEXT:    kmovw %k1, %eax
6290; AVX512DQ-NEXT:    vpinsrb $10, %eax, %xmm0, %xmm0
6291; AVX512DQ-NEXT:    kshiftlw $4, %k0, %k1
6292; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6293; AVX512DQ-NEXT:    kmovw %k1, %eax
6294; AVX512DQ-NEXT:    vpinsrb $11, %eax, %xmm0, %xmm0
6295; AVX512DQ-NEXT:    kshiftlw $3, %k0, %k1
6296; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6297; AVX512DQ-NEXT:    kmovw %k1, %eax
6298; AVX512DQ-NEXT:    vpinsrb $12, %eax, %xmm0, %xmm0
6299; AVX512DQ-NEXT:    kshiftlw $2, %k0, %k1
6300; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6301; AVX512DQ-NEXT:    kmovw %k1, %eax
6302; AVX512DQ-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0
6303; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k1
6304; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6305; AVX512DQ-NEXT:    kmovw %k1, %eax
6306; AVX512DQ-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0
6307; AVX512DQ-NEXT:    kshiftrw $15, %k0, %k0
6308; AVX512DQ-NEXT:    kmovw %k0, %eax
6309; AVX512DQ-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0
6310; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
6311; AVX512DQ-NEXT:    vpsllw $7, %ymm0, %ymm0
6312; AVX512DQ-NEXT:    vpand %ymm3, %ymm0, %ymm0
6313; AVX512DQ-NEXT:    vpcmpgtb %ymm0, %ymm6, %ymm0
6314; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm1
6315; AVX512DQ-NEXT:    vextracti128 $1, %ymm2, %xmm3
6316; AVX512DQ-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
6317; AVX512DQ-NEXT:    # kill: %XMM2<def> %XMM2<kill> %YMM2<kill>
6318; AVX512DQ-NEXT:    retq
6319;
6320; AVX512BW-LABEL: test_cmp_v64i16:
6321; AVX512BW:       # BB#0:
6322; AVX512BW-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
6323; AVX512BW-NEXT:    vpextrw $1, %xmm4, %ecx
6324; AVX512BW-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
6325; AVX512BW-NEXT:    vpextrw $1, %xmm5, %edx
6326; AVX512BW-NEXT:    xorl %eax, %eax
6327; AVX512BW-NEXT:    cmpw %cx, %dx
6328; AVX512BW-NEXT:    movw $-1, %cx
6329; AVX512BW-NEXT:    movl $0, %edx
6330; AVX512BW-NEXT:    cmovgw %cx, %dx
6331; AVX512BW-NEXT:    vmovd %xmm4, %esi
6332; AVX512BW-NEXT:    vmovd %xmm5, %edi
6333; AVX512BW-NEXT:    cmpw %si, %di
6334; AVX512BW-NEXT:    movl $0, %esi
6335; AVX512BW-NEXT:    cmovgw %cx, %si
6336; AVX512BW-NEXT:    vmovd %esi, %xmm6
6337; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm6, %xmm6
6338; AVX512BW-NEXT:    vpextrw $2, %xmm4, %edx
6339; AVX512BW-NEXT:    vpextrw $2, %xmm5, %esi
6340; AVX512BW-NEXT:    cmpw %dx, %si
6341; AVX512BW-NEXT:    movl $0, %edx
6342; AVX512BW-NEXT:    cmovgw %cx, %dx
6343; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm6, %xmm6
6344; AVX512BW-NEXT:    vpextrw $3, %xmm4, %edx
6345; AVX512BW-NEXT:    vpextrw $3, %xmm5, %esi
6346; AVX512BW-NEXT:    cmpw %dx, %si
6347; AVX512BW-NEXT:    movl $0, %edx
6348; AVX512BW-NEXT:    cmovgw %cx, %dx
6349; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm6, %xmm6
6350; AVX512BW-NEXT:    vpextrw $4, %xmm4, %edx
6351; AVX512BW-NEXT:    vpextrw $4, %xmm5, %esi
6352; AVX512BW-NEXT:    cmpw %dx, %si
6353; AVX512BW-NEXT:    movl $0, %edx
6354; AVX512BW-NEXT:    cmovgw %cx, %dx
6355; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm6, %xmm6
6356; AVX512BW-NEXT:    vpextrw $5, %xmm4, %edx
6357; AVX512BW-NEXT:    vpextrw $5, %xmm5, %esi
6358; AVX512BW-NEXT:    cmpw %dx, %si
6359; AVX512BW-NEXT:    movl $0, %edx
6360; AVX512BW-NEXT:    cmovgw %cx, %dx
6361; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm6, %xmm6
6362; AVX512BW-NEXT:    vpextrw $6, %xmm4, %edx
6363; AVX512BW-NEXT:    vpextrw $6, %xmm5, %esi
6364; AVX512BW-NEXT:    cmpw %dx, %si
6365; AVX512BW-NEXT:    movl $0, %edx
6366; AVX512BW-NEXT:    cmovgw %cx, %dx
6367; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm6, %xmm6
6368; AVX512BW-NEXT:    vpextrw $7, %xmm4, %edx
6369; AVX512BW-NEXT:    vpextrw $7, %xmm5, %esi
6370; AVX512BW-NEXT:    cmpw %dx, %si
6371; AVX512BW-NEXT:    movl $0, %edx
6372; AVX512BW-NEXT:    cmovgw %cx, %dx
6373; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm6, %xmm4
6374; AVX512BW-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
6375; AVX512BW-NEXT:    vpextrw $1, %xmm5, %edx
6376; AVX512BW-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
6377; AVX512BW-NEXT:    vpextrw $1, %xmm6, %esi
6378; AVX512BW-NEXT:    cmpw %dx, %si
6379; AVX512BW-NEXT:    movl $0, %edx
6380; AVX512BW-NEXT:    cmovgw %cx, %dx
6381; AVX512BW-NEXT:    vmovd %xmm5, %esi
6382; AVX512BW-NEXT:    vmovd %xmm6, %edi
6383; AVX512BW-NEXT:    cmpw %si, %di
6384; AVX512BW-NEXT:    movl $0, %esi
6385; AVX512BW-NEXT:    cmovgw %cx, %si
6386; AVX512BW-NEXT:    vmovd %esi, %xmm7
6387; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm7, %xmm7
6388; AVX512BW-NEXT:    vpextrw $2, %xmm5, %edx
6389; AVX512BW-NEXT:    vpextrw $2, %xmm6, %esi
6390; AVX512BW-NEXT:    cmpw %dx, %si
6391; AVX512BW-NEXT:    movl $0, %edx
6392; AVX512BW-NEXT:    cmovgw %cx, %dx
6393; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm7, %xmm7
6394; AVX512BW-NEXT:    vpextrw $3, %xmm5, %edx
6395; AVX512BW-NEXT:    vpextrw $3, %xmm6, %esi
6396; AVX512BW-NEXT:    cmpw %dx, %si
6397; AVX512BW-NEXT:    movl $0, %edx
6398; AVX512BW-NEXT:    cmovgw %cx, %dx
6399; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm7, %xmm7
6400; AVX512BW-NEXT:    vpextrw $4, %xmm5, %edx
6401; AVX512BW-NEXT:    vpextrw $4, %xmm6, %esi
6402; AVX512BW-NEXT:    cmpw %dx, %si
6403; AVX512BW-NEXT:    movl $0, %edx
6404; AVX512BW-NEXT:    cmovgw %cx, %dx
6405; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm7, %xmm7
6406; AVX512BW-NEXT:    vpextrw $5, %xmm5, %edx
6407; AVX512BW-NEXT:    vpextrw $5, %xmm6, %esi
6408; AVX512BW-NEXT:    cmpw %dx, %si
6409; AVX512BW-NEXT:    movl $0, %edx
6410; AVX512BW-NEXT:    cmovgw %cx, %dx
6411; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm7, %xmm7
6412; AVX512BW-NEXT:    vpextrw $6, %xmm5, %edx
6413; AVX512BW-NEXT:    vpextrw $6, %xmm6, %esi
6414; AVX512BW-NEXT:    cmpw %dx, %si
6415; AVX512BW-NEXT:    movl $0, %edx
6416; AVX512BW-NEXT:    cmovgw %cx, %dx
6417; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm7, %xmm7
6418; AVX512BW-NEXT:    vpextrw $7, %xmm5, %edx
6419; AVX512BW-NEXT:    vpextrw $7, %xmm6, %esi
6420; AVX512BW-NEXT:    cmpw %dx, %si
6421; AVX512BW-NEXT:    movl $0, %edx
6422; AVX512BW-NEXT:    cmovgw %cx, %dx
6423; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm7, %xmm5
6424; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
6425; AVX512BW-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
6426; AVX512BW-NEXT:    vpextrw $1, %xmm5, %edx
6427; AVX512BW-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
6428; AVX512BW-NEXT:    vpextrw $1, %xmm6, %esi
6429; AVX512BW-NEXT:    cmpw %dx, %si
6430; AVX512BW-NEXT:    movl $0, %edx
6431; AVX512BW-NEXT:    cmovgw %cx, %dx
6432; AVX512BW-NEXT:    vmovd %xmm5, %esi
6433; AVX512BW-NEXT:    vmovd %xmm6, %edi
6434; AVX512BW-NEXT:    cmpw %si, %di
6435; AVX512BW-NEXT:    movl $0, %esi
6436; AVX512BW-NEXT:    cmovgw %cx, %si
6437; AVX512BW-NEXT:    vmovd %esi, %xmm7
6438; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm7, %xmm7
6439; AVX512BW-NEXT:    vpextrw $2, %xmm5, %edx
6440; AVX512BW-NEXT:    vpextrw $2, %xmm6, %esi
6441; AVX512BW-NEXT:    cmpw %dx, %si
6442; AVX512BW-NEXT:    movl $0, %edx
6443; AVX512BW-NEXT:    cmovgw %cx, %dx
6444; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm7, %xmm7
6445; AVX512BW-NEXT:    vpextrw $3, %xmm5, %edx
6446; AVX512BW-NEXT:    vpextrw $3, %xmm6, %esi
6447; AVX512BW-NEXT:    cmpw %dx, %si
6448; AVX512BW-NEXT:    movl $0, %edx
6449; AVX512BW-NEXT:    cmovgw %cx, %dx
6450; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm7, %xmm7
6451; AVX512BW-NEXT:    vpextrw $4, %xmm5, %edx
6452; AVX512BW-NEXT:    vpextrw $4, %xmm6, %esi
6453; AVX512BW-NEXT:    cmpw %dx, %si
6454; AVX512BW-NEXT:    movl $0, %edx
6455; AVX512BW-NEXT:    cmovgw %cx, %dx
6456; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm7, %xmm7
6457; AVX512BW-NEXT:    vpextrw $5, %xmm5, %edx
6458; AVX512BW-NEXT:    vpextrw $5, %xmm6, %esi
6459; AVX512BW-NEXT:    cmpw %dx, %si
6460; AVX512BW-NEXT:    movl $0, %edx
6461; AVX512BW-NEXT:    cmovgw %cx, %dx
6462; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm7, %xmm7
6463; AVX512BW-NEXT:    vpextrw $6, %xmm5, %edx
6464; AVX512BW-NEXT:    vpextrw $6, %xmm6, %esi
6465; AVX512BW-NEXT:    cmpw %dx, %si
6466; AVX512BW-NEXT:    movl $0, %edx
6467; AVX512BW-NEXT:    cmovgw %cx, %dx
6468; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm7, %xmm7
6469; AVX512BW-NEXT:    vpextrw $7, %xmm5, %edx
6470; AVX512BW-NEXT:    vpextrw $7, %xmm6, %esi
6471; AVX512BW-NEXT:    cmpw %dx, %si
6472; AVX512BW-NEXT:    movl $0, %edx
6473; AVX512BW-NEXT:    cmovgw %cx, %dx
6474; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm7, %xmm5
6475; AVX512BW-NEXT:    vpextrw $1, %xmm2, %edx
6476; AVX512BW-NEXT:    vpextrw $1, %xmm0, %esi
6477; AVX512BW-NEXT:    cmpw %dx, %si
6478; AVX512BW-NEXT:    movl $0, %edx
6479; AVX512BW-NEXT:    cmovgw %cx, %dx
6480; AVX512BW-NEXT:    vmovd %xmm2, %esi
6481; AVX512BW-NEXT:    vmovd %xmm0, %edi
6482; AVX512BW-NEXT:    cmpw %si, %di
6483; AVX512BW-NEXT:    movl $0, %esi
6484; AVX512BW-NEXT:    cmovgw %cx, %si
6485; AVX512BW-NEXT:    vmovd %esi, %xmm6
6486; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm6, %xmm6
6487; AVX512BW-NEXT:    vpextrw $2, %xmm2, %edx
6488; AVX512BW-NEXT:    vpextrw $2, %xmm0, %esi
6489; AVX512BW-NEXT:    cmpw %dx, %si
6490; AVX512BW-NEXT:    movl $0, %edx
6491; AVX512BW-NEXT:    cmovgw %cx, %dx
6492; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm6, %xmm6
6493; AVX512BW-NEXT:    vpextrw $3, %xmm2, %edx
6494; AVX512BW-NEXT:    vpextrw $3, %xmm0, %esi
6495; AVX512BW-NEXT:    cmpw %dx, %si
6496; AVX512BW-NEXT:    movl $0, %edx
6497; AVX512BW-NEXT:    cmovgw %cx, %dx
6498; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm6, %xmm6
6499; AVX512BW-NEXT:    vpextrw $4, %xmm2, %edx
6500; AVX512BW-NEXT:    vpextrw $4, %xmm0, %esi
6501; AVX512BW-NEXT:    cmpw %dx, %si
6502; AVX512BW-NEXT:    movl $0, %edx
6503; AVX512BW-NEXT:    cmovgw %cx, %dx
6504; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm6, %xmm6
6505; AVX512BW-NEXT:    vpextrw $5, %xmm2, %edx
6506; AVX512BW-NEXT:    vpextrw $5, %xmm0, %esi
6507; AVX512BW-NEXT:    cmpw %dx, %si
6508; AVX512BW-NEXT:    movl $0, %edx
6509; AVX512BW-NEXT:    cmovgw %cx, %dx
6510; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm6, %xmm6
6511; AVX512BW-NEXT:    vpextrw $6, %xmm2, %edx
6512; AVX512BW-NEXT:    vpextrw $6, %xmm0, %esi
6513; AVX512BW-NEXT:    cmpw %dx, %si
6514; AVX512BW-NEXT:    movl $0, %edx
6515; AVX512BW-NEXT:    cmovgw %cx, %dx
6516; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm6, %xmm6
6517; AVX512BW-NEXT:    vpextrw $7, %xmm2, %edx
6518; AVX512BW-NEXT:    vpextrw $7, %xmm0, %esi
6519; AVX512BW-NEXT:    cmpw %dx, %si
6520; AVX512BW-NEXT:    movl $0, %edx
6521; AVX512BW-NEXT:    cmovgw %cx, %dx
6522; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm6, %xmm0
6523; AVX512BW-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
6524; AVX512BW-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
6525; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
6526; AVX512BW-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
6527; AVX512BW-NEXT:    vpextrw $1, %xmm2, %edx
6528; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
6529; AVX512BW-NEXT:    vpextrw $1, %xmm4, %esi
6530; AVX512BW-NEXT:    cmpw %dx, %si
6531; AVX512BW-NEXT:    movl $0, %edx
6532; AVX512BW-NEXT:    cmovgw %cx, %dx
6533; AVX512BW-NEXT:    vmovd %xmm2, %esi
6534; AVX512BW-NEXT:    vmovd %xmm4, %edi
6535; AVX512BW-NEXT:    cmpw %si, %di
6536; AVX512BW-NEXT:    movl $0, %esi
6537; AVX512BW-NEXT:    cmovgw %cx, %si
6538; AVX512BW-NEXT:    vmovd %esi, %xmm5
6539; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm5, %xmm5
6540; AVX512BW-NEXT:    vpextrw $2, %xmm2, %edx
6541; AVX512BW-NEXT:    vpextrw $2, %xmm4, %esi
6542; AVX512BW-NEXT:    cmpw %dx, %si
6543; AVX512BW-NEXT:    movl $0, %edx
6544; AVX512BW-NEXT:    cmovgw %cx, %dx
6545; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm5, %xmm5
6546; AVX512BW-NEXT:    vpextrw $3, %xmm2, %edx
6547; AVX512BW-NEXT:    vpextrw $3, %xmm4, %esi
6548; AVX512BW-NEXT:    cmpw %dx, %si
6549; AVX512BW-NEXT:    movl $0, %edx
6550; AVX512BW-NEXT:    cmovgw %cx, %dx
6551; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm5, %xmm5
6552; AVX512BW-NEXT:    vpextrw $4, %xmm2, %edx
6553; AVX512BW-NEXT:    vpextrw $4, %xmm4, %esi
6554; AVX512BW-NEXT:    cmpw %dx, %si
6555; AVX512BW-NEXT:    movl $0, %edx
6556; AVX512BW-NEXT:    cmovgw %cx, %dx
6557; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm5, %xmm5
6558; AVX512BW-NEXT:    vpextrw $5, %xmm2, %edx
6559; AVX512BW-NEXT:    vpextrw $5, %xmm4, %esi
6560; AVX512BW-NEXT:    cmpw %dx, %si
6561; AVX512BW-NEXT:    movl $0, %edx
6562; AVX512BW-NEXT:    cmovgw %cx, %dx
6563; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm5, %xmm5
6564; AVX512BW-NEXT:    vpextrw $6, %xmm2, %edx
6565; AVX512BW-NEXT:    vpextrw $6, %xmm4, %esi
6566; AVX512BW-NEXT:    cmpw %dx, %si
6567; AVX512BW-NEXT:    movl $0, %edx
6568; AVX512BW-NEXT:    cmovgw %cx, %dx
6569; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm5, %xmm5
6570; AVX512BW-NEXT:    vpextrw $7, %xmm2, %edx
6571; AVX512BW-NEXT:    vpextrw $7, %xmm4, %esi
6572; AVX512BW-NEXT:    cmpw %dx, %si
6573; AVX512BW-NEXT:    movl $0, %edx
6574; AVX512BW-NEXT:    cmovgw %cx, %dx
6575; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm5, %xmm2
6576; AVX512BW-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
6577; AVX512BW-NEXT:    vpextrw $1, %xmm4, %edx
6578; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
6579; AVX512BW-NEXT:    vpextrw $1, %xmm5, %esi
6580; AVX512BW-NEXT:    cmpw %dx, %si
6581; AVX512BW-NEXT:    movl $0, %edx
6582; AVX512BW-NEXT:    cmovgw %cx, %dx
6583; AVX512BW-NEXT:    vmovd %xmm4, %esi
6584; AVX512BW-NEXT:    vmovd %xmm5, %edi
6585; AVX512BW-NEXT:    cmpw %si, %di
6586; AVX512BW-NEXT:    movl $0, %esi
6587; AVX512BW-NEXT:    cmovgw %cx, %si
6588; AVX512BW-NEXT:    vmovd %esi, %xmm6
6589; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm6, %xmm6
6590; AVX512BW-NEXT:    vpextrw $2, %xmm4, %edx
6591; AVX512BW-NEXT:    vpextrw $2, %xmm5, %esi
6592; AVX512BW-NEXT:    cmpw %dx, %si
6593; AVX512BW-NEXT:    movl $0, %edx
6594; AVX512BW-NEXT:    cmovgw %cx, %dx
6595; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm6, %xmm6
6596; AVX512BW-NEXT:    vpextrw $3, %xmm4, %edx
6597; AVX512BW-NEXT:    vpextrw $3, %xmm5, %esi
6598; AVX512BW-NEXT:    cmpw %dx, %si
6599; AVX512BW-NEXT:    movl $0, %edx
6600; AVX512BW-NEXT:    cmovgw %cx, %dx
6601; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm6, %xmm6
6602; AVX512BW-NEXT:    vpextrw $4, %xmm4, %edx
6603; AVX512BW-NEXT:    vpextrw $4, %xmm5, %esi
6604; AVX512BW-NEXT:    cmpw %dx, %si
6605; AVX512BW-NEXT:    movl $0, %edx
6606; AVX512BW-NEXT:    cmovgw %cx, %dx
6607; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm6, %xmm6
6608; AVX512BW-NEXT:    vpextrw $5, %xmm4, %edx
6609; AVX512BW-NEXT:    vpextrw $5, %xmm5, %esi
6610; AVX512BW-NEXT:    cmpw %dx, %si
6611; AVX512BW-NEXT:    movl $0, %edx
6612; AVX512BW-NEXT:    cmovgw %cx, %dx
6613; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm6, %xmm6
6614; AVX512BW-NEXT:    vpextrw $6, %xmm4, %edx
6615; AVX512BW-NEXT:    vpextrw $6, %xmm5, %esi
6616; AVX512BW-NEXT:    cmpw %dx, %si
6617; AVX512BW-NEXT:    movl $0, %edx
6618; AVX512BW-NEXT:    cmovgw %cx, %dx
6619; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm6, %xmm6
6620; AVX512BW-NEXT:    vpextrw $7, %xmm4, %edx
6621; AVX512BW-NEXT:    vpextrw $7, %xmm5, %esi
6622; AVX512BW-NEXT:    cmpw %dx, %si
6623; AVX512BW-NEXT:    movl $0, %edx
6624; AVX512BW-NEXT:    cmovgw %cx, %dx
6625; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm6, %xmm4
6626; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
6627; AVX512BW-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
6628; AVX512BW-NEXT:    vpextrw $1, %xmm4, %edx
6629; AVX512BW-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
6630; AVX512BW-NEXT:    vpextrw $1, %xmm5, %esi
6631; AVX512BW-NEXT:    cmpw %dx, %si
6632; AVX512BW-NEXT:    movl $0, %edx
6633; AVX512BW-NEXT:    cmovgw %cx, %dx
6634; AVX512BW-NEXT:    vmovd %xmm4, %esi
6635; AVX512BW-NEXT:    vmovd %xmm5, %edi
6636; AVX512BW-NEXT:    cmpw %si, %di
6637; AVX512BW-NEXT:    movl $0, %esi
6638; AVX512BW-NEXT:    cmovgw %cx, %si
6639; AVX512BW-NEXT:    vmovd %esi, %xmm6
6640; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm6, %xmm6
6641; AVX512BW-NEXT:    vpextrw $2, %xmm4, %edx
6642; AVX512BW-NEXT:    vpextrw $2, %xmm5, %esi
6643; AVX512BW-NEXT:    cmpw %dx, %si
6644; AVX512BW-NEXT:    movl $0, %edx
6645; AVX512BW-NEXT:    cmovgw %cx, %dx
6646; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm6, %xmm6
6647; AVX512BW-NEXT:    vpextrw $3, %xmm4, %edx
6648; AVX512BW-NEXT:    vpextrw $3, %xmm5, %esi
6649; AVX512BW-NEXT:    cmpw %dx, %si
6650; AVX512BW-NEXT:    movl $0, %edx
6651; AVX512BW-NEXT:    cmovgw %cx, %dx
6652; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm6, %xmm6
6653; AVX512BW-NEXT:    vpextrw $4, %xmm4, %edx
6654; AVX512BW-NEXT:    vpextrw $4, %xmm5, %esi
6655; AVX512BW-NEXT:    cmpw %dx, %si
6656; AVX512BW-NEXT:    movl $0, %edx
6657; AVX512BW-NEXT:    cmovgw %cx, %dx
6658; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm6, %xmm6
6659; AVX512BW-NEXT:    vpextrw $5, %xmm4, %edx
6660; AVX512BW-NEXT:    vpextrw $5, %xmm5, %esi
6661; AVX512BW-NEXT:    cmpw %dx, %si
6662; AVX512BW-NEXT:    movl $0, %edx
6663; AVX512BW-NEXT:    cmovgw %cx, %dx
6664; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm6, %xmm6
6665; AVX512BW-NEXT:    vpextrw $6, %xmm4, %edx
6666; AVX512BW-NEXT:    vpextrw $6, %xmm5, %esi
6667; AVX512BW-NEXT:    cmpw %dx, %si
6668; AVX512BW-NEXT:    movl $0, %edx
6669; AVX512BW-NEXT:    cmovgw %cx, %dx
6670; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm6, %xmm6
6671; AVX512BW-NEXT:    vpextrw $7, %xmm4, %edx
6672; AVX512BW-NEXT:    vpextrw $7, %xmm5, %esi
6673; AVX512BW-NEXT:    cmpw %dx, %si
6674; AVX512BW-NEXT:    movl $0, %edx
6675; AVX512BW-NEXT:    cmovgw %cx, %dx
6676; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm6, %xmm4
6677; AVX512BW-NEXT:    vpextrw $1, %xmm3, %edx
6678; AVX512BW-NEXT:    vpextrw $1, %xmm1, %esi
6679; AVX512BW-NEXT:    cmpw %dx, %si
6680; AVX512BW-NEXT:    movl $0, %edx
6681; AVX512BW-NEXT:    cmovgw %cx, %dx
6682; AVX512BW-NEXT:    vmovd %xmm3, %esi
6683; AVX512BW-NEXT:    vmovd %xmm1, %edi
6684; AVX512BW-NEXT:    cmpw %si, %di
6685; AVX512BW-NEXT:    movl $0, %esi
6686; AVX512BW-NEXT:    cmovgw %cx, %si
6687; AVX512BW-NEXT:    vmovd %esi, %xmm5
6688; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm5, %xmm5
6689; AVX512BW-NEXT:    vpextrw $2, %xmm3, %edx
6690; AVX512BW-NEXT:    vpextrw $2, %xmm1, %esi
6691; AVX512BW-NEXT:    cmpw %dx, %si
6692; AVX512BW-NEXT:    movl $0, %edx
6693; AVX512BW-NEXT:    cmovgw %cx, %dx
6694; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm5, %xmm5
6695; AVX512BW-NEXT:    vpextrw $3, %xmm3, %edx
6696; AVX512BW-NEXT:    vpextrw $3, %xmm1, %esi
6697; AVX512BW-NEXT:    cmpw %dx, %si
6698; AVX512BW-NEXT:    movl $0, %edx
6699; AVX512BW-NEXT:    cmovgw %cx, %dx
6700; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm5, %xmm5
6701; AVX512BW-NEXT:    vpextrw $4, %xmm3, %edx
6702; AVX512BW-NEXT:    vpextrw $4, %xmm1, %esi
6703; AVX512BW-NEXT:    cmpw %dx, %si
6704; AVX512BW-NEXT:    movl $0, %edx
6705; AVX512BW-NEXT:    cmovgw %cx, %dx
6706; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm5, %xmm5
6707; AVX512BW-NEXT:    vpextrw $5, %xmm3, %edx
6708; AVX512BW-NEXT:    vpextrw $5, %xmm1, %esi
6709; AVX512BW-NEXT:    cmpw %dx, %si
6710; AVX512BW-NEXT:    movl $0, %edx
6711; AVX512BW-NEXT:    cmovgw %cx, %dx
6712; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm5, %xmm5
6713; AVX512BW-NEXT:    vpextrw $6, %xmm3, %edx
6714; AVX512BW-NEXT:    vpextrw $6, %xmm1, %esi
6715; AVX512BW-NEXT:    cmpw %dx, %si
6716; AVX512BW-NEXT:    movl $0, %edx
6717; AVX512BW-NEXT:    cmovgw %cx, %dx
6718; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm5, %xmm5
6719; AVX512BW-NEXT:    vpextrw $7, %xmm3, %edx
6720; AVX512BW-NEXT:    vpextrw $7, %xmm1, %esi
6721; AVX512BW-NEXT:    cmpw %dx, %si
6722; AVX512BW-NEXT:    cmovgw %cx, %ax
6723; AVX512BW-NEXT:    vpinsrw $7, %eax, %xmm5, %xmm1
6724; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
6725; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
6726; AVX512BW-NEXT:    vpmovwb %zmm1, %ymm1
6727; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
6728; AVX512BW-NEXT:    retq
6729  %1 = icmp sgt <64 x i16> %a0, %a1
6730  ret <64 x i1> %1
6731}
6732
6733define <128 x i1> @test_cmp_v128i8(<128 x i8> %a0, <128 x i8> %a1) nounwind {
6734; SSE2-LABEL: test_cmp_v128i8:
6735; SSE2:       # BB#0:
6736; SSE2-NEXT:    pushq %rax
6737; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
6738; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
6739; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
6740; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
6741; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
6742; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
6743; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
6744; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
6745; SSE2-NEXT:    movdqa %xmm7, -{{[0-9]+}}(%rsp)
6746; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6747; SSE2-NEXT:    andb $1, %al
6748; SSE2-NEXT:    movb %al, 14(%rdi)
6749; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
6750; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6751; SSE2-NEXT:    andb $1, %al
6752; SSE2-NEXT:    movb %al, 12(%rdi)
6753; SSE2-NEXT:    movdqa %xmm5, -{{[0-9]+}}(%rsp)
6754; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6755; SSE2-NEXT:    andb $1, %al
6756; SSE2-NEXT:    movb %al, 10(%rdi)
6757; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
6758; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6759; SSE2-NEXT:    andb $1, %al
6760; SSE2-NEXT:    movb %al, 8(%rdi)
6761; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
6762; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6763; SSE2-NEXT:    andb $1, %al
6764; SSE2-NEXT:    movb %al, 6(%rdi)
6765; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
6766; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6767; SSE2-NEXT:    andb $1, %al
6768; SSE2-NEXT:    movb %al, 4(%rdi)
6769; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
6770; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6771; SSE2-NEXT:    andb $1, %al
6772; SSE2-NEXT:    movb %al, 2(%rdi)
6773; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
6774; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6775; SSE2-NEXT:    andb $1, %al
6776; SSE2-NEXT:    movb %al, (%rdi)
6777; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6778; SSE2-NEXT:    andb $1, %al
6779; SSE2-NEXT:    movb %al, 14(%rdi)
6780; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6781; SSE2-NEXT:    andb $1, %al
6782; SSE2-NEXT:    movb %al, 12(%rdi)
6783; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6784; SSE2-NEXT:    andb $1, %al
6785; SSE2-NEXT:    movb %al, 10(%rdi)
6786; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6787; SSE2-NEXT:    andb $1, %al
6788; SSE2-NEXT:    movb %al, 8(%rdi)
6789; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6790; SSE2-NEXT:    andb $1, %al
6791; SSE2-NEXT:    movb %al, 6(%rdi)
6792; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6793; SSE2-NEXT:    andb $1, %al
6794; SSE2-NEXT:    movb %al, 4(%rdi)
6795; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6796; SSE2-NEXT:    andb $1, %al
6797; SSE2-NEXT:    movb %al, 2(%rdi)
6798; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6799; SSE2-NEXT:    andb $1, %al
6800; SSE2-NEXT:    movb %al, (%rdi)
6801; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6802; SSE2-NEXT:    andb $1, %al
6803; SSE2-NEXT:    movb %al, 14(%rdi)
6804; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6805; SSE2-NEXT:    andb $1, %al
6806; SSE2-NEXT:    movb %al, 12(%rdi)
6807; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6808; SSE2-NEXT:    andb $1, %al
6809; SSE2-NEXT:    movb %al, 10(%rdi)
6810; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6811; SSE2-NEXT:    andb $1, %al
6812; SSE2-NEXT:    movb %al, 8(%rdi)
6813; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6814; SSE2-NEXT:    andb $1, %al
6815; SSE2-NEXT:    movb %al, 6(%rdi)
6816; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6817; SSE2-NEXT:    andb $1, %al
6818; SSE2-NEXT:    movb %al, 4(%rdi)
6819; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6820; SSE2-NEXT:    andb $1, %al
6821; SSE2-NEXT:    movb %al, 2(%rdi)
6822; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6823; SSE2-NEXT:    andb $1, %al
6824; SSE2-NEXT:    movb %al, (%rdi)
6825; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6826; SSE2-NEXT:    andb $1, %al
6827; SSE2-NEXT:    movb %al, 14(%rdi)
6828; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6829; SSE2-NEXT:    andb $1, %al
6830; SSE2-NEXT:    movb %al, 12(%rdi)
6831; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6832; SSE2-NEXT:    andb $1, %al
6833; SSE2-NEXT:    movb %al, 10(%rdi)
6834; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6835; SSE2-NEXT:    andb $1, %al
6836; SSE2-NEXT:    movb %al, 8(%rdi)
6837; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6838; SSE2-NEXT:    andb $1, %al
6839; SSE2-NEXT:    movb %al, 6(%rdi)
6840; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6841; SSE2-NEXT:    andb $1, %al
6842; SSE2-NEXT:    movb %al, 4(%rdi)
6843; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6844; SSE2-NEXT:    andb $1, %al
6845; SSE2-NEXT:    movb %al, 2(%rdi)
6846; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6847; SSE2-NEXT:    andb $1, %al
6848; SSE2-NEXT:    movb %al, (%rdi)
6849; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6850; SSE2-NEXT:    andb $1, %al
6851; SSE2-NEXT:    movb %al, 14(%rdi)
6852; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6853; SSE2-NEXT:    andb $1, %al
6854; SSE2-NEXT:    movb %al, 12(%rdi)
6855; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6856; SSE2-NEXT:    andb $1, %al
6857; SSE2-NEXT:    movb %al, 10(%rdi)
6858; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6859; SSE2-NEXT:    andb $1, %al
6860; SSE2-NEXT:    movb %al, 8(%rdi)
6861; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6862; SSE2-NEXT:    andb $1, %al
6863; SSE2-NEXT:    movb %al, 6(%rdi)
6864; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6865; SSE2-NEXT:    andb $1, %al
6866; SSE2-NEXT:    movb %al, 4(%rdi)
6867; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6868; SSE2-NEXT:    andb $1, %al
6869; SSE2-NEXT:    movb %al, 2(%rdi)
6870; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6871; SSE2-NEXT:    andb $1, %al
6872; SSE2-NEXT:    movb %al, (%rdi)
6873; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6874; SSE2-NEXT:    andb $1, %al
6875; SSE2-NEXT:    movb %al, 14(%rdi)
6876; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6877; SSE2-NEXT:    andb $1, %al
6878; SSE2-NEXT:    movb %al, 12(%rdi)
6879; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6880; SSE2-NEXT:    andb $1, %al
6881; SSE2-NEXT:    movb %al, 10(%rdi)
6882; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6883; SSE2-NEXT:    andb $1, %al
6884; SSE2-NEXT:    movb %al, 8(%rdi)
6885; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6886; SSE2-NEXT:    andb $1, %al
6887; SSE2-NEXT:    movb %al, 6(%rdi)
6888; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6889; SSE2-NEXT:    andb $1, %al
6890; SSE2-NEXT:    movb %al, 4(%rdi)
6891; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6892; SSE2-NEXT:    andb $1, %al
6893; SSE2-NEXT:    movb %al, 2(%rdi)
6894; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6895; SSE2-NEXT:    andb $1, %al
6896; SSE2-NEXT:    movb %al, (%rdi)
6897; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6898; SSE2-NEXT:    andb $1, %al
6899; SSE2-NEXT:    movb %al, 14(%rdi)
6900; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6901; SSE2-NEXT:    andb $1, %al
6902; SSE2-NEXT:    movb %al, 12(%rdi)
6903; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6904; SSE2-NEXT:    andb $1, %al
6905; SSE2-NEXT:    movb %al, 10(%rdi)
6906; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6907; SSE2-NEXT:    andb $1, %al
6908; SSE2-NEXT:    movb %al, 8(%rdi)
6909; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6910; SSE2-NEXT:    andb $1, %al
6911; SSE2-NEXT:    movb %al, 6(%rdi)
6912; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6913; SSE2-NEXT:    andb $1, %al
6914; SSE2-NEXT:    movb %al, 4(%rdi)
6915; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6916; SSE2-NEXT:    andb $1, %al
6917; SSE2-NEXT:    movb %al, 2(%rdi)
6918; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6919; SSE2-NEXT:    andb $1, %al
6920; SSE2-NEXT:    movb %al, (%rdi)
6921; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6922; SSE2-NEXT:    andb $1, %al
6923; SSE2-NEXT:    movb %al, 14(%rdi)
6924; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6925; SSE2-NEXT:    andb $1, %al
6926; SSE2-NEXT:    movb %al, 12(%rdi)
6927; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6928; SSE2-NEXT:    andb $1, %al
6929; SSE2-NEXT:    movb %al, 10(%rdi)
6930; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6931; SSE2-NEXT:    andb $1, %al
6932; SSE2-NEXT:    movb %al, 8(%rdi)
6933; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6934; SSE2-NEXT:    andb $1, %al
6935; SSE2-NEXT:    movb %al, 6(%rdi)
6936; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6937; SSE2-NEXT:    andb $1, %al
6938; SSE2-NEXT:    movb %al, 4(%rdi)
6939; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6940; SSE2-NEXT:    andb $1, %al
6941; SSE2-NEXT:    movb %al, 2(%rdi)
6942; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6943; SSE2-NEXT:    andb $1, %al
6944; SSE2-NEXT:    movb %al, (%rdi)
6945; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6946; SSE2-NEXT:    andb $1, %al
6947; SSE2-NEXT:    movb %al, 14(%rdi)
6948; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6949; SSE2-NEXT:    andb $1, %al
6950; SSE2-NEXT:    movb %al, 12(%rdi)
6951; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6952; SSE2-NEXT:    andb $1, %al
6953; SSE2-NEXT:    movb %al, 10(%rdi)
6954; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6955; SSE2-NEXT:    andb $1, %al
6956; SSE2-NEXT:    movb %al, 8(%rdi)
6957; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6958; SSE2-NEXT:    andb $1, %al
6959; SSE2-NEXT:    movb %al, 6(%rdi)
6960; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6961; SSE2-NEXT:    andb $1, %al
6962; SSE2-NEXT:    movb %al, 4(%rdi)
6963; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6964; SSE2-NEXT:    andb $1, %al
6965; SSE2-NEXT:    movb %al, 2(%rdi)
6966; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6967; SSE2-NEXT:    andb $1, %al
6968; SSE2-NEXT:    movb %al, (%rdi)
6969; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6970; SSE2-NEXT:    andb $1, %al
6971; SSE2-NEXT:    movb %al, 14(%rdi)
6972; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6973; SSE2-NEXT:    andb $1, %al
6974; SSE2-NEXT:    movb %al, 12(%rdi)
6975; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6976; SSE2-NEXT:    andb $1, %al
6977; SSE2-NEXT:    movb %al, 10(%rdi)
6978; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6979; SSE2-NEXT:    andb $1, %al
6980; SSE2-NEXT:    movb %al, 8(%rdi)
6981; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6982; SSE2-NEXT:    andb $1, %al
6983; SSE2-NEXT:    movb %al, 6(%rdi)
6984; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6985; SSE2-NEXT:    andb $1, %al
6986; SSE2-NEXT:    movb %al, 4(%rdi)
6987; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6988; SSE2-NEXT:    andb $1, %al
6989; SSE2-NEXT:    movb %al, 2(%rdi)
6990; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6991; SSE2-NEXT:    andb $1, %al
6992; SSE2-NEXT:    movb %al, (%rdi)
6993; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6994; SSE2-NEXT:    andb $1, %al
6995; SSE2-NEXT:    movb %al, 14(%rdi)
6996; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6997; SSE2-NEXT:    andb $1, %al
6998; SSE2-NEXT:    movb %al, 12(%rdi)
6999; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7000; SSE2-NEXT:    andb $1, %al
7001; SSE2-NEXT:    movb %al, 10(%rdi)
7002; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7003; SSE2-NEXT:    andb $1, %al
7004; SSE2-NEXT:    movb %al, 8(%rdi)
7005; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7006; SSE2-NEXT:    andb $1, %al
7007; SSE2-NEXT:    movb %al, 6(%rdi)
7008; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7009; SSE2-NEXT:    andb $1, %al
7010; SSE2-NEXT:    movb %al, 4(%rdi)
7011; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7012; SSE2-NEXT:    andb $1, %al
7013; SSE2-NEXT:    movb %al, 2(%rdi)
7014; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7015; SSE2-NEXT:    andb $1, %al
7016; SSE2-NEXT:    movb %al, (%rdi)
7017; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7018; SSE2-NEXT:    andb $1, %al
7019; SSE2-NEXT:    movb %al, 14(%rdi)
7020; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7021; SSE2-NEXT:    andb $1, %al
7022; SSE2-NEXT:    movb %al, 12(%rdi)
7023; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7024; SSE2-NEXT:    andb $1, %al
7025; SSE2-NEXT:    movb %al, 10(%rdi)
7026; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7027; SSE2-NEXT:    andb $1, %al
7028; SSE2-NEXT:    movb %al, 8(%rdi)
7029; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7030; SSE2-NEXT:    andb $1, %al
7031; SSE2-NEXT:    movb %al, 6(%rdi)
7032; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7033; SSE2-NEXT:    andb $1, %al
7034; SSE2-NEXT:    movb %al, 4(%rdi)
7035; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7036; SSE2-NEXT:    andb $1, %al
7037; SSE2-NEXT:    movb %al, 2(%rdi)
7038; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7039; SSE2-NEXT:    andb $1, %al
7040; SSE2-NEXT:    movb %al, (%rdi)
7041; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7042; SSE2-NEXT:    andb $1, %al
7043; SSE2-NEXT:    movb %al, 14(%rdi)
7044; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7045; SSE2-NEXT:    andb $1, %al
7046; SSE2-NEXT:    movb %al, 12(%rdi)
7047; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7048; SSE2-NEXT:    andb $1, %al
7049; SSE2-NEXT:    movb %al, 10(%rdi)
7050; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7051; SSE2-NEXT:    andb $1, %al
7052; SSE2-NEXT:    movb %al, 8(%rdi)
7053; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7054; SSE2-NEXT:    andb $1, %al
7055; SSE2-NEXT:    movb %al, 6(%rdi)
7056; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7057; SSE2-NEXT:    andb $1, %al
7058; SSE2-NEXT:    movb %al, 4(%rdi)
7059; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7060; SSE2-NEXT:    andb $1, %al
7061; SSE2-NEXT:    movb %al, 2(%rdi)
7062; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7063; SSE2-NEXT:    andb $1, %al
7064; SSE2-NEXT:    movb %al, (%rdi)
7065; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7066; SSE2-NEXT:    andb $1, %al
7067; SSE2-NEXT:    movb %al, 14(%rdi)
7068; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7069; SSE2-NEXT:    andb $1, %al
7070; SSE2-NEXT:    movb %al, 12(%rdi)
7071; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7072; SSE2-NEXT:    andb $1, %al
7073; SSE2-NEXT:    movb %al, 10(%rdi)
7074; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7075; SSE2-NEXT:    andb $1, %al
7076; SSE2-NEXT:    movb %al, 8(%rdi)
7077; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7078; SSE2-NEXT:    andb $1, %al
7079; SSE2-NEXT:    movb %al, 6(%rdi)
7080; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7081; SSE2-NEXT:    andb $1, %al
7082; SSE2-NEXT:    movb %al, 4(%rdi)
7083; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7084; SSE2-NEXT:    andb $1, %al
7085; SSE2-NEXT:    movb %al, 2(%rdi)
7086; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7087; SSE2-NEXT:    andb $1, %al
7088; SSE2-NEXT:    movb %al, (%rdi)
7089; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7090; SSE2-NEXT:    andb $1, %al
7091; SSE2-NEXT:    movb %al, 14(%rdi)
7092; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7093; SSE2-NEXT:    andb $1, %al
7094; SSE2-NEXT:    movb %al, 12(%rdi)
7095; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7096; SSE2-NEXT:    andb $1, %al
7097; SSE2-NEXT:    movb %al, 10(%rdi)
7098; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7099; SSE2-NEXT:    andb $1, %al
7100; SSE2-NEXT:    movb %al, 8(%rdi)
7101; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7102; SSE2-NEXT:    andb $1, %al
7103; SSE2-NEXT:    movb %al, 6(%rdi)
7104; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7105; SSE2-NEXT:    andb $1, %al
7106; SSE2-NEXT:    movb %al, 4(%rdi)
7107; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7108; SSE2-NEXT:    andb $1, %al
7109; SSE2-NEXT:    movb %al, 2(%rdi)
7110; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7111; SSE2-NEXT:    andb $1, %al
7112; SSE2-NEXT:    movb %al, (%rdi)
7113; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7114; SSE2-NEXT:    andb $1, %al
7115; SSE2-NEXT:    movb %al, 14(%rdi)
7116; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7117; SSE2-NEXT:    andb $1, %al
7118; SSE2-NEXT:    movb %al, 12(%rdi)
7119; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7120; SSE2-NEXT:    andb $1, %al
7121; SSE2-NEXT:    movb %al, 10(%rdi)
7122; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7123; SSE2-NEXT:    andb $1, %al
7124; SSE2-NEXT:    movb %al, 8(%rdi)
7125; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7126; SSE2-NEXT:    andb $1, %al
7127; SSE2-NEXT:    movb %al, 6(%rdi)
7128; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7129; SSE2-NEXT:    andb $1, %al
7130; SSE2-NEXT:    movb %al, 4(%rdi)
7131; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7132; SSE2-NEXT:    andb $1, %al
7133; SSE2-NEXT:    movb %al, 2(%rdi)
7134; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7135; SSE2-NEXT:    andb $1, %al
7136; SSE2-NEXT:    movb %al, (%rdi)
7137; SSE2-NEXT:    movq %rdi, %rax
7138; SSE2-NEXT:    popq %rcx
7139; SSE2-NEXT:    retq
7140;
7141; SSE42-LABEL: test_cmp_v128i8:
7142; SSE42:       # BB#0:
7143; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
7144; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
7145; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
7146; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
7147; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
7148; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
7149; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
7150; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
7151; SSE42-NEXT:    pextrb $15, %xmm7, %eax
7152; SSE42-NEXT:    andb $1, %al
7153; SSE42-NEXT:    movb %al, 14(%rdi)
7154; SSE42-NEXT:    pextrb $14, %xmm7, %eax
7155; SSE42-NEXT:    andb $1, %al
7156; SSE42-NEXT:    movb %al, 14(%rdi)
7157; SSE42-NEXT:    pextrb $13, %xmm7, %eax
7158; SSE42-NEXT:    andb $1, %al
7159; SSE42-NEXT:    movb %al, 14(%rdi)
7160; SSE42-NEXT:    pextrb $12, %xmm7, %eax
7161; SSE42-NEXT:    andb $1, %al
7162; SSE42-NEXT:    movb %al, 14(%rdi)
7163; SSE42-NEXT:    pextrb $11, %xmm7, %eax
7164; SSE42-NEXT:    andb $1, %al
7165; SSE42-NEXT:    movb %al, 14(%rdi)
7166; SSE42-NEXT:    pextrb $10, %xmm7, %eax
7167; SSE42-NEXT:    andb $1, %al
7168; SSE42-NEXT:    movb %al, 14(%rdi)
7169; SSE42-NEXT:    pextrb $9, %xmm7, %eax
7170; SSE42-NEXT:    andb $1, %al
7171; SSE42-NEXT:    movb %al, 14(%rdi)
7172; SSE42-NEXT:    pextrb $8, %xmm7, %eax
7173; SSE42-NEXT:    andb $1, %al
7174; SSE42-NEXT:    movb %al, 14(%rdi)
7175; SSE42-NEXT:    pextrb $7, %xmm7, %eax
7176; SSE42-NEXT:    andb $1, %al
7177; SSE42-NEXT:    movb %al, 14(%rdi)
7178; SSE42-NEXT:    pextrb $6, %xmm7, %eax
7179; SSE42-NEXT:    andb $1, %al
7180; SSE42-NEXT:    movb %al, 14(%rdi)
7181; SSE42-NEXT:    pextrb $5, %xmm7, %eax
7182; SSE42-NEXT:    andb $1, %al
7183; SSE42-NEXT:    movb %al, 14(%rdi)
7184; SSE42-NEXT:    pextrb $4, %xmm7, %eax
7185; SSE42-NEXT:    andb $1, %al
7186; SSE42-NEXT:    movb %al, 14(%rdi)
7187; SSE42-NEXT:    pextrb $3, %xmm7, %eax
7188; SSE42-NEXT:    andb $1, %al
7189; SSE42-NEXT:    movb %al, 14(%rdi)
7190; SSE42-NEXT:    pextrb $2, %xmm7, %eax
7191; SSE42-NEXT:    andb $1, %al
7192; SSE42-NEXT:    movb %al, 14(%rdi)
7193; SSE42-NEXT:    pextrb $1, %xmm7, %eax
7194; SSE42-NEXT:    andb $1, %al
7195; SSE42-NEXT:    movb %al, 14(%rdi)
7196; SSE42-NEXT:    pextrb $0, %xmm7, %eax
7197; SSE42-NEXT:    andb $1, %al
7198; SSE42-NEXT:    movb %al, 14(%rdi)
7199; SSE42-NEXT:    pextrb $15, %xmm6, %eax
7200; SSE42-NEXT:    andb $1, %al
7201; SSE42-NEXT:    movb %al, 12(%rdi)
7202; SSE42-NEXT:    pextrb $14, %xmm6, %eax
7203; SSE42-NEXT:    andb $1, %al
7204; SSE42-NEXT:    movb %al, 12(%rdi)
7205; SSE42-NEXT:    pextrb $13, %xmm6, %eax
7206; SSE42-NEXT:    andb $1, %al
7207; SSE42-NEXT:    movb %al, 12(%rdi)
7208; SSE42-NEXT:    pextrb $12, %xmm6, %eax
7209; SSE42-NEXT:    andb $1, %al
7210; SSE42-NEXT:    movb %al, 12(%rdi)
7211; SSE42-NEXT:    pextrb $11, %xmm6, %eax
7212; SSE42-NEXT:    andb $1, %al
7213; SSE42-NEXT:    movb %al, 12(%rdi)
7214; SSE42-NEXT:    pextrb $10, %xmm6, %eax
7215; SSE42-NEXT:    andb $1, %al
7216; SSE42-NEXT:    movb %al, 12(%rdi)
7217; SSE42-NEXT:    pextrb $9, %xmm6, %eax
7218; SSE42-NEXT:    andb $1, %al
7219; SSE42-NEXT:    movb %al, 12(%rdi)
7220; SSE42-NEXT:    pextrb $8, %xmm6, %eax
7221; SSE42-NEXT:    andb $1, %al
7222; SSE42-NEXT:    movb %al, 12(%rdi)
7223; SSE42-NEXT:    pextrb $7, %xmm6, %eax
7224; SSE42-NEXT:    andb $1, %al
7225; SSE42-NEXT:    movb %al, 12(%rdi)
7226; SSE42-NEXT:    pextrb $6, %xmm6, %eax
7227; SSE42-NEXT:    andb $1, %al
7228; SSE42-NEXT:    movb %al, 12(%rdi)
7229; SSE42-NEXT:    pextrb $5, %xmm6, %eax
7230; SSE42-NEXT:    andb $1, %al
7231; SSE42-NEXT:    movb %al, 12(%rdi)
7232; SSE42-NEXT:    pextrb $4, %xmm6, %eax
7233; SSE42-NEXT:    andb $1, %al
7234; SSE42-NEXT:    movb %al, 12(%rdi)
7235; SSE42-NEXT:    pextrb $3, %xmm6, %eax
7236; SSE42-NEXT:    andb $1, %al
7237; SSE42-NEXT:    movb %al, 12(%rdi)
7238; SSE42-NEXT:    pextrb $2, %xmm6, %eax
7239; SSE42-NEXT:    andb $1, %al
7240; SSE42-NEXT:    movb %al, 12(%rdi)
7241; SSE42-NEXT:    pextrb $1, %xmm6, %eax
7242; SSE42-NEXT:    andb $1, %al
7243; SSE42-NEXT:    movb %al, 12(%rdi)
7244; SSE42-NEXT:    pextrb $0, %xmm6, %eax
7245; SSE42-NEXT:    andb $1, %al
7246; SSE42-NEXT:    movb %al, 12(%rdi)
7247; SSE42-NEXT:    pextrb $15, %xmm5, %eax
7248; SSE42-NEXT:    andb $1, %al
7249; SSE42-NEXT:    movb %al, 10(%rdi)
7250; SSE42-NEXT:    pextrb $14, %xmm5, %eax
7251; SSE42-NEXT:    andb $1, %al
7252; SSE42-NEXT:    movb %al, 10(%rdi)
7253; SSE42-NEXT:    pextrb $13, %xmm5, %eax
7254; SSE42-NEXT:    andb $1, %al
7255; SSE42-NEXT:    movb %al, 10(%rdi)
7256; SSE42-NEXT:    pextrb $12, %xmm5, %eax
7257; SSE42-NEXT:    andb $1, %al
7258; SSE42-NEXT:    movb %al, 10(%rdi)
7259; SSE42-NEXT:    pextrb $11, %xmm5, %eax
7260; SSE42-NEXT:    andb $1, %al
7261; SSE42-NEXT:    movb %al, 10(%rdi)
7262; SSE42-NEXT:    pextrb $10, %xmm5, %eax
7263; SSE42-NEXT:    andb $1, %al
7264; SSE42-NEXT:    movb %al, 10(%rdi)
7265; SSE42-NEXT:    pextrb $9, %xmm5, %eax
7266; SSE42-NEXT:    andb $1, %al
7267; SSE42-NEXT:    movb %al, 10(%rdi)
7268; SSE42-NEXT:    pextrb $8, %xmm5, %eax
7269; SSE42-NEXT:    andb $1, %al
7270; SSE42-NEXT:    movb %al, 10(%rdi)
7271; SSE42-NEXT:    pextrb $7, %xmm5, %eax
7272; SSE42-NEXT:    andb $1, %al
7273; SSE42-NEXT:    movb %al, 10(%rdi)
7274; SSE42-NEXT:    pextrb $6, %xmm5, %eax
7275; SSE42-NEXT:    andb $1, %al
7276; SSE42-NEXT:    movb %al, 10(%rdi)
7277; SSE42-NEXT:    pextrb $5, %xmm5, %eax
7278; SSE42-NEXT:    andb $1, %al
7279; SSE42-NEXT:    movb %al, 10(%rdi)
7280; SSE42-NEXT:    pextrb $4, %xmm5, %eax
7281; SSE42-NEXT:    andb $1, %al
7282; SSE42-NEXT:    movb %al, 10(%rdi)
7283; SSE42-NEXT:    pextrb $3, %xmm5, %eax
7284; SSE42-NEXT:    andb $1, %al
7285; SSE42-NEXT:    movb %al, 10(%rdi)
7286; SSE42-NEXT:    pextrb $2, %xmm5, %eax
7287; SSE42-NEXT:    andb $1, %al
7288; SSE42-NEXT:    movb %al, 10(%rdi)
7289; SSE42-NEXT:    pextrb $1, %xmm5, %eax
7290; SSE42-NEXT:    andb $1, %al
7291; SSE42-NEXT:    movb %al, 10(%rdi)
7292; SSE42-NEXT:    pextrb $0, %xmm5, %eax
7293; SSE42-NEXT:    andb $1, %al
7294; SSE42-NEXT:    movb %al, 10(%rdi)
7295; SSE42-NEXT:    pextrb $15, %xmm4, %eax
7296; SSE42-NEXT:    andb $1, %al
7297; SSE42-NEXT:    movb %al, 8(%rdi)
7298; SSE42-NEXT:    pextrb $14, %xmm4, %eax
7299; SSE42-NEXT:    andb $1, %al
7300; SSE42-NEXT:    movb %al, 8(%rdi)
7301; SSE42-NEXT:    pextrb $13, %xmm4, %eax
7302; SSE42-NEXT:    andb $1, %al
7303; SSE42-NEXT:    movb %al, 8(%rdi)
7304; SSE42-NEXT:    pextrb $12, %xmm4, %eax
7305; SSE42-NEXT:    andb $1, %al
7306; SSE42-NEXT:    movb %al, 8(%rdi)
7307; SSE42-NEXT:    pextrb $11, %xmm4, %eax
7308; SSE42-NEXT:    andb $1, %al
7309; SSE42-NEXT:    movb %al, 8(%rdi)
7310; SSE42-NEXT:    pextrb $10, %xmm4, %eax
7311; SSE42-NEXT:    andb $1, %al
7312; SSE42-NEXT:    movb %al, 8(%rdi)
7313; SSE42-NEXT:    pextrb $9, %xmm4, %eax
7314; SSE42-NEXT:    andb $1, %al
7315; SSE42-NEXT:    movb %al, 8(%rdi)
7316; SSE42-NEXT:    pextrb $8, %xmm4, %eax
7317; SSE42-NEXT:    andb $1, %al
7318; SSE42-NEXT:    movb %al, 8(%rdi)
7319; SSE42-NEXT:    pextrb $7, %xmm4, %eax
7320; SSE42-NEXT:    andb $1, %al
7321; SSE42-NEXT:    movb %al, 8(%rdi)
7322; SSE42-NEXT:    pextrb $6, %xmm4, %eax
7323; SSE42-NEXT:    andb $1, %al
7324; SSE42-NEXT:    movb %al, 8(%rdi)
7325; SSE42-NEXT:    pextrb $5, %xmm4, %eax
7326; SSE42-NEXT:    andb $1, %al
7327; SSE42-NEXT:    movb %al, 8(%rdi)
7328; SSE42-NEXT:    pextrb $4, %xmm4, %eax
7329; SSE42-NEXT:    andb $1, %al
7330; SSE42-NEXT:    movb %al, 8(%rdi)
7331; SSE42-NEXT:    pextrb $3, %xmm4, %eax
7332; SSE42-NEXT:    andb $1, %al
7333; SSE42-NEXT:    movb %al, 8(%rdi)
7334; SSE42-NEXT:    pextrb $2, %xmm4, %eax
7335; SSE42-NEXT:    andb $1, %al
7336; SSE42-NEXT:    movb %al, 8(%rdi)
7337; SSE42-NEXT:    pextrb $1, %xmm4, %eax
7338; SSE42-NEXT:    andb $1, %al
7339; SSE42-NEXT:    movb %al, 8(%rdi)
7340; SSE42-NEXT:    pextrb $0, %xmm4, %eax
7341; SSE42-NEXT:    andb $1, %al
7342; SSE42-NEXT:    movb %al, 8(%rdi)
7343; SSE42-NEXT:    pextrb $15, %xmm3, %eax
7344; SSE42-NEXT:    andb $1, %al
7345; SSE42-NEXT:    movb %al, 6(%rdi)
7346; SSE42-NEXT:    pextrb $14, %xmm3, %eax
7347; SSE42-NEXT:    andb $1, %al
7348; SSE42-NEXT:    movb %al, 6(%rdi)
7349; SSE42-NEXT:    pextrb $13, %xmm3, %eax
7350; SSE42-NEXT:    andb $1, %al
7351; SSE42-NEXT:    movb %al, 6(%rdi)
7352; SSE42-NEXT:    pextrb $12, %xmm3, %eax
7353; SSE42-NEXT:    andb $1, %al
7354; SSE42-NEXT:    movb %al, 6(%rdi)
7355; SSE42-NEXT:    pextrb $11, %xmm3, %eax
7356; SSE42-NEXT:    andb $1, %al
7357; SSE42-NEXT:    movb %al, 6(%rdi)
7358; SSE42-NEXT:    pextrb $10, %xmm3, %eax
7359; SSE42-NEXT:    andb $1, %al
7360; SSE42-NEXT:    movb %al, 6(%rdi)
7361; SSE42-NEXT:    pextrb $9, %xmm3, %eax
7362; SSE42-NEXT:    andb $1, %al
7363; SSE42-NEXT:    movb %al, 6(%rdi)
7364; SSE42-NEXT:    pextrb $8, %xmm3, %eax
7365; SSE42-NEXT:    andb $1, %al
7366; SSE42-NEXT:    movb %al, 6(%rdi)
7367; SSE42-NEXT:    pextrb $7, %xmm3, %eax
7368; SSE42-NEXT:    andb $1, %al
7369; SSE42-NEXT:    movb %al, 6(%rdi)
7370; SSE42-NEXT:    pextrb $6, %xmm3, %eax
7371; SSE42-NEXT:    andb $1, %al
7372; SSE42-NEXT:    movb %al, 6(%rdi)
7373; SSE42-NEXT:    pextrb $5, %xmm3, %eax
7374; SSE42-NEXT:    andb $1, %al
7375; SSE42-NEXT:    movb %al, 6(%rdi)
7376; SSE42-NEXT:    pextrb $4, %xmm3, %eax
7377; SSE42-NEXT:    andb $1, %al
7378; SSE42-NEXT:    movb %al, 6(%rdi)
7379; SSE42-NEXT:    pextrb $3, %xmm3, %eax
7380; SSE42-NEXT:    andb $1, %al
7381; SSE42-NEXT:    movb %al, 6(%rdi)
7382; SSE42-NEXT:    pextrb $2, %xmm3, %eax
7383; SSE42-NEXT:    andb $1, %al
7384; SSE42-NEXT:    movb %al, 6(%rdi)
7385; SSE42-NEXT:    pextrb $1, %xmm3, %eax
7386; SSE42-NEXT:    andb $1, %al
7387; SSE42-NEXT:    movb %al, 6(%rdi)
7388; SSE42-NEXT:    pextrb $0, %xmm3, %eax
7389; SSE42-NEXT:    andb $1, %al
7390; SSE42-NEXT:    movb %al, 6(%rdi)
7391; SSE42-NEXT:    pextrb $15, %xmm2, %eax
7392; SSE42-NEXT:    andb $1, %al
7393; SSE42-NEXT:    movb %al, 4(%rdi)
7394; SSE42-NEXT:    pextrb $14, %xmm2, %eax
7395; SSE42-NEXT:    andb $1, %al
7396; SSE42-NEXT:    movb %al, 4(%rdi)
7397; SSE42-NEXT:    pextrb $13, %xmm2, %eax
7398; SSE42-NEXT:    andb $1, %al
7399; SSE42-NEXT:    movb %al, 4(%rdi)
7400; SSE42-NEXT:    pextrb $12, %xmm2, %eax
7401; SSE42-NEXT:    andb $1, %al
7402; SSE42-NEXT:    movb %al, 4(%rdi)
7403; SSE42-NEXT:    pextrb $11, %xmm2, %eax
7404; SSE42-NEXT:    andb $1, %al
7405; SSE42-NEXT:    movb %al, 4(%rdi)
7406; SSE42-NEXT:    pextrb $10, %xmm2, %eax
7407; SSE42-NEXT:    andb $1, %al
7408; SSE42-NEXT:    movb %al, 4(%rdi)
7409; SSE42-NEXT:    pextrb $9, %xmm2, %eax
7410; SSE42-NEXT:    andb $1, %al
7411; SSE42-NEXT:    movb %al, 4(%rdi)
7412; SSE42-NEXT:    pextrb $8, %xmm2, %eax
7413; SSE42-NEXT:    andb $1, %al
7414; SSE42-NEXT:    movb %al, 4(%rdi)
7415; SSE42-NEXT:    pextrb $7, %xmm2, %eax
7416; SSE42-NEXT:    andb $1, %al
7417; SSE42-NEXT:    movb %al, 4(%rdi)
7418; SSE42-NEXT:    pextrb $6, %xmm2, %eax
7419; SSE42-NEXT:    andb $1, %al
7420; SSE42-NEXT:    movb %al, 4(%rdi)
7421; SSE42-NEXT:    pextrb $5, %xmm2, %eax
7422; SSE42-NEXT:    andb $1, %al
7423; SSE42-NEXT:    movb %al, 4(%rdi)
7424; SSE42-NEXT:    pextrb $4, %xmm2, %eax
7425; SSE42-NEXT:    andb $1, %al
7426; SSE42-NEXT:    movb %al, 4(%rdi)
7427; SSE42-NEXT:    pextrb $3, %xmm2, %eax
7428; SSE42-NEXT:    andb $1, %al
7429; SSE42-NEXT:    movb %al, 4(%rdi)
7430; SSE42-NEXT:    pextrb $2, %xmm2, %eax
7431; SSE42-NEXT:    andb $1, %al
7432; SSE42-NEXT:    movb %al, 4(%rdi)
7433; SSE42-NEXT:    pextrb $1, %xmm2, %eax
7434; SSE42-NEXT:    andb $1, %al
7435; SSE42-NEXT:    movb %al, 4(%rdi)
7436; SSE42-NEXT:    pextrb $0, %xmm2, %eax
7437; SSE42-NEXT:    andb $1, %al
7438; SSE42-NEXT:    movb %al, 4(%rdi)
7439; SSE42-NEXT:    pextrb $15, %xmm1, %eax
7440; SSE42-NEXT:    andb $1, %al
7441; SSE42-NEXT:    movb %al, 2(%rdi)
7442; SSE42-NEXT:    pextrb $14, %xmm1, %eax
7443; SSE42-NEXT:    andb $1, %al
7444; SSE42-NEXT:    movb %al, 2(%rdi)
7445; SSE42-NEXT:    pextrb $13, %xmm1, %eax
7446; SSE42-NEXT:    andb $1, %al
7447; SSE42-NEXT:    movb %al, 2(%rdi)
7448; SSE42-NEXT:    pextrb $12, %xmm1, %eax
7449; SSE42-NEXT:    andb $1, %al
7450; SSE42-NEXT:    movb %al, 2(%rdi)
7451; SSE42-NEXT:    pextrb $11, %xmm1, %eax
7452; SSE42-NEXT:    andb $1, %al
7453; SSE42-NEXT:    movb %al, 2(%rdi)
7454; SSE42-NEXT:    pextrb $10, %xmm1, %eax
7455; SSE42-NEXT:    andb $1, %al
7456; SSE42-NEXT:    movb %al, 2(%rdi)
7457; SSE42-NEXT:    pextrb $9, %xmm1, %eax
7458; SSE42-NEXT:    andb $1, %al
7459; SSE42-NEXT:    movb %al, 2(%rdi)
7460; SSE42-NEXT:    pextrb $8, %xmm1, %eax
7461; SSE42-NEXT:    andb $1, %al
7462; SSE42-NEXT:    movb %al, 2(%rdi)
7463; SSE42-NEXT:    pextrb $7, %xmm1, %eax
7464; SSE42-NEXT:    andb $1, %al
7465; SSE42-NEXT:    movb %al, 2(%rdi)
7466; SSE42-NEXT:    pextrb $6, %xmm1, %eax
7467; SSE42-NEXT:    andb $1, %al
7468; SSE42-NEXT:    movb %al, 2(%rdi)
7469; SSE42-NEXT:    pextrb $5, %xmm1, %eax
7470; SSE42-NEXT:    andb $1, %al
7471; SSE42-NEXT:    movb %al, 2(%rdi)
7472; SSE42-NEXT:    pextrb $4, %xmm1, %eax
7473; SSE42-NEXT:    andb $1, %al
7474; SSE42-NEXT:    movb %al, 2(%rdi)
7475; SSE42-NEXT:    pextrb $3, %xmm1, %eax
7476; SSE42-NEXT:    andb $1, %al
7477; SSE42-NEXT:    movb %al, 2(%rdi)
7478; SSE42-NEXT:    pextrb $2, %xmm1, %eax
7479; SSE42-NEXT:    andb $1, %al
7480; SSE42-NEXT:    movb %al, 2(%rdi)
7481; SSE42-NEXT:    pextrb $1, %xmm1, %eax
7482; SSE42-NEXT:    andb $1, %al
7483; SSE42-NEXT:    movb %al, 2(%rdi)
7484; SSE42-NEXT:    pextrb $0, %xmm1, %eax
7485; SSE42-NEXT:    andb $1, %al
7486; SSE42-NEXT:    movb %al, 2(%rdi)
7487; SSE42-NEXT:    pextrb $15, %xmm0, %eax
7488; SSE42-NEXT:    andb $1, %al
7489; SSE42-NEXT:    movb %al, (%rdi)
7490; SSE42-NEXT:    pextrb $14, %xmm0, %eax
7491; SSE42-NEXT:    andb $1, %al
7492; SSE42-NEXT:    movb %al, (%rdi)
7493; SSE42-NEXT:    pextrb $13, %xmm0, %eax
7494; SSE42-NEXT:    andb $1, %al
7495; SSE42-NEXT:    movb %al, (%rdi)
7496; SSE42-NEXT:    pextrb $12, %xmm0, %eax
7497; SSE42-NEXT:    andb $1, %al
7498; SSE42-NEXT:    movb %al, (%rdi)
7499; SSE42-NEXT:    pextrb $11, %xmm0, %eax
7500; SSE42-NEXT:    andb $1, %al
7501; SSE42-NEXT:    movb %al, (%rdi)
7502; SSE42-NEXT:    pextrb $10, %xmm0, %eax
7503; SSE42-NEXT:    andb $1, %al
7504; SSE42-NEXT:    movb %al, (%rdi)
7505; SSE42-NEXT:    pextrb $9, %xmm0, %eax
7506; SSE42-NEXT:    andb $1, %al
7507; SSE42-NEXT:    movb %al, (%rdi)
7508; SSE42-NEXT:    pextrb $8, %xmm0, %eax
7509; SSE42-NEXT:    andb $1, %al
7510; SSE42-NEXT:    movb %al, (%rdi)
7511; SSE42-NEXT:    pextrb $7, %xmm0, %eax
7512; SSE42-NEXT:    andb $1, %al
7513; SSE42-NEXT:    movb %al, (%rdi)
7514; SSE42-NEXT:    pextrb $6, %xmm0, %eax
7515; SSE42-NEXT:    andb $1, %al
7516; SSE42-NEXT:    movb %al, (%rdi)
7517; SSE42-NEXT:    pextrb $5, %xmm0, %eax
7518; SSE42-NEXT:    andb $1, %al
7519; SSE42-NEXT:    movb %al, (%rdi)
7520; SSE42-NEXT:    pextrb $4, %xmm0, %eax
7521; SSE42-NEXT:    andb $1, %al
7522; SSE42-NEXT:    movb %al, (%rdi)
7523; SSE42-NEXT:    pextrb $3, %xmm0, %eax
7524; SSE42-NEXT:    andb $1, %al
7525; SSE42-NEXT:    movb %al, (%rdi)
7526; SSE42-NEXT:    pextrb $2, %xmm0, %eax
7527; SSE42-NEXT:    andb $1, %al
7528; SSE42-NEXT:    movb %al, (%rdi)
7529; SSE42-NEXT:    pextrb $1, %xmm0, %eax
7530; SSE42-NEXT:    andb $1, %al
7531; SSE42-NEXT:    movb %al, (%rdi)
7532; SSE42-NEXT:    pextrb $0, %xmm0, %eax
7533; SSE42-NEXT:    andb $1, %al
7534; SSE42-NEXT:    movb %al, (%rdi)
7535; SSE42-NEXT:    movq %rdi, %rax
7536; SSE42-NEXT:    retq
7537;
7538; AVX1-LABEL: test_cmp_v128i8:
7539; AVX1:       # BB#0:
7540; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm8
7541; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm4
7542; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7543; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm0
7544; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm4
7545; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm5
7546; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
7547; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm1
7548; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm5
7549; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm6
7550; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
7551; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm2
7552; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm6
7553; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm7
7554; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
7555; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm3
7556; AVX1-NEXT:    vpextrb $15, %xmm3, %eax
7557; AVX1-NEXT:    andb $1, %al
7558; AVX1-NEXT:    movb %al, 12(%rdi)
7559; AVX1-NEXT:    vpextrb $14, %xmm3, %eax
7560; AVX1-NEXT:    andb $1, %al
7561; AVX1-NEXT:    movb %al, 12(%rdi)
7562; AVX1-NEXT:    vpextrb $13, %xmm3, %eax
7563; AVX1-NEXT:    andb $1, %al
7564; AVX1-NEXT:    movb %al, 12(%rdi)
7565; AVX1-NEXT:    vpextrb $12, %xmm3, %eax
7566; AVX1-NEXT:    andb $1, %al
7567; AVX1-NEXT:    movb %al, 12(%rdi)
7568; AVX1-NEXT:    vpextrb $11, %xmm3, %eax
7569; AVX1-NEXT:    andb $1, %al
7570; AVX1-NEXT:    movb %al, 12(%rdi)
7571; AVX1-NEXT:    vpextrb $10, %xmm3, %eax
7572; AVX1-NEXT:    andb $1, %al
7573; AVX1-NEXT:    movb %al, 12(%rdi)
7574; AVX1-NEXT:    vpextrb $9, %xmm3, %eax
7575; AVX1-NEXT:    andb $1, %al
7576; AVX1-NEXT:    movb %al, 12(%rdi)
7577; AVX1-NEXT:    vpextrb $8, %xmm3, %eax
7578; AVX1-NEXT:    andb $1, %al
7579; AVX1-NEXT:    movb %al, 12(%rdi)
7580; AVX1-NEXT:    vpextrb $7, %xmm3, %eax
7581; AVX1-NEXT:    andb $1, %al
7582; AVX1-NEXT:    movb %al, 12(%rdi)
7583; AVX1-NEXT:    vpextrb $6, %xmm3, %eax
7584; AVX1-NEXT:    andb $1, %al
7585; AVX1-NEXT:    movb %al, 12(%rdi)
7586; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
7587; AVX1-NEXT:    andb $1, %al
7588; AVX1-NEXT:    movb %al, 12(%rdi)
7589; AVX1-NEXT:    vpextrb $4, %xmm3, %eax
7590; AVX1-NEXT:    andb $1, %al
7591; AVX1-NEXT:    movb %al, 12(%rdi)
7592; AVX1-NEXT:    vpextrb $3, %xmm3, %eax
7593; AVX1-NEXT:    andb $1, %al
7594; AVX1-NEXT:    movb %al, 12(%rdi)
7595; AVX1-NEXT:    vpextrb $2, %xmm3, %eax
7596; AVX1-NEXT:    andb $1, %al
7597; AVX1-NEXT:    movb %al, 12(%rdi)
7598; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
7599; AVX1-NEXT:    andb $1, %al
7600; AVX1-NEXT:    movb %al, 12(%rdi)
7601; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
7602; AVX1-NEXT:    andb $1, %al
7603; AVX1-NEXT:    movb %al, 12(%rdi)
7604; AVX1-NEXT:    vpextrb $15, %xmm6, %eax
7605; AVX1-NEXT:    andb $1, %al
7606; AVX1-NEXT:    movb %al, 12(%rdi)
7607; AVX1-NEXT:    vpextrb $14, %xmm6, %eax
7608; AVX1-NEXT:    andb $1, %al
7609; AVX1-NEXT:    movb %al, 12(%rdi)
7610; AVX1-NEXT:    vpextrb $13, %xmm6, %eax
7611; AVX1-NEXT:    andb $1, %al
7612; AVX1-NEXT:    movb %al, 12(%rdi)
7613; AVX1-NEXT:    vpextrb $12, %xmm6, %eax
7614; AVX1-NEXT:    andb $1, %al
7615; AVX1-NEXT:    movb %al, 12(%rdi)
7616; AVX1-NEXT:    vpextrb $11, %xmm6, %eax
7617; AVX1-NEXT:    andb $1, %al
7618; AVX1-NEXT:    movb %al, 12(%rdi)
7619; AVX1-NEXT:    vpextrb $10, %xmm6, %eax
7620; AVX1-NEXT:    andb $1, %al
7621; AVX1-NEXT:    movb %al, 12(%rdi)
7622; AVX1-NEXT:    vpextrb $9, %xmm6, %eax
7623; AVX1-NEXT:    andb $1, %al
7624; AVX1-NEXT:    movb %al, 12(%rdi)
7625; AVX1-NEXT:    vpextrb $8, %xmm6, %eax
7626; AVX1-NEXT:    andb $1, %al
7627; AVX1-NEXT:    movb %al, 12(%rdi)
7628; AVX1-NEXT:    vpextrb $7, %xmm6, %eax
7629; AVX1-NEXT:    andb $1, %al
7630; AVX1-NEXT:    movb %al, 12(%rdi)
7631; AVX1-NEXT:    vpextrb $6, %xmm6, %eax
7632; AVX1-NEXT:    andb $1, %al
7633; AVX1-NEXT:    movb %al, 12(%rdi)
7634; AVX1-NEXT:    vpextrb $5, %xmm6, %eax
7635; AVX1-NEXT:    andb $1, %al
7636; AVX1-NEXT:    movb %al, 12(%rdi)
7637; AVX1-NEXT:    vpextrb $4, %xmm6, %eax
7638; AVX1-NEXT:    andb $1, %al
7639; AVX1-NEXT:    movb %al, 12(%rdi)
7640; AVX1-NEXT:    vpextrb $3, %xmm6, %eax
7641; AVX1-NEXT:    andb $1, %al
7642; AVX1-NEXT:    movb %al, 12(%rdi)
7643; AVX1-NEXT:    vpextrb $2, %xmm6, %eax
7644; AVX1-NEXT:    andb $1, %al
7645; AVX1-NEXT:    movb %al, 12(%rdi)
7646; AVX1-NEXT:    vpextrb $1, %xmm6, %eax
7647; AVX1-NEXT:    andb $1, %al
7648; AVX1-NEXT:    movb %al, 12(%rdi)
7649; AVX1-NEXT:    vpextrb $0, %xmm6, %eax
7650; AVX1-NEXT:    andb $1, %al
7651; AVX1-NEXT:    movb %al, 12(%rdi)
7652; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
7653; AVX1-NEXT:    andb $1, %al
7654; AVX1-NEXT:    movb %al, 8(%rdi)
7655; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
7656; AVX1-NEXT:    andb $1, %al
7657; AVX1-NEXT:    movb %al, 8(%rdi)
7658; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
7659; AVX1-NEXT:    andb $1, %al
7660; AVX1-NEXT:    movb %al, 8(%rdi)
7661; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
7662; AVX1-NEXT:    andb $1, %al
7663; AVX1-NEXT:    movb %al, 8(%rdi)
7664; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
7665; AVX1-NEXT:    andb $1, %al
7666; AVX1-NEXT:    movb %al, 8(%rdi)
7667; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
7668; AVX1-NEXT:    andb $1, %al
7669; AVX1-NEXT:    movb %al, 8(%rdi)
7670; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
7671; AVX1-NEXT:    andb $1, %al
7672; AVX1-NEXT:    movb %al, 8(%rdi)
7673; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
7674; AVX1-NEXT:    andb $1, %al
7675; AVX1-NEXT:    movb %al, 8(%rdi)
7676; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
7677; AVX1-NEXT:    andb $1, %al
7678; AVX1-NEXT:    movb %al, 8(%rdi)
7679; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
7680; AVX1-NEXT:    andb $1, %al
7681; AVX1-NEXT:    movb %al, 8(%rdi)
7682; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
7683; AVX1-NEXT:    andb $1, %al
7684; AVX1-NEXT:    movb %al, 8(%rdi)
7685; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
7686; AVX1-NEXT:    andb $1, %al
7687; AVX1-NEXT:    movb %al, 8(%rdi)
7688; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
7689; AVX1-NEXT:    andb $1, %al
7690; AVX1-NEXT:    movb %al, 8(%rdi)
7691; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
7692; AVX1-NEXT:    andb $1, %al
7693; AVX1-NEXT:    movb %al, 8(%rdi)
7694; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
7695; AVX1-NEXT:    andb $1, %al
7696; AVX1-NEXT:    movb %al, 8(%rdi)
7697; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
7698; AVX1-NEXT:    andb $1, %al
7699; AVX1-NEXT:    movb %al, 8(%rdi)
7700; AVX1-NEXT:    vpextrb $15, %xmm5, %eax
7701; AVX1-NEXT:    andb $1, %al
7702; AVX1-NEXT:    movb %al, 8(%rdi)
7703; AVX1-NEXT:    vpextrb $14, %xmm5, %eax
7704; AVX1-NEXT:    andb $1, %al
7705; AVX1-NEXT:    movb %al, 8(%rdi)
7706; AVX1-NEXT:    vpextrb $13, %xmm5, %eax
7707; AVX1-NEXT:    andb $1, %al
7708; AVX1-NEXT:    movb %al, 8(%rdi)
7709; AVX1-NEXT:    vpextrb $12, %xmm5, %eax
7710; AVX1-NEXT:    andb $1, %al
7711; AVX1-NEXT:    movb %al, 8(%rdi)
7712; AVX1-NEXT:    vpextrb $11, %xmm5, %eax
7713; AVX1-NEXT:    andb $1, %al
7714; AVX1-NEXT:    movb %al, 8(%rdi)
7715; AVX1-NEXT:    vpextrb $10, %xmm5, %eax
7716; AVX1-NEXT:    andb $1, %al
7717; AVX1-NEXT:    movb %al, 8(%rdi)
7718; AVX1-NEXT:    vpextrb $9, %xmm5, %eax
7719; AVX1-NEXT:    andb $1, %al
7720; AVX1-NEXT:    movb %al, 8(%rdi)
7721; AVX1-NEXT:    vpextrb $8, %xmm5, %eax
7722; AVX1-NEXT:    andb $1, %al
7723; AVX1-NEXT:    movb %al, 8(%rdi)
7724; AVX1-NEXT:    vpextrb $7, %xmm5, %eax
7725; AVX1-NEXT:    andb $1, %al
7726; AVX1-NEXT:    movb %al, 8(%rdi)
7727; AVX1-NEXT:    vpextrb $6, %xmm5, %eax
7728; AVX1-NEXT:    andb $1, %al
7729; AVX1-NEXT:    movb %al, 8(%rdi)
7730; AVX1-NEXT:    vpextrb $5, %xmm5, %eax
7731; AVX1-NEXT:    andb $1, %al
7732; AVX1-NEXT:    movb %al, 8(%rdi)
7733; AVX1-NEXT:    vpextrb $4, %xmm5, %eax
7734; AVX1-NEXT:    andb $1, %al
7735; AVX1-NEXT:    movb %al, 8(%rdi)
7736; AVX1-NEXT:    vpextrb $3, %xmm5, %eax
7737; AVX1-NEXT:    andb $1, %al
7738; AVX1-NEXT:    movb %al, 8(%rdi)
7739; AVX1-NEXT:    vpextrb $2, %xmm5, %eax
7740; AVX1-NEXT:    andb $1, %al
7741; AVX1-NEXT:    movb %al, 8(%rdi)
7742; AVX1-NEXT:    vpextrb $1, %xmm5, %eax
7743; AVX1-NEXT:    andb $1, %al
7744; AVX1-NEXT:    movb %al, 8(%rdi)
7745; AVX1-NEXT:    vpextrb $0, %xmm5, %eax
7746; AVX1-NEXT:    andb $1, %al
7747; AVX1-NEXT:    movb %al, 8(%rdi)
7748; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
7749; AVX1-NEXT:    andb $1, %al
7750; AVX1-NEXT:    movb %al, 4(%rdi)
7751; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
7752; AVX1-NEXT:    andb $1, %al
7753; AVX1-NEXT:    movb %al, 4(%rdi)
7754; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
7755; AVX1-NEXT:    andb $1, %al
7756; AVX1-NEXT:    movb %al, 4(%rdi)
7757; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
7758; AVX1-NEXT:    andb $1, %al
7759; AVX1-NEXT:    movb %al, 4(%rdi)
7760; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
7761; AVX1-NEXT:    andb $1, %al
7762; AVX1-NEXT:    movb %al, 4(%rdi)
7763; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
7764; AVX1-NEXT:    andb $1, %al
7765; AVX1-NEXT:    movb %al, 4(%rdi)
7766; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
7767; AVX1-NEXT:    andb $1, %al
7768; AVX1-NEXT:    movb %al, 4(%rdi)
7769; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
7770; AVX1-NEXT:    andb $1, %al
7771; AVX1-NEXT:    movb %al, 4(%rdi)
7772; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
7773; AVX1-NEXT:    andb $1, %al
7774; AVX1-NEXT:    movb %al, 4(%rdi)
7775; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
7776; AVX1-NEXT:    andb $1, %al
7777; AVX1-NEXT:    movb %al, 4(%rdi)
7778; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
7779; AVX1-NEXT:    andb $1, %al
7780; AVX1-NEXT:    movb %al, 4(%rdi)
7781; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
7782; AVX1-NEXT:    andb $1, %al
7783; AVX1-NEXT:    movb %al, 4(%rdi)
7784; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
7785; AVX1-NEXT:    andb $1, %al
7786; AVX1-NEXT:    movb %al, 4(%rdi)
7787; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
7788; AVX1-NEXT:    andb $1, %al
7789; AVX1-NEXT:    movb %al, 4(%rdi)
7790; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
7791; AVX1-NEXT:    andb $1, %al
7792; AVX1-NEXT:    movb %al, 4(%rdi)
7793; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
7794; AVX1-NEXT:    andb $1, %al
7795; AVX1-NEXT:    movb %al, 4(%rdi)
7796; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
7797; AVX1-NEXT:    andb $1, %al
7798; AVX1-NEXT:    movb %al, 4(%rdi)
7799; AVX1-NEXT:    vpextrb $14, %xmm4, %eax
7800; AVX1-NEXT:    andb $1, %al
7801; AVX1-NEXT:    movb %al, 4(%rdi)
7802; AVX1-NEXT:    vpextrb $13, %xmm4, %eax
7803; AVX1-NEXT:    andb $1, %al
7804; AVX1-NEXT:    movb %al, 4(%rdi)
7805; AVX1-NEXT:    vpextrb $12, %xmm4, %eax
7806; AVX1-NEXT:    andb $1, %al
7807; AVX1-NEXT:    movb %al, 4(%rdi)
7808; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
7809; AVX1-NEXT:    andb $1, %al
7810; AVX1-NEXT:    movb %al, 4(%rdi)
7811; AVX1-NEXT:    vpextrb $10, %xmm4, %eax
7812; AVX1-NEXT:    andb $1, %al
7813; AVX1-NEXT:    movb %al, 4(%rdi)
7814; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
7815; AVX1-NEXT:    andb $1, %al
7816; AVX1-NEXT:    movb %al, 4(%rdi)
7817; AVX1-NEXT:    vpextrb $8, %xmm4, %eax
7818; AVX1-NEXT:    andb $1, %al
7819; AVX1-NEXT:    movb %al, 4(%rdi)
7820; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
7821; AVX1-NEXT:    andb $1, %al
7822; AVX1-NEXT:    movb %al, 4(%rdi)
7823; AVX1-NEXT:    vpextrb $6, %xmm4, %eax
7824; AVX1-NEXT:    andb $1, %al
7825; AVX1-NEXT:    movb %al, 4(%rdi)
7826; AVX1-NEXT:    vpextrb $5, %xmm4, %eax
7827; AVX1-NEXT:    andb $1, %al
7828; AVX1-NEXT:    movb %al, 4(%rdi)
7829; AVX1-NEXT:    vpextrb $4, %xmm4, %eax
7830; AVX1-NEXT:    andb $1, %al
7831; AVX1-NEXT:    movb %al, 4(%rdi)
7832; AVX1-NEXT:    vpextrb $3, %xmm4, %eax
7833; AVX1-NEXT:    andb $1, %al
7834; AVX1-NEXT:    movb %al, 4(%rdi)
7835; AVX1-NEXT:    vpextrb $2, %xmm4, %eax
7836; AVX1-NEXT:    andb $1, %al
7837; AVX1-NEXT:    movb %al, 4(%rdi)
7838; AVX1-NEXT:    vpextrb $1, %xmm4, %eax
7839; AVX1-NEXT:    andb $1, %al
7840; AVX1-NEXT:    movb %al, 4(%rdi)
7841; AVX1-NEXT:    vpextrb $0, %xmm4, %eax
7842; AVX1-NEXT:    andb $1, %al
7843; AVX1-NEXT:    movb %al, 4(%rdi)
7844; AVX1-NEXT:    vpextrb $15, %xmm0, %eax
7845; AVX1-NEXT:    andb $1, %al
7846; AVX1-NEXT:    movb %al, (%rdi)
7847; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
7848; AVX1-NEXT:    andb $1, %al
7849; AVX1-NEXT:    movb %al, (%rdi)
7850; AVX1-NEXT:    vpextrb $13, %xmm0, %eax
7851; AVX1-NEXT:    andb $1, %al
7852; AVX1-NEXT:    movb %al, (%rdi)
7853; AVX1-NEXT:    vpextrb $12, %xmm0, %eax
7854; AVX1-NEXT:    andb $1, %al
7855; AVX1-NEXT:    movb %al, (%rdi)
7856; AVX1-NEXT:    vpextrb $11, %xmm0, %eax
7857; AVX1-NEXT:    andb $1, %al
7858; AVX1-NEXT:    movb %al, (%rdi)
7859; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
7860; AVX1-NEXT:    andb $1, %al
7861; AVX1-NEXT:    movb %al, (%rdi)
7862; AVX1-NEXT:    vpextrb $9, %xmm0, %eax
7863; AVX1-NEXT:    andb $1, %al
7864; AVX1-NEXT:    movb %al, (%rdi)
7865; AVX1-NEXT:    vpextrb $8, %xmm0, %eax
7866; AVX1-NEXT:    andb $1, %al
7867; AVX1-NEXT:    movb %al, (%rdi)
7868; AVX1-NEXT:    vpextrb $7, %xmm0, %eax
7869; AVX1-NEXT:    andb $1, %al
7870; AVX1-NEXT:    movb %al, (%rdi)
7871; AVX1-NEXT:    vpextrb $6, %xmm0, %eax
7872; AVX1-NEXT:    andb $1, %al
7873; AVX1-NEXT:    movb %al, (%rdi)
7874; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
7875; AVX1-NEXT:    andb $1, %al
7876; AVX1-NEXT:    movb %al, (%rdi)
7877; AVX1-NEXT:    vpextrb $4, %xmm0, %eax
7878; AVX1-NEXT:    andb $1, %al
7879; AVX1-NEXT:    movb %al, (%rdi)
7880; AVX1-NEXT:    vpextrb $3, %xmm0, %eax
7881; AVX1-NEXT:    andb $1, %al
7882; AVX1-NEXT:    movb %al, (%rdi)
7883; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
7884; AVX1-NEXT:    andb $1, %al
7885; AVX1-NEXT:    movb %al, (%rdi)
7886; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
7887; AVX1-NEXT:    andb $1, %al
7888; AVX1-NEXT:    movb %al, (%rdi)
7889; AVX1-NEXT:    vpextrb $0, %xmm0, %eax
7890; AVX1-NEXT:    andb $1, %al
7891; AVX1-NEXT:    movb %al, (%rdi)
7892; AVX1-NEXT:    vpextrb $15, %xmm8, %eax
7893; AVX1-NEXT:    andb $1, %al
7894; AVX1-NEXT:    movb %al, (%rdi)
7895; AVX1-NEXT:    vpextrb $14, %xmm8, %eax
7896; AVX1-NEXT:    andb $1, %al
7897; AVX1-NEXT:    movb %al, (%rdi)
7898; AVX1-NEXT:    vpextrb $13, %xmm8, %eax
7899; AVX1-NEXT:    andb $1, %al
7900; AVX1-NEXT:    movb %al, (%rdi)
7901; AVX1-NEXT:    vpextrb $12, %xmm8, %eax
7902; AVX1-NEXT:    andb $1, %al
7903; AVX1-NEXT:    movb %al, (%rdi)
7904; AVX1-NEXT:    vpextrb $11, %xmm8, %eax
7905; AVX1-NEXT:    andb $1, %al
7906; AVX1-NEXT:    movb %al, (%rdi)
7907; AVX1-NEXT:    vpextrb $10, %xmm8, %eax
7908; AVX1-NEXT:    andb $1, %al
7909; AVX1-NEXT:    movb %al, (%rdi)
7910; AVX1-NEXT:    vpextrb $9, %xmm8, %eax
7911; AVX1-NEXT:    andb $1, %al
7912; AVX1-NEXT:    movb %al, (%rdi)
7913; AVX1-NEXT:    vpextrb $8, %xmm8, %eax
7914; AVX1-NEXT:    andb $1, %al
7915; AVX1-NEXT:    movb %al, (%rdi)
7916; AVX1-NEXT:    vpextrb $7, %xmm8, %eax
7917; AVX1-NEXT:    andb $1, %al
7918; AVX1-NEXT:    movb %al, (%rdi)
7919; AVX1-NEXT:    vpextrb $6, %xmm8, %eax
7920; AVX1-NEXT:    andb $1, %al
7921; AVX1-NEXT:    movb %al, (%rdi)
7922; AVX1-NEXT:    vpextrb $5, %xmm8, %eax
7923; AVX1-NEXT:    andb $1, %al
7924; AVX1-NEXT:    movb %al, (%rdi)
7925; AVX1-NEXT:    vpextrb $4, %xmm8, %eax
7926; AVX1-NEXT:    andb $1, %al
7927; AVX1-NEXT:    movb %al, (%rdi)
7928; AVX1-NEXT:    vpextrb $3, %xmm8, %eax
7929; AVX1-NEXT:    andb $1, %al
7930; AVX1-NEXT:    movb %al, (%rdi)
7931; AVX1-NEXT:    vpextrb $2, %xmm8, %eax
7932; AVX1-NEXT:    andb $1, %al
7933; AVX1-NEXT:    movb %al, (%rdi)
7934; AVX1-NEXT:    vpextrb $1, %xmm8, %eax
7935; AVX1-NEXT:    andb $1, %al
7936; AVX1-NEXT:    movb %al, (%rdi)
7937; AVX1-NEXT:    vpextrb $0, %xmm8, %eax
7938; AVX1-NEXT:    andb $1, %al
7939; AVX1-NEXT:    movb %al, (%rdi)
7940; AVX1-NEXT:    movq %rdi, %rax
7941; AVX1-NEXT:    vzeroupper
7942; AVX1-NEXT:    retq
7943;
7944; AVX2-LABEL: test_cmp_v128i8:
7945; AVX2:       # BB#0:
7946; AVX2-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
7947; AVX2-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
7948; AVX2-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
7949; AVX2-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
7950; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4
7951; AVX2-NEXT:    vpextrb $15, %xmm4, %eax
7952; AVX2-NEXT:    andb $1, %al
7953; AVX2-NEXT:    movb %al, 12(%rdi)
7954; AVX2-NEXT:    vpextrb $14, %xmm4, %eax
7955; AVX2-NEXT:    andb $1, %al
7956; AVX2-NEXT:    movb %al, 12(%rdi)
7957; AVX2-NEXT:    vpextrb $13, %xmm4, %eax
7958; AVX2-NEXT:    andb $1, %al
7959; AVX2-NEXT:    movb %al, 12(%rdi)
7960; AVX2-NEXT:    vpextrb $12, %xmm4, %eax
7961; AVX2-NEXT:    andb $1, %al
7962; AVX2-NEXT:    movb %al, 12(%rdi)
7963; AVX2-NEXT:    vpextrb $11, %xmm4, %eax
7964; AVX2-NEXT:    andb $1, %al
7965; AVX2-NEXT:    movb %al, 12(%rdi)
7966; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
7967; AVX2-NEXT:    andb $1, %al
7968; AVX2-NEXT:    movb %al, 12(%rdi)
7969; AVX2-NEXT:    vpextrb $9, %xmm4, %eax
7970; AVX2-NEXT:    andb $1, %al
7971; AVX2-NEXT:    movb %al, 12(%rdi)
7972; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
7973; AVX2-NEXT:    andb $1, %al
7974; AVX2-NEXT:    movb %al, 12(%rdi)
7975; AVX2-NEXT:    vpextrb $7, %xmm4, %eax
7976; AVX2-NEXT:    andb $1, %al
7977; AVX2-NEXT:    movb %al, 12(%rdi)
7978; AVX2-NEXT:    vpextrb $6, %xmm4, %eax
7979; AVX2-NEXT:    andb $1, %al
7980; AVX2-NEXT:    movb %al, 12(%rdi)
7981; AVX2-NEXT:    vpextrb $5, %xmm4, %eax
7982; AVX2-NEXT:    andb $1, %al
7983; AVX2-NEXT:    movb %al, 12(%rdi)
7984; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
7985; AVX2-NEXT:    andb $1, %al
7986; AVX2-NEXT:    movb %al, 12(%rdi)
7987; AVX2-NEXT:    vpextrb $3, %xmm4, %eax
7988; AVX2-NEXT:    andb $1, %al
7989; AVX2-NEXT:    movb %al, 12(%rdi)
7990; AVX2-NEXT:    vpextrb $2, %xmm4, %eax
7991; AVX2-NEXT:    andb $1, %al
7992; AVX2-NEXT:    movb %al, 12(%rdi)
7993; AVX2-NEXT:    vpextrb $1, %xmm4, %eax
7994; AVX2-NEXT:    andb $1, %al
7995; AVX2-NEXT:    movb %al, 12(%rdi)
7996; AVX2-NEXT:    vpextrb $0, %xmm4, %eax
7997; AVX2-NEXT:    andb $1, %al
7998; AVX2-NEXT:    movb %al, 12(%rdi)
7999; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
8000; AVX2-NEXT:    andb $1, %al
8001; AVX2-NEXT:    movb %al, 12(%rdi)
8002; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
8003; AVX2-NEXT:    andb $1, %al
8004; AVX2-NEXT:    movb %al, 12(%rdi)
8005; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
8006; AVX2-NEXT:    andb $1, %al
8007; AVX2-NEXT:    movb %al, 12(%rdi)
8008; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
8009; AVX2-NEXT:    andb $1, %al
8010; AVX2-NEXT:    movb %al, 12(%rdi)
8011; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
8012; AVX2-NEXT:    andb $1, %al
8013; AVX2-NEXT:    movb %al, 12(%rdi)
8014; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
8015; AVX2-NEXT:    andb $1, %al
8016; AVX2-NEXT:    movb %al, 12(%rdi)
8017; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
8018; AVX2-NEXT:    andb $1, %al
8019; AVX2-NEXT:    movb %al, 12(%rdi)
8020; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
8021; AVX2-NEXT:    andb $1, %al
8022; AVX2-NEXT:    movb %al, 12(%rdi)
8023; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
8024; AVX2-NEXT:    andb $1, %al
8025; AVX2-NEXT:    movb %al, 12(%rdi)
8026; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
8027; AVX2-NEXT:    andb $1, %al
8028; AVX2-NEXT:    movb %al, 12(%rdi)
8029; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
8030; AVX2-NEXT:    andb $1, %al
8031; AVX2-NEXT:    movb %al, 12(%rdi)
8032; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
8033; AVX2-NEXT:    andb $1, %al
8034; AVX2-NEXT:    movb %al, 12(%rdi)
8035; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
8036; AVX2-NEXT:    andb $1, %al
8037; AVX2-NEXT:    movb %al, 12(%rdi)
8038; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
8039; AVX2-NEXT:    andb $1, %al
8040; AVX2-NEXT:    movb %al, 12(%rdi)
8041; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
8042; AVX2-NEXT:    andb $1, %al
8043; AVX2-NEXT:    movb %al, 12(%rdi)
8044; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
8045; AVX2-NEXT:    andb $1, %al
8046; AVX2-NEXT:    movb %al, 12(%rdi)
8047; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3
8048; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
8049; AVX2-NEXT:    andb $1, %al
8050; AVX2-NEXT:    movb %al, 8(%rdi)
8051; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
8052; AVX2-NEXT:    andb $1, %al
8053; AVX2-NEXT:    movb %al, 8(%rdi)
8054; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
8055; AVX2-NEXT:    andb $1, %al
8056; AVX2-NEXT:    movb %al, 8(%rdi)
8057; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
8058; AVX2-NEXT:    andb $1, %al
8059; AVX2-NEXT:    movb %al, 8(%rdi)
8060; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
8061; AVX2-NEXT:    andb $1, %al
8062; AVX2-NEXT:    movb %al, 8(%rdi)
8063; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
8064; AVX2-NEXT:    andb $1, %al
8065; AVX2-NEXT:    movb %al, 8(%rdi)
8066; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
8067; AVX2-NEXT:    andb $1, %al
8068; AVX2-NEXT:    movb %al, 8(%rdi)
8069; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
8070; AVX2-NEXT:    andb $1, %al
8071; AVX2-NEXT:    movb %al, 8(%rdi)
8072; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
8073; AVX2-NEXT:    andb $1, %al
8074; AVX2-NEXT:    movb %al, 8(%rdi)
8075; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
8076; AVX2-NEXT:    andb $1, %al
8077; AVX2-NEXT:    movb %al, 8(%rdi)
8078; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
8079; AVX2-NEXT:    andb $1, %al
8080; AVX2-NEXT:    movb %al, 8(%rdi)
8081; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
8082; AVX2-NEXT:    andb $1, %al
8083; AVX2-NEXT:    movb %al, 8(%rdi)
8084; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
8085; AVX2-NEXT:    andb $1, %al
8086; AVX2-NEXT:    movb %al, 8(%rdi)
8087; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
8088; AVX2-NEXT:    andb $1, %al
8089; AVX2-NEXT:    movb %al, 8(%rdi)
8090; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
8091; AVX2-NEXT:    andb $1, %al
8092; AVX2-NEXT:    movb %al, 8(%rdi)
8093; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
8094; AVX2-NEXT:    andb $1, %al
8095; AVX2-NEXT:    movb %al, 8(%rdi)
8096; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
8097; AVX2-NEXT:    andb $1, %al
8098; AVX2-NEXT:    movb %al, 8(%rdi)
8099; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
8100; AVX2-NEXT:    andb $1, %al
8101; AVX2-NEXT:    movb %al, 8(%rdi)
8102; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
8103; AVX2-NEXT:    andb $1, %al
8104; AVX2-NEXT:    movb %al, 8(%rdi)
8105; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
8106; AVX2-NEXT:    andb $1, %al
8107; AVX2-NEXT:    movb %al, 8(%rdi)
8108; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
8109; AVX2-NEXT:    andb $1, %al
8110; AVX2-NEXT:    movb %al, 8(%rdi)
8111; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
8112; AVX2-NEXT:    andb $1, %al
8113; AVX2-NEXT:    movb %al, 8(%rdi)
8114; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
8115; AVX2-NEXT:    andb $1, %al
8116; AVX2-NEXT:    movb %al, 8(%rdi)
8117; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
8118; AVX2-NEXT:    andb $1, %al
8119; AVX2-NEXT:    movb %al, 8(%rdi)
8120; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
8121; AVX2-NEXT:    andb $1, %al
8122; AVX2-NEXT:    movb %al, 8(%rdi)
8123; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
8124; AVX2-NEXT:    andb $1, %al
8125; AVX2-NEXT:    movb %al, 8(%rdi)
8126; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
8127; AVX2-NEXT:    andb $1, %al
8128; AVX2-NEXT:    movb %al, 8(%rdi)
8129; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
8130; AVX2-NEXT:    andb $1, %al
8131; AVX2-NEXT:    movb %al, 8(%rdi)
8132; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
8133; AVX2-NEXT:    andb $1, %al
8134; AVX2-NEXT:    movb %al, 8(%rdi)
8135; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
8136; AVX2-NEXT:    andb $1, %al
8137; AVX2-NEXT:    movb %al, 8(%rdi)
8138; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
8139; AVX2-NEXT:    andb $1, %al
8140; AVX2-NEXT:    movb %al, 8(%rdi)
8141; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
8142; AVX2-NEXT:    andb $1, %al
8143; AVX2-NEXT:    movb %al, 8(%rdi)
8144; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
8145; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
8146; AVX2-NEXT:    andb $1, %al
8147; AVX2-NEXT:    movb %al, 4(%rdi)
8148; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
8149; AVX2-NEXT:    andb $1, %al
8150; AVX2-NEXT:    movb %al, 4(%rdi)
8151; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
8152; AVX2-NEXT:    andb $1, %al
8153; AVX2-NEXT:    movb %al, 4(%rdi)
8154; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
8155; AVX2-NEXT:    andb $1, %al
8156; AVX2-NEXT:    movb %al, 4(%rdi)
8157; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
8158; AVX2-NEXT:    andb $1, %al
8159; AVX2-NEXT:    movb %al, 4(%rdi)
8160; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
8161; AVX2-NEXT:    andb $1, %al
8162; AVX2-NEXT:    movb %al, 4(%rdi)
8163; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
8164; AVX2-NEXT:    andb $1, %al
8165; AVX2-NEXT:    movb %al, 4(%rdi)
8166; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
8167; AVX2-NEXT:    andb $1, %al
8168; AVX2-NEXT:    movb %al, 4(%rdi)
8169; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
8170; AVX2-NEXT:    andb $1, %al
8171; AVX2-NEXT:    movb %al, 4(%rdi)
8172; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
8173; AVX2-NEXT:    andb $1, %al
8174; AVX2-NEXT:    movb %al, 4(%rdi)
8175; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
8176; AVX2-NEXT:    andb $1, %al
8177; AVX2-NEXT:    movb %al, 4(%rdi)
8178; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
8179; AVX2-NEXT:    andb $1, %al
8180; AVX2-NEXT:    movb %al, 4(%rdi)
8181; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
8182; AVX2-NEXT:    andb $1, %al
8183; AVX2-NEXT:    movb %al, 4(%rdi)
8184; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
8185; AVX2-NEXT:    andb $1, %al
8186; AVX2-NEXT:    movb %al, 4(%rdi)
8187; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
8188; AVX2-NEXT:    andb $1, %al
8189; AVX2-NEXT:    movb %al, 4(%rdi)
8190; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
8191; AVX2-NEXT:    andb $1, %al
8192; AVX2-NEXT:    movb %al, 4(%rdi)
8193; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
8194; AVX2-NEXT:    andb $1, %al
8195; AVX2-NEXT:    movb %al, 4(%rdi)
8196; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
8197; AVX2-NEXT:    andb $1, %al
8198; AVX2-NEXT:    movb %al, 4(%rdi)
8199; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
8200; AVX2-NEXT:    andb $1, %al
8201; AVX2-NEXT:    movb %al, 4(%rdi)
8202; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
8203; AVX2-NEXT:    andb $1, %al
8204; AVX2-NEXT:    movb %al, 4(%rdi)
8205; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
8206; AVX2-NEXT:    andb $1, %al
8207; AVX2-NEXT:    movb %al, 4(%rdi)
8208; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
8209; AVX2-NEXT:    andb $1, %al
8210; AVX2-NEXT:    movb %al, 4(%rdi)
8211; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
8212; AVX2-NEXT:    andb $1, %al
8213; AVX2-NEXT:    movb %al, 4(%rdi)
8214; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
8215; AVX2-NEXT:    andb $1, %al
8216; AVX2-NEXT:    movb %al, 4(%rdi)
8217; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
8218; AVX2-NEXT:    andb $1, %al
8219; AVX2-NEXT:    movb %al, 4(%rdi)
8220; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
8221; AVX2-NEXT:    andb $1, %al
8222; AVX2-NEXT:    movb %al, 4(%rdi)
8223; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
8224; AVX2-NEXT:    andb $1, %al
8225; AVX2-NEXT:    movb %al, 4(%rdi)
8226; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
8227; AVX2-NEXT:    andb $1, %al
8228; AVX2-NEXT:    movb %al, 4(%rdi)
8229; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
8230; AVX2-NEXT:    andb $1, %al
8231; AVX2-NEXT:    movb %al, 4(%rdi)
8232; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
8233; AVX2-NEXT:    andb $1, %al
8234; AVX2-NEXT:    movb %al, 4(%rdi)
8235; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
8236; AVX2-NEXT:    andb $1, %al
8237; AVX2-NEXT:    movb %al, 4(%rdi)
8238; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
8239; AVX2-NEXT:    andb $1, %al
8240; AVX2-NEXT:    movb %al, 4(%rdi)
8241; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
8242; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
8243; AVX2-NEXT:    andb $1, %al
8244; AVX2-NEXT:    movb %al, (%rdi)
8245; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
8246; AVX2-NEXT:    andb $1, %al
8247; AVX2-NEXT:    movb %al, (%rdi)
8248; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
8249; AVX2-NEXT:    andb $1, %al
8250; AVX2-NEXT:    movb %al, (%rdi)
8251; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
8252; AVX2-NEXT:    andb $1, %al
8253; AVX2-NEXT:    movb %al, (%rdi)
8254; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
8255; AVX2-NEXT:    andb $1, %al
8256; AVX2-NEXT:    movb %al, (%rdi)
8257; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
8258; AVX2-NEXT:    andb $1, %al
8259; AVX2-NEXT:    movb %al, (%rdi)
8260; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
8261; AVX2-NEXT:    andb $1, %al
8262; AVX2-NEXT:    movb %al, (%rdi)
8263; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
8264; AVX2-NEXT:    andb $1, %al
8265; AVX2-NEXT:    movb %al, (%rdi)
8266; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
8267; AVX2-NEXT:    andb $1, %al
8268; AVX2-NEXT:    movb %al, (%rdi)
8269; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
8270; AVX2-NEXT:    andb $1, %al
8271; AVX2-NEXT:    movb %al, (%rdi)
8272; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
8273; AVX2-NEXT:    andb $1, %al
8274; AVX2-NEXT:    movb %al, (%rdi)
8275; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
8276; AVX2-NEXT:    andb $1, %al
8277; AVX2-NEXT:    movb %al, (%rdi)
8278; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
8279; AVX2-NEXT:    andb $1, %al
8280; AVX2-NEXT:    movb %al, (%rdi)
8281; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
8282; AVX2-NEXT:    andb $1, %al
8283; AVX2-NEXT:    movb %al, (%rdi)
8284; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
8285; AVX2-NEXT:    andb $1, %al
8286; AVX2-NEXT:    movb %al, (%rdi)
8287; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
8288; AVX2-NEXT:    andb $1, %al
8289; AVX2-NEXT:    movb %al, (%rdi)
8290; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
8291; AVX2-NEXT:    andb $1, %al
8292; AVX2-NEXT:    movb %al, (%rdi)
8293; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
8294; AVX2-NEXT:    andb $1, %al
8295; AVX2-NEXT:    movb %al, (%rdi)
8296; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
8297; AVX2-NEXT:    andb $1, %al
8298; AVX2-NEXT:    movb %al, (%rdi)
8299; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
8300; AVX2-NEXT:    andb $1, %al
8301; AVX2-NEXT:    movb %al, (%rdi)
8302; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
8303; AVX2-NEXT:    andb $1, %al
8304; AVX2-NEXT:    movb %al, (%rdi)
8305; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
8306; AVX2-NEXT:    andb $1, %al
8307; AVX2-NEXT:    movb %al, (%rdi)
8308; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
8309; AVX2-NEXT:    andb $1, %al
8310; AVX2-NEXT:    movb %al, (%rdi)
8311; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
8312; AVX2-NEXT:    andb $1, %al
8313; AVX2-NEXT:    movb %al, (%rdi)
8314; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
8315; AVX2-NEXT:    andb $1, %al
8316; AVX2-NEXT:    movb %al, (%rdi)
8317; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
8318; AVX2-NEXT:    andb $1, %al
8319; AVX2-NEXT:    movb %al, (%rdi)
8320; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
8321; AVX2-NEXT:    andb $1, %al
8322; AVX2-NEXT:    movb %al, (%rdi)
8323; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
8324; AVX2-NEXT:    andb $1, %al
8325; AVX2-NEXT:    movb %al, (%rdi)
8326; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
8327; AVX2-NEXT:    andb $1, %al
8328; AVX2-NEXT:    movb %al, (%rdi)
8329; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
8330; AVX2-NEXT:    andb $1, %al
8331; AVX2-NEXT:    movb %al, (%rdi)
8332; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
8333; AVX2-NEXT:    andb $1, %al
8334; AVX2-NEXT:    movb %al, (%rdi)
8335; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
8336; AVX2-NEXT:    andb $1, %al
8337; AVX2-NEXT:    movb %al, (%rdi)
8338; AVX2-NEXT:    movq %rdi, %rax
8339; AVX2-NEXT:    vzeroupper
8340; AVX2-NEXT:    retq
8341;
8342; AVX512F-LABEL: test_cmp_v128i8:
8343; AVX512F:       # BB#0:
8344; AVX512F-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
8345; AVX512F-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
8346; AVX512F-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
8347; AVX512F-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
8348; AVX512F-NEXT:    vextracti128 $1, %ymm3, %xmm4
8349; AVX512F-NEXT:    vpmovsxbd %xmm4, %zmm4
8350; AVX512F-NEXT:    vpslld $31, %zmm4, %zmm4
8351; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k0
8352; AVX512F-NEXT:    kmovw %k0, 14(%rdi)
8353; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
8354; AVX512F-NEXT:    vpslld $31, %zmm3, %zmm3
8355; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
8356; AVX512F-NEXT:    kmovw %k0, 12(%rdi)
8357; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm3
8358; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
8359; AVX512F-NEXT:    vpslld $31, %zmm3, %zmm3
8360; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
8361; AVX512F-NEXT:    kmovw %k0, 10(%rdi)
8362; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
8363; AVX512F-NEXT:    vpslld $31, %zmm2, %zmm2
8364; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
8365; AVX512F-NEXT:    kmovw %k0, 8(%rdi)
8366; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
8367; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
8368; AVX512F-NEXT:    vpslld $31, %zmm2, %zmm2
8369; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
8370; AVX512F-NEXT:    kmovw %k0, 6(%rdi)
8371; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
8372; AVX512F-NEXT:    vpslld $31, %zmm1, %zmm1
8373; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
8374; AVX512F-NEXT:    kmovw %k0, 4(%rdi)
8375; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1
8376; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
8377; AVX512F-NEXT:    vpslld $31, %zmm1, %zmm1
8378; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
8379; AVX512F-NEXT:    kmovw %k0, 2(%rdi)
8380; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
8381; AVX512F-NEXT:    vpslld $31, %zmm0, %zmm0
8382; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
8383; AVX512F-NEXT:    kmovw %k0, (%rdi)
8384; AVX512F-NEXT:    movq %rdi, %rax
8385; AVX512F-NEXT:    retq
8386;
8387; AVX512DQ-LABEL: test_cmp_v128i8:
8388; AVX512DQ:       # BB#0:
8389; AVX512DQ-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
8390; AVX512DQ-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
8391; AVX512DQ-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
8392; AVX512DQ-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
8393; AVX512DQ-NEXT:    vextracti128 $1, %ymm3, %xmm4
8394; AVX512DQ-NEXT:    vpmovsxbd %xmm4, %zmm4
8395; AVX512DQ-NEXT:    vpslld $31, %zmm4, %zmm4
8396; AVX512DQ-NEXT:    vptestmd %zmm4, %zmm4, %k0
8397; AVX512DQ-NEXT:    kmovw %k0, 14(%rdi)
8398; AVX512DQ-NEXT:    vpmovsxbd %xmm3, %zmm3
8399; AVX512DQ-NEXT:    vpslld $31, %zmm3, %zmm3
8400; AVX512DQ-NEXT:    vptestmd %zmm3, %zmm3, %k0
8401; AVX512DQ-NEXT:    kmovw %k0, 12(%rdi)
8402; AVX512DQ-NEXT:    vextracti128 $1, %ymm2, %xmm3
8403; AVX512DQ-NEXT:    vpmovsxbd %xmm3, %zmm3
8404; AVX512DQ-NEXT:    vpslld $31, %zmm3, %zmm3
8405; AVX512DQ-NEXT:    vptestmd %zmm3, %zmm3, %k0
8406; AVX512DQ-NEXT:    kmovw %k0, 10(%rdi)
8407; AVX512DQ-NEXT:    vpmovsxbd %xmm2, %zmm2
8408; AVX512DQ-NEXT:    vpslld $31, %zmm2, %zmm2
8409; AVX512DQ-NEXT:    vptestmd %zmm2, %zmm2, %k0
8410; AVX512DQ-NEXT:    kmovw %k0, 8(%rdi)
8411; AVX512DQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
8412; AVX512DQ-NEXT:    vpmovsxbd %xmm2, %zmm2
8413; AVX512DQ-NEXT:    vpslld $31, %zmm2, %zmm2
8414; AVX512DQ-NEXT:    vptestmd %zmm2, %zmm2, %k0
8415; AVX512DQ-NEXT:    kmovw %k0, 6(%rdi)
8416; AVX512DQ-NEXT:    vpmovsxbd %xmm1, %zmm1
8417; AVX512DQ-NEXT:    vpslld $31, %zmm1, %zmm1
8418; AVX512DQ-NEXT:    vptestmd %zmm1, %zmm1, %k0
8419; AVX512DQ-NEXT:    kmovw %k0, 4(%rdi)
8420; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm1
8421; AVX512DQ-NEXT:    vpmovsxbd %xmm1, %zmm1
8422; AVX512DQ-NEXT:    vpslld $31, %zmm1, %zmm1
8423; AVX512DQ-NEXT:    vptestmd %zmm1, %zmm1, %k0
8424; AVX512DQ-NEXT:    kmovw %k0, 2(%rdi)
8425; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm0
8426; AVX512DQ-NEXT:    vpslld $31, %zmm0, %zmm0
8427; AVX512DQ-NEXT:    vptestmd %zmm0, %zmm0, %k0
8428; AVX512DQ-NEXT:    kmovw %k0, (%rdi)
8429; AVX512DQ-NEXT:    movq %rdi, %rax
8430; AVX512DQ-NEXT:    retq
8431;
8432; AVX512BW-LABEL: test_cmp_v128i8:
8433; AVX512BW:       # BB#0:
8434; AVX512BW-NEXT:    vpcmpgtb %zmm3, %zmm1, %k0
8435; AVX512BW-NEXT:    vpcmpgtb %zmm2, %zmm0, %k1
8436; AVX512BW-NEXT:    vpmovm2b %k1, %zmm0
8437; AVX512BW-NEXT:    vpmovm2b %k0, %zmm1
8438; AVX512BW-NEXT:    retq
8439  %1 = icmp sgt <128 x i8> %a0, %a1
8440  ret <128 x i1> %1
8441}
8442
8443;
8444; 2048-bit vector comparisons
8445;
8446
8447define <32 x i1> @test_cmp_v32f64(<32 x double> %a0, <32 x double> %a1) nounwind {
8448; SSE2-LABEL: test_cmp_v32f64:
8449; SSE2:       # BB#0:
8450; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
8451; SSE2-NEXT:    cmpltpd %xmm7, %xmm8
8452; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm7
8453; SSE2-NEXT:    cmpltpd %xmm6, %xmm7
8454; SSE2-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,2],xmm8[0,2]
8455; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8456; SSE2-NEXT:    cmpltpd %xmm5, %xmm6
8457; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8458; SSE2-NEXT:    cmpltpd %xmm4, %xmm5
8459; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm6[0,2]
8460; SSE2-NEXT:    pslld $31, %xmm7
8461; SSE2-NEXT:    psrad $31, %xmm7
8462; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm7[0,2,2,3,4,5,6,7]
8463; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
8464; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,2,2,3]
8465; SSE2-NEXT:    pslld $31, %xmm5
8466; SSE2-NEXT:    psrad $31, %xmm5
8467; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm5[0,2,2,3,4,5,6,7]
8468; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
8469; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
8470; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
8471; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8472; SSE2-NEXT:    cmpltpd %xmm3, %xmm5
8473; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8474; SSE2-NEXT:    cmpltpd %xmm2, %xmm6
8475; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
8476; SSE2-NEXT:    shufps {{.*#+}} xmm6 = xmm6[0,2],xmm5[0,2]
8477; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8478; SSE2-NEXT:    cmpltpd %xmm1, %xmm5
8479; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
8480; SSE2-NEXT:    cmpltpd %xmm0, %xmm1
8481; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
8482; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm5[0,2]
8483; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8484; SSE2-NEXT:    psllw $15, %xmm4
8485; SSE2-NEXT:    psraw $15, %xmm4
8486; SSE2-NEXT:    pslld $31, %xmm6
8487; SSE2-NEXT:    psrad $31, %xmm6
8488; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm6[0,2,2,3,4,5,6,7]
8489; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
8490; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[0,2,2,3]
8491; SSE2-NEXT:    pslld $31, %xmm1
8492; SSE2-NEXT:    psrad $31, %xmm1
8493; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]
8494; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
8495; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
8496; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
8497; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]
8498; SSE2-NEXT:    pand %xmm1, %xmm4
8499; SSE2-NEXT:    psllw $15, %xmm0
8500; SSE2-NEXT:    psraw $15, %xmm0
8501; SSE2-NEXT:    pand %xmm1, %xmm0
8502; SSE2-NEXT:    packuswb %xmm4, %xmm0
8503; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
8504; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
8505; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8506; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm4[0,2]
8507; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
8508; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
8509; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm3
8510; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,2],xmm4[0,2]
8511; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
8512; SSE2-NEXT:    pslld $31, %xmm5
8513; SSE2-NEXT:    psrad $31, %xmm5
8514; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,2,2,3,4,5,6,7]
8515; SSE2-NEXT:    pshufhw {{.*#+}} xmm5 = xmm5[0,1,2,3,4,6,6,7]
8516; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
8517; SSE2-NEXT:    pslld $31, %xmm3
8518; SSE2-NEXT:    psrad $31, %xmm3
8519; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
8520; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
8521; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
8522; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]
8523; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8524; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8525; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
8526; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,2],xmm5[0,2]
8527; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8528; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8529; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm2
8530; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm5[0,2]
8531; SSE2-NEXT:    pslld $31, %xmm4
8532; SSE2-NEXT:    psrad $31, %xmm4
8533; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,2,2,3,4,5,6,7]
8534; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
8535; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
8536; SSE2-NEXT:    pslld $31, %xmm2
8537; SSE2-NEXT:    psrad $31, %xmm2
8538; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
8539; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
8540; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
8541; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
8542; SSE2-NEXT:    psllw $15, %xmm3
8543; SSE2-NEXT:    psraw $15, %xmm3
8544; SSE2-NEXT:    pand %xmm1, %xmm3
8545; SSE2-NEXT:    psllw $15, %xmm2
8546; SSE2-NEXT:    psraw $15, %xmm2
8547; SSE2-NEXT:    pand %xmm1, %xmm2
8548; SSE2-NEXT:    packuswb %xmm3, %xmm2
8549; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
8550; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8551; SSE2-NEXT:    andb $1, %al
8552; SSE2-NEXT:    movb %al, 2(%rdi)
8553; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
8554; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8555; SSE2-NEXT:    andb $1, %al
8556; SSE2-NEXT:    movb %al, (%rdi)
8557; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8558; SSE2-NEXT:    andb $1, %al
8559; SSE2-NEXT:    movb %al, 2(%rdi)
8560; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8561; SSE2-NEXT:    andb $1, %al
8562; SSE2-NEXT:    movb %al, (%rdi)
8563; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8564; SSE2-NEXT:    andb $1, %al
8565; SSE2-NEXT:    movb %al, 2(%rdi)
8566; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8567; SSE2-NEXT:    andb $1, %al
8568; SSE2-NEXT:    movb %al, (%rdi)
8569; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8570; SSE2-NEXT:    andb $1, %al
8571; SSE2-NEXT:    movb %al, 2(%rdi)
8572; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8573; SSE2-NEXT:    andb $1, %al
8574; SSE2-NEXT:    movb %al, (%rdi)
8575; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8576; SSE2-NEXT:    andb $1, %al
8577; SSE2-NEXT:    movb %al, 2(%rdi)
8578; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8579; SSE2-NEXT:    andb $1, %al
8580; SSE2-NEXT:    movb %al, (%rdi)
8581; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8582; SSE2-NEXT:    andb $1, %al
8583; SSE2-NEXT:    movb %al, 2(%rdi)
8584; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8585; SSE2-NEXT:    andb $1, %al
8586; SSE2-NEXT:    movb %al, (%rdi)
8587; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8588; SSE2-NEXT:    andb $1, %al
8589; SSE2-NEXT:    movb %al, 2(%rdi)
8590; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8591; SSE2-NEXT:    andb $1, %al
8592; SSE2-NEXT:    movb %al, (%rdi)
8593; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8594; SSE2-NEXT:    andb $1, %al
8595; SSE2-NEXT:    movb %al, 2(%rdi)
8596; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8597; SSE2-NEXT:    andb $1, %al
8598; SSE2-NEXT:    movb %al, (%rdi)
8599; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8600; SSE2-NEXT:    andb $1, %al
8601; SSE2-NEXT:    movb %al, 2(%rdi)
8602; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8603; SSE2-NEXT:    andb $1, %al
8604; SSE2-NEXT:    movb %al, (%rdi)
8605; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8606; SSE2-NEXT:    andb $1, %al
8607; SSE2-NEXT:    movb %al, 2(%rdi)
8608; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8609; SSE2-NEXT:    andb $1, %al
8610; SSE2-NEXT:    movb %al, (%rdi)
8611; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8612; SSE2-NEXT:    andb $1, %al
8613; SSE2-NEXT:    movb %al, 2(%rdi)
8614; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8615; SSE2-NEXT:    andb $1, %al
8616; SSE2-NEXT:    movb %al, (%rdi)
8617; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8618; SSE2-NEXT:    andb $1, %al
8619; SSE2-NEXT:    movb %al, 2(%rdi)
8620; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8621; SSE2-NEXT:    andb $1, %al
8622; SSE2-NEXT:    movb %al, (%rdi)
8623; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8624; SSE2-NEXT:    andb $1, %al
8625; SSE2-NEXT:    movb %al, 2(%rdi)
8626; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8627; SSE2-NEXT:    andb $1, %al
8628; SSE2-NEXT:    movb %al, (%rdi)
8629; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8630; SSE2-NEXT:    andb $1, %al
8631; SSE2-NEXT:    movb %al, 2(%rdi)
8632; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8633; SSE2-NEXT:    andb $1, %al
8634; SSE2-NEXT:    movb %al, (%rdi)
8635; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8636; SSE2-NEXT:    andb $1, %al
8637; SSE2-NEXT:    movb %al, 2(%rdi)
8638; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8639; SSE2-NEXT:    andb $1, %al
8640; SSE2-NEXT:    movb %al, (%rdi)
8641; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8642; SSE2-NEXT:    andb $1, %al
8643; SSE2-NEXT:    movb %al, 2(%rdi)
8644; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8645; SSE2-NEXT:    andb $1, %al
8646; SSE2-NEXT:    movb %al, (%rdi)
8647; SSE2-NEXT:    movq %rdi, %rax
8648; SSE2-NEXT:    retq
8649;
8650; SSE42-LABEL: test_cmp_v32f64:
8651; SSE42:       # BB#0:
8652; SSE42-NEXT:    pushq %rbp
8653; SSE42-NEXT:    pushq %r15
8654; SSE42-NEXT:    pushq %r14
8655; SSE42-NEXT:    pushq %r13
8656; SSE42-NEXT:    pushq %r12
8657; SSE42-NEXT:    pushq %rbx
8658; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
8659; SSE42-NEXT:    cmpltpd %xmm3, %xmm8
8660; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
8661; SSE42-NEXT:    cmpltpd %xmm2, %xmm3
8662; SSE42-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,2],xmm8[0,2]
8663; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
8664; SSE42-NEXT:    cmpltpd %xmm1, %xmm2
8665; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
8666; SSE42-NEXT:    cmpltpd %xmm0, %xmm1
8667; SSE42-NEXT:    pslld $31, %xmm3
8668; SSE42-NEXT:    psrad $31, %xmm3
8669; SSE42-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2]
8670; SSE42-NEXT:    movdqa {{.*#+}} xmm8 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
8671; SSE42-NEXT:    pshufb %xmm8, %xmm3
8672; SSE42-NEXT:    pslld $31, %xmm1
8673; SSE42-NEXT:    psrad $31, %xmm1
8674; SSE42-NEXT:    pshufb %xmm8, %xmm1
8675; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
8676; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
8677; SSE42-NEXT:    cmpltpd %xmm7, %xmm0
8678; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm7
8679; SSE42-NEXT:    cmpltpd %xmm6, %xmm7
8680; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
8681; SSE42-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,2],xmm0[0,2]
8682; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8683; SSE42-NEXT:    cmpltpd %xmm5, %xmm6
8684; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
8685; SSE42-NEXT:    cmpltpd %xmm4, %xmm0
8686; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
8687; SSE42-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm6[0,2]
8688; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
8689; SSE42-NEXT:    pslld $31, %xmm7
8690; SSE42-NEXT:    psrad $31, %xmm7
8691; SSE42-NEXT:    pshufb %xmm8, %xmm7
8692; SSE42-NEXT:    pslld $31, %xmm0
8693; SSE42-NEXT:    psrad $31, %xmm0
8694; SSE42-NEXT:    pshufb %xmm8, %xmm0
8695; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm7[0]
8696; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8697; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8698; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
8699; SSE42-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,2],xmm5[0,2]
8700; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8701; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8702; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm2
8703; SSE42-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm5[0,2]
8704; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8705; SSE42-NEXT:    pslld $31, %xmm4
8706; SSE42-NEXT:    psrad $31, %xmm4
8707; SSE42-NEXT:    pshufb %xmm8, %xmm4
8708; SSE42-NEXT:    pslld $31, %xmm2
8709; SSE42-NEXT:    psrad $31, %xmm2
8710; SSE42-NEXT:    pshufb %xmm8, %xmm2
8711; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
8712; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
8713; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
8714; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8715; SSE42-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm4[0,2]
8716; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
8717; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
8718; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm3
8719; SSE42-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,2],xmm4[0,2]
8720; SSE42-NEXT:    pslld $31, %xmm5
8721; SSE42-NEXT:    psrad $31, %xmm5
8722; SSE42-NEXT:    pshufb %xmm8, %xmm5
8723; SSE42-NEXT:    pslld $31, %xmm3
8724; SSE42-NEXT:    psrad $31, %xmm3
8725; SSE42-NEXT:    pshufb %xmm8, %xmm3
8726; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]
8727; SSE42-NEXT:    psllw $15, %xmm3
8728; SSE42-NEXT:    psraw $15, %xmm3
8729; SSE42-NEXT:    pextrb $14, %xmm3, %ecx
8730; SSE42-NEXT:    pextrb $12, %xmm3, %edx
8731; SSE42-NEXT:    pextrb $10, %xmm3, %r8d
8732; SSE42-NEXT:    pextrb $8, %xmm3, %r10d
8733; SSE42-NEXT:    pextrb $6, %xmm3, %r14d
8734; SSE42-NEXT:    pextrb $4, %xmm3, %r12d
8735; SSE42-NEXT:    pextrb $2, %xmm3, %ebx
8736; SSE42-NEXT:    pextrb $0, %xmm3, %eax
8737; SSE42-NEXT:    psllw $15, %xmm2
8738; SSE42-NEXT:    psraw $15, %xmm2
8739; SSE42-NEXT:    andb $1, %cl
8740; SSE42-NEXT:    movb %cl, 2(%rdi)
8741; SSE42-NEXT:    andb $1, %dl
8742; SSE42-NEXT:    movb %dl, 2(%rdi)
8743; SSE42-NEXT:    pextrb $14, %xmm2, %edx
8744; SSE42-NEXT:    pextrb $12, %xmm2, %esi
8745; SSE42-NEXT:    pextrb $10, %xmm2, %r9d
8746; SSE42-NEXT:    pextrb $8, %xmm2, %r11d
8747; SSE42-NEXT:    pextrb $6, %xmm2, %r15d
8748; SSE42-NEXT:    pextrb $4, %xmm2, %r13d
8749; SSE42-NEXT:    pextrb $2, %xmm2, %ebp
8750; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
8751; SSE42-NEXT:    psllw $15, %xmm0
8752; SSE42-NEXT:    psraw $15, %xmm0
8753; SSE42-NEXT:    andb $1, %r8b
8754; SSE42-NEXT:    movb %r8b, 2(%rdi)
8755; SSE42-NEXT:    andb $1, %r10b
8756; SSE42-NEXT:    movb %r10b, 2(%rdi)
8757; SSE42-NEXT:    andb $1, %r14b
8758; SSE42-NEXT:    movb %r14b, 2(%rdi)
8759; SSE42-NEXT:    andb $1, %r12b
8760; SSE42-NEXT:    movb %r12b, 2(%rdi)
8761; SSE42-NEXT:    andb $1, %bl
8762; SSE42-NEXT:    movb %bl, 2(%rdi)
8763; SSE42-NEXT:    andb $1, %al
8764; SSE42-NEXT:    movb %al, 2(%rdi)
8765; SSE42-NEXT:    andb $1, %dl
8766; SSE42-NEXT:    movb %dl, 2(%rdi)
8767; SSE42-NEXT:    andb $1, %sil
8768; SSE42-NEXT:    movb %sil, 2(%rdi)
8769; SSE42-NEXT:    pextrb $14, %xmm0, %esi
8770; SSE42-NEXT:    pextrb $12, %xmm0, %edx
8771; SSE42-NEXT:    pextrb $10, %xmm0, %r8d
8772; SSE42-NEXT:    pextrb $8, %xmm0, %r10d
8773; SSE42-NEXT:    pextrb $6, %xmm0, %r14d
8774; SSE42-NEXT:    pextrb $4, %xmm0, %r12d
8775; SSE42-NEXT:    pextrb $2, %xmm0, %ebx
8776; SSE42-NEXT:    pextrb $0, %xmm0, %eax
8777; SSE42-NEXT:    psllw $15, %xmm1
8778; SSE42-NEXT:    psraw $15, %xmm1
8779; SSE42-NEXT:    andb $1, %r9b
8780; SSE42-NEXT:    movb %r9b, 2(%rdi)
8781; SSE42-NEXT:    andb $1, %r11b
8782; SSE42-NEXT:    movb %r11b, 2(%rdi)
8783; SSE42-NEXT:    andb $1, %r15b
8784; SSE42-NEXT:    movb %r15b, 2(%rdi)
8785; SSE42-NEXT:    andb $1, %r13b
8786; SSE42-NEXT:    movb %r13b, 2(%rdi)
8787; SSE42-NEXT:    andb $1, %bpl
8788; SSE42-NEXT:    movb %bpl, 2(%rdi)
8789; SSE42-NEXT:    andb $1, %cl
8790; SSE42-NEXT:    movb %cl, 2(%rdi)
8791; SSE42-NEXT:    andb $1, %sil
8792; SSE42-NEXT:    movb %sil, (%rdi)
8793; SSE42-NEXT:    andb $1, %dl
8794; SSE42-NEXT:    movb %dl, (%rdi)
8795; SSE42-NEXT:    pextrb $14, %xmm1, %r9d
8796; SSE42-NEXT:    pextrb $12, %xmm1, %r11d
8797; SSE42-NEXT:    pextrb $10, %xmm1, %r15d
8798; SSE42-NEXT:    pextrb $8, %xmm1, %r13d
8799; SSE42-NEXT:    pextrb $6, %xmm1, %ecx
8800; SSE42-NEXT:    pextrb $4, %xmm1, %edx
8801; SSE42-NEXT:    pextrb $2, %xmm1, %esi
8802; SSE42-NEXT:    pextrb $0, %xmm1, %ebp
8803; SSE42-NEXT:    andb $1, %r8b
8804; SSE42-NEXT:    movb %r8b, (%rdi)
8805; SSE42-NEXT:    andb $1, %r10b
8806; SSE42-NEXT:    movb %r10b, (%rdi)
8807; SSE42-NEXT:    andb $1, %r14b
8808; SSE42-NEXT:    movb %r14b, (%rdi)
8809; SSE42-NEXT:    andb $1, %r12b
8810; SSE42-NEXT:    movb %r12b, (%rdi)
8811; SSE42-NEXT:    andb $1, %bl
8812; SSE42-NEXT:    movb %bl, (%rdi)
8813; SSE42-NEXT:    andb $1, %al
8814; SSE42-NEXT:    movb %al, (%rdi)
8815; SSE42-NEXT:    andb $1, %r9b
8816; SSE42-NEXT:    movb %r9b, (%rdi)
8817; SSE42-NEXT:    andb $1, %r11b
8818; SSE42-NEXT:    movb %r11b, (%rdi)
8819; SSE42-NEXT:    andb $1, %r15b
8820; SSE42-NEXT:    movb %r15b, (%rdi)
8821; SSE42-NEXT:    andb $1, %r13b
8822; SSE42-NEXT:    movb %r13b, (%rdi)
8823; SSE42-NEXT:    andb $1, %cl
8824; SSE42-NEXT:    movb %cl, (%rdi)
8825; SSE42-NEXT:    andb $1, %dl
8826; SSE42-NEXT:    movb %dl, (%rdi)
8827; SSE42-NEXT:    andb $1, %sil
8828; SSE42-NEXT:    movb %sil, (%rdi)
8829; SSE42-NEXT:    andb $1, %bpl
8830; SSE42-NEXT:    movb %bpl, (%rdi)
8831; SSE42-NEXT:    movq %rdi, %rax
8832; SSE42-NEXT:    popq %rbx
8833; SSE42-NEXT:    popq %r12
8834; SSE42-NEXT:    popq %r13
8835; SSE42-NEXT:    popq %r14
8836; SSE42-NEXT:    popq %r15
8837; SSE42-NEXT:    popq %rbp
8838; SSE42-NEXT:    retq
8839;
8840; AVX1-LABEL: test_cmp_v32f64:
8841; AVX1:       # BB#0:
8842; AVX1-NEXT:    pushq %rbp
8843; AVX1-NEXT:    movq %rsp, %rbp
8844; AVX1-NEXT:    andq $-32, %rsp
8845; AVX1-NEXT:    subq $32, %rsp
8846; AVX1-NEXT:    vmovapd 16(%rbp), %ymm8
8847; AVX1-NEXT:    vmovapd 48(%rbp), %ymm9
8848; AVX1-NEXT:    vmovapd 80(%rbp), %ymm10
8849; AVX1-NEXT:    vmovapd 112(%rbp), %ymm11
8850; AVX1-NEXT:    vmovapd 144(%rbp), %ymm12
8851; AVX1-NEXT:    vmovapd 176(%rbp), %ymm13
8852; AVX1-NEXT:    vmovapd 208(%rbp), %ymm14
8853; AVX1-NEXT:    vmovapd 240(%rbp), %ymm15
8854; AVX1-NEXT:    vcmpltpd %ymm7, %ymm15, %ymm15
8855; AVX1-NEXT:    vextractf128 $1, %ymm15, %xmm7
8856; AVX1-NEXT:    vpacksswb %xmm7, %xmm15, %xmm15
8857; AVX1-NEXT:    vcmpltpd %ymm6, %ymm14, %ymm6
8858; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
8859; AVX1-NEXT:    vpacksswb %xmm7, %xmm6, %xmm6
8860; AVX1-NEXT:    vpacksswb %xmm15, %xmm6, %xmm6
8861; AVX1-NEXT:    vcmpltpd %ymm5, %ymm13, %ymm5
8862; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm7
8863; AVX1-NEXT:    vpacksswb %xmm7, %xmm5, %xmm5
8864; AVX1-NEXT:    vcmpltpd %ymm4, %ymm12, %ymm4
8865; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm7
8866; AVX1-NEXT:    vpacksswb %xmm7, %xmm4, %xmm4
8867; AVX1-NEXT:    vpacksswb %xmm5, %xmm4, %xmm4
8868; AVX1-NEXT:    vpacksswb %xmm6, %xmm4, %xmm4
8869; AVX1-NEXT:    vcmpltpd %ymm3, %ymm11, %ymm3
8870; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
8871; AVX1-NEXT:    vpacksswb %xmm5, %xmm3, %xmm3
8872; AVX1-NEXT:    vcmpltpd %ymm2, %ymm10, %ymm2
8873; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
8874; AVX1-NEXT:    vpacksswb %xmm5, %xmm2, %xmm2
8875; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
8876; AVX1-NEXT:    vcmpltpd %ymm1, %ymm9, %ymm1
8877; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8878; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
8879; AVX1-NEXT:    vcmpltpd %ymm0, %ymm8, %ymm0
8880; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8881; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
8882; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
8883; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
8884; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
8885; AVX1-NEXT:    movq %rbp, %rsp
8886; AVX1-NEXT:    popq %rbp
8887; AVX1-NEXT:    retq
8888;
8889; AVX2-LABEL: test_cmp_v32f64:
8890; AVX2:       # BB#0:
8891; AVX2-NEXT:    pushq %rbp
8892; AVX2-NEXT:    movq %rsp, %rbp
8893; AVX2-NEXT:    andq $-32, %rsp
8894; AVX2-NEXT:    subq $32, %rsp
8895; AVX2-NEXT:    vmovapd 16(%rbp), %ymm8
8896; AVX2-NEXT:    vmovapd 48(%rbp), %ymm9
8897; AVX2-NEXT:    vmovapd 80(%rbp), %ymm10
8898; AVX2-NEXT:    vmovapd 112(%rbp), %ymm11
8899; AVX2-NEXT:    vmovapd 144(%rbp), %ymm12
8900; AVX2-NEXT:    vmovapd 176(%rbp), %ymm13
8901; AVX2-NEXT:    vmovapd 208(%rbp), %ymm14
8902; AVX2-NEXT:    vmovapd 240(%rbp), %ymm15
8903; AVX2-NEXT:    vcmpltpd %ymm7, %ymm15, %ymm7
8904; AVX2-NEXT:    vcmpltpd %ymm6, %ymm14, %ymm6
8905; AVX2-NEXT:    vpacksswb %ymm7, %ymm6, %ymm6
8906; AVX2-NEXT:    vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]
8907; AVX2-NEXT:    vcmpltpd %ymm5, %ymm13, %ymm5
8908; AVX2-NEXT:    vcmpltpd %ymm4, %ymm12, %ymm4
8909; AVX2-NEXT:    vpacksswb %ymm5, %ymm4, %ymm4
8910; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
8911; AVX2-NEXT:    vpacksswb %ymm6, %ymm4, %ymm4
8912; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
8913; AVX2-NEXT:    vcmpltpd %ymm3, %ymm11, %ymm3
8914; AVX2-NEXT:    vcmpltpd %ymm2, %ymm10, %ymm2
8915; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
8916; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
8917; AVX2-NEXT:    vcmpltpd %ymm1, %ymm9, %ymm1
8918; AVX2-NEXT:    vcmpltpd %ymm0, %ymm8, %ymm0
8919; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
8920; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
8921; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
8922; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
8923; AVX2-NEXT:    vpacksswb %ymm4, %ymm0, %ymm0
8924; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
8925; AVX2-NEXT:    movq %rbp, %rsp
8926; AVX2-NEXT:    popq %rbp
8927; AVX2-NEXT:    retq
8928;
8929; AVX512F-LABEL: test_cmp_v32f64:
8930; AVX512F:       # BB#0:
8931; AVX512F-NEXT:    vextractf32x4 $3, %zmm4, %xmm8
8932; AVX512F-NEXT:    vextractf32x4 $3, %zmm0, %xmm9
8933; AVX512F-NEXT:    xorl %eax, %eax
8934; AVX512F-NEXT:    vucomisd %xmm8, %xmm9
8935; AVX512F-NEXT:    movq $-1, %rcx
8936; AVX512F-NEXT:    movl $0, %edx
8937; AVX512F-NEXT:    cmovaq %rcx, %rdx
8938; AVX512F-NEXT:    vmovq %rdx, %xmm10
8939; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm8 = xmm8[1,0]
8940; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
8941; AVX512F-NEXT:    vucomisd %xmm8, %xmm9
8942; AVX512F-NEXT:    movl $0, %edx
8943; AVX512F-NEXT:    cmovaq %rcx, %rdx
8944; AVX512F-NEXT:    vmovq %rdx, %xmm8
8945; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm10[0],xmm8[0]
8946; AVX512F-NEXT:    vextractf32x4 $2, %zmm4, %xmm9
8947; AVX512F-NEXT:    vextractf32x4 $2, %zmm0, %xmm10
8948; AVX512F-NEXT:    vucomisd %xmm9, %xmm10
8949; AVX512F-NEXT:    movl $0, %edx
8950; AVX512F-NEXT:    cmovaq %rcx, %rdx
8951; AVX512F-NEXT:    vmovq %rdx, %xmm11
8952; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
8953; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
8954; AVX512F-NEXT:    vucomisd %xmm9, %xmm10
8955; AVX512F-NEXT:    movl $0, %edx
8956; AVX512F-NEXT:    cmovaq %rcx, %rdx
8957; AVX512F-NEXT:    vmovq %rdx, %xmm9
8958; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
8959; AVX512F-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
8960; AVX512F-NEXT:    vextractf32x4 $1, %zmm4, %xmm9
8961; AVX512F-NEXT:    vextractf32x4 $1, %zmm0, %xmm10
8962; AVX512F-NEXT:    vucomisd %xmm9, %xmm10
8963; AVX512F-NEXT:    movl $0, %edx
8964; AVX512F-NEXT:    cmovaq %rcx, %rdx
8965; AVX512F-NEXT:    vmovq %rdx, %xmm11
8966; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
8967; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
8968; AVX512F-NEXT:    vucomisd %xmm9, %xmm10
8969; AVX512F-NEXT:    movl $0, %edx
8970; AVX512F-NEXT:    cmovaq %rcx, %rdx
8971; AVX512F-NEXT:    vmovq %rdx, %xmm9
8972; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
8973; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
8974; AVX512F-NEXT:    movl $0, %edx
8975; AVX512F-NEXT:    cmovaq %rcx, %rdx
8976; AVX512F-NEXT:    vmovq %rdx, %xmm10
8977; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
8978; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
8979; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
8980; AVX512F-NEXT:    movl $0, %edx
8981; AVX512F-NEXT:    cmovaq %rcx, %rdx
8982; AVX512F-NEXT:    vmovq %rdx, %xmm0
8983; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
8984; AVX512F-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
8985; AVX512F-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
8986; AVX512F-NEXT:    vpmovqd %zmm0, %ymm8
8987; AVX512F-NEXT:    vextractf32x4 $3, %zmm5, %xmm4
8988; AVX512F-NEXT:    vextractf32x4 $3, %zmm1, %xmm0
8989; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
8990; AVX512F-NEXT:    movl $0, %edx
8991; AVX512F-NEXT:    cmovaq %rcx, %rdx
8992; AVX512F-NEXT:    vmovq %rdx, %xmm9
8993; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
8994; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
8995; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
8996; AVX512F-NEXT:    movl $0, %edx
8997; AVX512F-NEXT:    cmovaq %rcx, %rdx
8998; AVX512F-NEXT:    vmovq %rdx, %xmm0
8999; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm0[0]
9000; AVX512F-NEXT:    vextractf32x4 $2, %zmm5, %xmm4
9001; AVX512F-NEXT:    vextractf32x4 $2, %zmm1, %xmm0
9002; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9003; AVX512F-NEXT:    movl $0, %edx
9004; AVX512F-NEXT:    cmovaq %rcx, %rdx
9005; AVX512F-NEXT:    vmovq %rdx, %xmm10
9006; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9007; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9008; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9009; AVX512F-NEXT:    movl $0, %edx
9010; AVX512F-NEXT:    cmovaq %rcx, %rdx
9011; AVX512F-NEXT:    vmovq %rdx, %xmm0
9012; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9013; AVX512F-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
9014; AVX512F-NEXT:    vextractf32x4 $1, %zmm5, %xmm4
9015; AVX512F-NEXT:    vextractf32x4 $1, %zmm1, %xmm0
9016; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9017; AVX512F-NEXT:    movl $0, %edx
9018; AVX512F-NEXT:    cmovaq %rcx, %rdx
9019; AVX512F-NEXT:    vmovq %rdx, %xmm10
9020; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9021; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9022; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9023; AVX512F-NEXT:    movl $0, %edx
9024; AVX512F-NEXT:    cmovaq %rcx, %rdx
9025; AVX512F-NEXT:    vmovq %rdx, %xmm0
9026; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9027; AVX512F-NEXT:    vucomisd %xmm5, %xmm1
9028; AVX512F-NEXT:    movl $0, %edx
9029; AVX512F-NEXT:    cmovaq %rcx, %rdx
9030; AVX512F-NEXT:    vmovq %rdx, %xmm4
9031; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9032; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9033; AVX512F-NEXT:    vucomisd %xmm5, %xmm1
9034; AVX512F-NEXT:    movl $0, %edx
9035; AVX512F-NEXT:    cmovaq %rcx, %rdx
9036; AVX512F-NEXT:    vmovq %rdx, %xmm1
9037; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9038; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
9039; AVX512F-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
9040; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
9041; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
9042; AVX512F-NEXT:    vpmovdb %zmm0, %xmm8
9043; AVX512F-NEXT:    vextractf32x4 $3, %zmm6, %xmm1
9044; AVX512F-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
9045; AVX512F-NEXT:    vucomisd %xmm1, %xmm4
9046; AVX512F-NEXT:    movl $0, %edx
9047; AVX512F-NEXT:    cmovaq %rcx, %rdx
9048; AVX512F-NEXT:    vmovq %rdx, %xmm5
9049; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9050; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9051; AVX512F-NEXT:    vucomisd %xmm1, %xmm4
9052; AVX512F-NEXT:    movl $0, %edx
9053; AVX512F-NEXT:    cmovaq %rcx, %rdx
9054; AVX512F-NEXT:    vmovq %rdx, %xmm1
9055; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9056; AVX512F-NEXT:    vextractf32x4 $2, %zmm6, %xmm4
9057; AVX512F-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
9058; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
9059; AVX512F-NEXT:    movl $0, %edx
9060; AVX512F-NEXT:    cmovaq %rcx, %rdx
9061; AVX512F-NEXT:    vmovq %rdx, %xmm0
9062; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9063; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9064; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
9065; AVX512F-NEXT:    movl $0, %edx
9066; AVX512F-NEXT:    cmovaq %rcx, %rdx
9067; AVX512F-NEXT:    vmovq %rdx, %xmm4
9068; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
9069; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
9070; AVX512F-NEXT:    vextractf32x4 $1, %zmm6, %xmm1
9071; AVX512F-NEXT:    vextractf32x4 $1, %zmm2, %xmm4
9072; AVX512F-NEXT:    vucomisd %xmm1, %xmm4
9073; AVX512F-NEXT:    movl $0, %edx
9074; AVX512F-NEXT:    cmovaq %rcx, %rdx
9075; AVX512F-NEXT:    vmovq %rdx, %xmm5
9076; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9077; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9078; AVX512F-NEXT:    vucomisd %xmm1, %xmm4
9079; AVX512F-NEXT:    movl $0, %edx
9080; AVX512F-NEXT:    cmovaq %rcx, %rdx
9081; AVX512F-NEXT:    vmovq %rdx, %xmm1
9082; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9083; AVX512F-NEXT:    vucomisd %xmm6, %xmm2
9084; AVX512F-NEXT:    movl $0, %edx
9085; AVX512F-NEXT:    cmovaq %rcx, %rdx
9086; AVX512F-NEXT:    vmovq %rdx, %xmm4
9087; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
9088; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9089; AVX512F-NEXT:    vucomisd %xmm5, %xmm2
9090; AVX512F-NEXT:    movl $0, %edx
9091; AVX512F-NEXT:    cmovaq %rcx, %rdx
9092; AVX512F-NEXT:    vmovq %rdx, %xmm2
9093; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm4[0],xmm2[0]
9094; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9095; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
9096; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
9097; AVX512F-NEXT:    vextractf32x4 $3, %zmm7, %xmm1
9098; AVX512F-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
9099; AVX512F-NEXT:    vucomisd %xmm1, %xmm2
9100; AVX512F-NEXT:    movl $0, %edx
9101; AVX512F-NEXT:    cmovaq %rcx, %rdx
9102; AVX512F-NEXT:    vmovq %rdx, %xmm4
9103; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9104; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9105; AVX512F-NEXT:    vucomisd %xmm1, %xmm2
9106; AVX512F-NEXT:    movl $0, %edx
9107; AVX512F-NEXT:    cmovaq %rcx, %rdx
9108; AVX512F-NEXT:    vmovq %rdx, %xmm1
9109; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9110; AVX512F-NEXT:    vextractf32x4 $2, %zmm7, %xmm2
9111; AVX512F-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
9112; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
9113; AVX512F-NEXT:    movl $0, %edx
9114; AVX512F-NEXT:    cmovaq %rcx, %rdx
9115; AVX512F-NEXT:    vmovq %rdx, %xmm5
9116; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9117; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9118; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
9119; AVX512F-NEXT:    movl $0, %edx
9120; AVX512F-NEXT:    cmovaq %rcx, %rdx
9121; AVX512F-NEXT:    vmovq %rdx, %xmm2
9122; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9123; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9124; AVX512F-NEXT:    vextractf32x4 $1, %zmm7, %xmm2
9125; AVX512F-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
9126; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
9127; AVX512F-NEXT:    movl $0, %edx
9128; AVX512F-NEXT:    cmovaq %rcx, %rdx
9129; AVX512F-NEXT:    vmovq %rdx, %xmm5
9130; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9131; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9132; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
9133; AVX512F-NEXT:    movl $0, %edx
9134; AVX512F-NEXT:    cmovaq %rcx, %rdx
9135; AVX512F-NEXT:    vmovq %rdx, %xmm2
9136; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9137; AVX512F-NEXT:    vucomisd %xmm7, %xmm3
9138; AVX512F-NEXT:    movl $0, %edx
9139; AVX512F-NEXT:    cmovaq %rcx, %rdx
9140; AVX512F-NEXT:    vmovq %rdx, %xmm4
9141; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm7[1,0]
9142; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
9143; AVX512F-NEXT:    vucomisd %xmm5, %xmm3
9144; AVX512F-NEXT:    cmovaq %rcx, %rax
9145; AVX512F-NEXT:    vmovq %rax, %xmm3
9146; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]
9147; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2
9148; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm1
9149; AVX512F-NEXT:    vpmovqd %zmm1, %ymm1
9150; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
9151; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
9152; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
9153; AVX512F-NEXT:    retq
9154;
9155; AVX512DQ-LABEL: test_cmp_v32f64:
9156; AVX512DQ:       # BB#0:
9157; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm4, %xmm8
9158; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm0, %xmm9
9159; AVX512DQ-NEXT:    xorl %eax, %eax
9160; AVX512DQ-NEXT:    vucomisd %xmm8, %xmm9
9161; AVX512DQ-NEXT:    movq $-1, %rcx
9162; AVX512DQ-NEXT:    movl $0, %edx
9163; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9164; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
9165; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm8 = xmm8[1,0]
9166; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9167; AVX512DQ-NEXT:    vucomisd %xmm8, %xmm9
9168; AVX512DQ-NEXT:    movl $0, %edx
9169; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9170; AVX512DQ-NEXT:    vmovq %rdx, %xmm8
9171; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm10[0],xmm8[0]
9172; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm4, %xmm9
9173; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm0, %xmm10
9174; AVX512DQ-NEXT:    vucomisd %xmm9, %xmm10
9175; AVX512DQ-NEXT:    movl $0, %edx
9176; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9177; AVX512DQ-NEXT:    vmovq %rdx, %xmm11
9178; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9179; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
9180; AVX512DQ-NEXT:    vucomisd %xmm9, %xmm10
9181; AVX512DQ-NEXT:    movl $0, %edx
9182; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9183; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
9184; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
9185; AVX512DQ-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
9186; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm4, %xmm9
9187; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm0, %xmm10
9188; AVX512DQ-NEXT:    vucomisd %xmm9, %xmm10
9189; AVX512DQ-NEXT:    movl $0, %edx
9190; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9191; AVX512DQ-NEXT:    vmovq %rdx, %xmm11
9192; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9193; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
9194; AVX512DQ-NEXT:    vucomisd %xmm9, %xmm10
9195; AVX512DQ-NEXT:    movl $0, %edx
9196; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9197; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
9198; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
9199; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9200; AVX512DQ-NEXT:    movl $0, %edx
9201; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9202; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
9203; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9204; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9205; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9206; AVX512DQ-NEXT:    movl $0, %edx
9207; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9208; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
9209; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9210; AVX512DQ-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
9211; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
9212; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm8
9213; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm5, %xmm4
9214; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm1, %xmm0
9215; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9216; AVX512DQ-NEXT:    movl $0, %edx
9217; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9218; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
9219; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9220; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9221; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9222; AVX512DQ-NEXT:    movl $0, %edx
9223; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9224; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
9225; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm0[0]
9226; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm5, %xmm4
9227; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm1, %xmm0
9228; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9229; AVX512DQ-NEXT:    movl $0, %edx
9230; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9231; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
9232; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9233; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9234; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9235; AVX512DQ-NEXT:    movl $0, %edx
9236; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9237; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
9238; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9239; AVX512DQ-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
9240; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm5, %xmm4
9241; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm1, %xmm0
9242; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9243; AVX512DQ-NEXT:    movl $0, %edx
9244; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9245; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
9246; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9247; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9248; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9249; AVX512DQ-NEXT:    movl $0, %edx
9250; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9251; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
9252; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9253; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm1
9254; AVX512DQ-NEXT:    movl $0, %edx
9255; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9256; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
9257; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9258; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9259; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm1
9260; AVX512DQ-NEXT:    movl $0, %edx
9261; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9262; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
9263; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9264; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
9265; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
9266; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
9267; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm0, %zmm8, %zmm0
9268; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm8
9269; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm6, %xmm1
9270; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm2, %xmm4
9271; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm4
9272; AVX512DQ-NEXT:    movl $0, %edx
9273; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9274; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
9275; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9276; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9277; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm4
9278; AVX512DQ-NEXT:    movl $0, %edx
9279; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9280; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
9281; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9282; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm6, %xmm4
9283; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm2, %xmm5
9284; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
9285; AVX512DQ-NEXT:    movl $0, %edx
9286; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9287; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
9288; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9289; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9290; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
9291; AVX512DQ-NEXT:    movl $0, %edx
9292; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9293; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
9294; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
9295; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
9296; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm6, %xmm1
9297; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm2, %xmm4
9298; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm4
9299; AVX512DQ-NEXT:    movl $0, %edx
9300; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9301; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
9302; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9303; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9304; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm4
9305; AVX512DQ-NEXT:    movl $0, %edx
9306; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9307; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
9308; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9309; AVX512DQ-NEXT:    vucomisd %xmm6, %xmm2
9310; AVX512DQ-NEXT:    movl $0, %edx
9311; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9312; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
9313; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
9314; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9315; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm2
9316; AVX512DQ-NEXT:    movl $0, %edx
9317; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9318; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
9319; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm4[0],xmm2[0]
9320; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9321; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
9322; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
9323; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm7, %xmm1
9324; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm3, %xmm2
9325; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm2
9326; AVX512DQ-NEXT:    movl $0, %edx
9327; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9328; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
9329; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9330; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9331; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm2
9332; AVX512DQ-NEXT:    movl $0, %edx
9333; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9334; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
9335; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9336; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm7, %xmm2
9337; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm3, %xmm4
9338; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
9339; AVX512DQ-NEXT:    movl $0, %edx
9340; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9341; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
9342; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9343; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9344; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
9345; AVX512DQ-NEXT:    movl $0, %edx
9346; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9347; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
9348; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9349; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9350; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm7, %xmm2
9351; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm3, %xmm4
9352; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
9353; AVX512DQ-NEXT:    movl $0, %edx
9354; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9355; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
9356; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9357; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9358; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
9359; AVX512DQ-NEXT:    movl $0, %edx
9360; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9361; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
9362; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9363; AVX512DQ-NEXT:    vucomisd %xmm7, %xmm3
9364; AVX512DQ-NEXT:    movl $0, %edx
9365; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9366; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
9367; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm7[1,0]
9368; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
9369; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm3
9370; AVX512DQ-NEXT:    cmovaq %rcx, %rax
9371; AVX512DQ-NEXT:    vmovq %rax, %xmm3
9372; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]
9373; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2
9374; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm1
9375; AVX512DQ-NEXT:    vpmovqd %zmm1, %ymm1
9376; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm1, %zmm0, %zmm0
9377; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
9378; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
9379; AVX512DQ-NEXT:    retq
9380;
9381; AVX512BW-LABEL: test_cmp_v32f64:
9382; AVX512BW:       # BB#0:
9383; AVX512BW-NEXT:    vextractf32x4 $3, %zmm4, %xmm8
9384; AVX512BW-NEXT:    vextractf32x4 $3, %zmm0, %xmm9
9385; AVX512BW-NEXT:    xorl %eax, %eax
9386; AVX512BW-NEXT:    vucomisd %xmm8, %xmm9
9387; AVX512BW-NEXT:    movq $-1, %rcx
9388; AVX512BW-NEXT:    movl $0, %edx
9389; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9390; AVX512BW-NEXT:    vmovq %rdx, %xmm10
9391; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm8 = xmm8[1,0]
9392; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9393; AVX512BW-NEXT:    vucomisd %xmm8, %xmm9
9394; AVX512BW-NEXT:    movl $0, %edx
9395; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9396; AVX512BW-NEXT:    vmovq %rdx, %xmm8
9397; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm10[0],xmm8[0]
9398; AVX512BW-NEXT:    vextractf32x4 $2, %zmm4, %xmm9
9399; AVX512BW-NEXT:    vextractf32x4 $2, %zmm0, %xmm10
9400; AVX512BW-NEXT:    vucomisd %xmm9, %xmm10
9401; AVX512BW-NEXT:    movl $0, %edx
9402; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9403; AVX512BW-NEXT:    vmovq %rdx, %xmm11
9404; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9405; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
9406; AVX512BW-NEXT:    vucomisd %xmm9, %xmm10
9407; AVX512BW-NEXT:    movl $0, %edx
9408; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9409; AVX512BW-NEXT:    vmovq %rdx, %xmm9
9410; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
9411; AVX512BW-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
9412; AVX512BW-NEXT:    vextractf32x4 $1, %zmm4, %xmm9
9413; AVX512BW-NEXT:    vextractf32x4 $1, %zmm0, %xmm10
9414; AVX512BW-NEXT:    vucomisd %xmm9, %xmm10
9415; AVX512BW-NEXT:    movl $0, %edx
9416; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9417; AVX512BW-NEXT:    vmovq %rdx, %xmm11
9418; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9419; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
9420; AVX512BW-NEXT:    vucomisd %xmm9, %xmm10
9421; AVX512BW-NEXT:    movl $0, %edx
9422; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9423; AVX512BW-NEXT:    vmovq %rdx, %xmm9
9424; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
9425; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9426; AVX512BW-NEXT:    movl $0, %edx
9427; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9428; AVX512BW-NEXT:    vmovq %rdx, %xmm10
9429; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9430; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9431; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9432; AVX512BW-NEXT:    movl $0, %edx
9433; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9434; AVX512BW-NEXT:    vmovq %rdx, %xmm0
9435; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9436; AVX512BW-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
9437; AVX512BW-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
9438; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm8
9439; AVX512BW-NEXT:    vextractf32x4 $3, %zmm5, %xmm4
9440; AVX512BW-NEXT:    vextractf32x4 $3, %zmm1, %xmm0
9441; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9442; AVX512BW-NEXT:    movl $0, %edx
9443; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9444; AVX512BW-NEXT:    vmovq %rdx, %xmm9
9445; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9446; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9447; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9448; AVX512BW-NEXT:    movl $0, %edx
9449; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9450; AVX512BW-NEXT:    vmovq %rdx, %xmm0
9451; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm0[0]
9452; AVX512BW-NEXT:    vextractf32x4 $2, %zmm5, %xmm4
9453; AVX512BW-NEXT:    vextractf32x4 $2, %zmm1, %xmm0
9454; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9455; AVX512BW-NEXT:    movl $0, %edx
9456; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9457; AVX512BW-NEXT:    vmovq %rdx, %xmm10
9458; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9459; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9460; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9461; AVX512BW-NEXT:    movl $0, %edx
9462; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9463; AVX512BW-NEXT:    vmovq %rdx, %xmm0
9464; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9465; AVX512BW-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
9466; AVX512BW-NEXT:    vextractf32x4 $1, %zmm5, %xmm4
9467; AVX512BW-NEXT:    vextractf32x4 $1, %zmm1, %xmm0
9468; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9469; AVX512BW-NEXT:    movl $0, %edx
9470; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9471; AVX512BW-NEXT:    vmovq %rdx, %xmm10
9472; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9473; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9474; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9475; AVX512BW-NEXT:    movl $0, %edx
9476; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9477; AVX512BW-NEXT:    vmovq %rdx, %xmm0
9478; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9479; AVX512BW-NEXT:    vucomisd %xmm5, %xmm1
9480; AVX512BW-NEXT:    movl $0, %edx
9481; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9482; AVX512BW-NEXT:    vmovq %rdx, %xmm4
9483; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9484; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9485; AVX512BW-NEXT:    vucomisd %xmm5, %xmm1
9486; AVX512BW-NEXT:    movl $0, %edx
9487; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9488; AVX512BW-NEXT:    vmovq %rdx, %xmm1
9489; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9490; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
9491; AVX512BW-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
9492; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
9493; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
9494; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm8
9495; AVX512BW-NEXT:    vextractf32x4 $3, %zmm6, %xmm1
9496; AVX512BW-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
9497; AVX512BW-NEXT:    vucomisd %xmm1, %xmm4
9498; AVX512BW-NEXT:    movl $0, %edx
9499; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9500; AVX512BW-NEXT:    vmovq %rdx, %xmm5
9501; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9502; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9503; AVX512BW-NEXT:    vucomisd %xmm1, %xmm4
9504; AVX512BW-NEXT:    movl $0, %edx
9505; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9506; AVX512BW-NEXT:    vmovq %rdx, %xmm1
9507; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9508; AVX512BW-NEXT:    vextractf32x4 $2, %zmm6, %xmm4
9509; AVX512BW-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
9510; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
9511; AVX512BW-NEXT:    movl $0, %edx
9512; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9513; AVX512BW-NEXT:    vmovq %rdx, %xmm0
9514; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9515; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9516; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
9517; AVX512BW-NEXT:    movl $0, %edx
9518; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9519; AVX512BW-NEXT:    vmovq %rdx, %xmm4
9520; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
9521; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
9522; AVX512BW-NEXT:    vextractf32x4 $1, %zmm6, %xmm1
9523; AVX512BW-NEXT:    vextractf32x4 $1, %zmm2, %xmm4
9524; AVX512BW-NEXT:    vucomisd %xmm1, %xmm4
9525; AVX512BW-NEXT:    movl $0, %edx
9526; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9527; AVX512BW-NEXT:    vmovq %rdx, %xmm5
9528; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9529; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9530; AVX512BW-NEXT:    vucomisd %xmm1, %xmm4
9531; AVX512BW-NEXT:    movl $0, %edx
9532; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9533; AVX512BW-NEXT:    vmovq %rdx, %xmm1
9534; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9535; AVX512BW-NEXT:    vucomisd %xmm6, %xmm2
9536; AVX512BW-NEXT:    movl $0, %edx
9537; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9538; AVX512BW-NEXT:    vmovq %rdx, %xmm4
9539; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
9540; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9541; AVX512BW-NEXT:    vucomisd %xmm5, %xmm2
9542; AVX512BW-NEXT:    movl $0, %edx
9543; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9544; AVX512BW-NEXT:    vmovq %rdx, %xmm2
9545; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm4[0],xmm2[0]
9546; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9547; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
9548; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
9549; AVX512BW-NEXT:    vextractf32x4 $3, %zmm7, %xmm1
9550; AVX512BW-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
9551; AVX512BW-NEXT:    vucomisd %xmm1, %xmm2
9552; AVX512BW-NEXT:    movl $0, %edx
9553; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9554; AVX512BW-NEXT:    vmovq %rdx, %xmm4
9555; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9556; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9557; AVX512BW-NEXT:    vucomisd %xmm1, %xmm2
9558; AVX512BW-NEXT:    movl $0, %edx
9559; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9560; AVX512BW-NEXT:    vmovq %rdx, %xmm1
9561; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9562; AVX512BW-NEXT:    vextractf32x4 $2, %zmm7, %xmm2
9563; AVX512BW-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
9564; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
9565; AVX512BW-NEXT:    movl $0, %edx
9566; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9567; AVX512BW-NEXT:    vmovq %rdx, %xmm5
9568; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9569; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9570; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
9571; AVX512BW-NEXT:    movl $0, %edx
9572; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9573; AVX512BW-NEXT:    vmovq %rdx, %xmm2
9574; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9575; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9576; AVX512BW-NEXT:    vextractf32x4 $1, %zmm7, %xmm2
9577; AVX512BW-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
9578; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
9579; AVX512BW-NEXT:    movl $0, %edx
9580; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9581; AVX512BW-NEXT:    vmovq %rdx, %xmm5
9582; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9583; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9584; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
9585; AVX512BW-NEXT:    movl $0, %edx
9586; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9587; AVX512BW-NEXT:    vmovq %rdx, %xmm2
9588; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9589; AVX512BW-NEXT:    vucomisd %xmm7, %xmm3
9590; AVX512BW-NEXT:    movl $0, %edx
9591; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9592; AVX512BW-NEXT:    vmovq %rdx, %xmm4
9593; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm7[1,0]
9594; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
9595; AVX512BW-NEXT:    vucomisd %xmm5, %xmm3
9596; AVX512BW-NEXT:    cmovaq %rcx, %rax
9597; AVX512BW-NEXT:    vmovq %rax, %xmm3
9598; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]
9599; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2
9600; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm1
9601; AVX512BW-NEXT:    vpmovqd %zmm1, %ymm1
9602; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
9603; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
9604; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
9605; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
9606; AVX512BW-NEXT:    retq
9607  %1 = fcmp ogt <32 x double> %a0, %a1
9608  ret <32 x i1> %1
9609}
9610
9611define <32 x i1> @test_cmp_v32i64(<32 x i64> %a0, <32 x i64> %a1) nounwind {
9612; SSE2-LABEL: test_cmp_v32i64:
9613; SSE2:       # BB#0:
9614; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
9615; SSE2-NEXT:    pxor %xmm8, %xmm7
9616; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
9617; SSE2-NEXT:    pxor %xmm8, %xmm9
9618; SSE2-NEXT:    movdqa %xmm7, %xmm10
9619; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
9620; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
9621; SSE2-NEXT:    pcmpeqd %xmm7, %xmm9
9622; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
9623; SSE2-NEXT:    pand %xmm11, %xmm7
9624; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
9625; SSE2-NEXT:    por %xmm7, %xmm9
9626; SSE2-NEXT:    pxor %xmm8, %xmm6
9627; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
9628; SSE2-NEXT:    pxor %xmm8, %xmm7
9629; SSE2-NEXT:    movdqa %xmm6, %xmm10
9630; SSE2-NEXT:    pcmpgtd %xmm7, %xmm10
9631; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
9632; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
9633; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9634; SSE2-NEXT:    pand %xmm11, %xmm6
9635; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm10[1,1,3,3]
9636; SSE2-NEXT:    por %xmm6, %xmm7
9637; SSE2-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,2],xmm9[0,2]
9638; SSE2-NEXT:    pslld $31, %xmm7
9639; SSE2-NEXT:    psrad $31, %xmm7
9640; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm7[0,2,2,3,4,5,6,7]
9641; SSE2-NEXT:    pshufhw {{.*#+}} xmm6 = xmm6[0,1,2,3,4,6,6,7]
9642; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,2,2,3]
9643; SSE2-NEXT:    pxor %xmm8, %xmm5
9644; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
9645; SSE2-NEXT:    pxor %xmm8, %xmm7
9646; SSE2-NEXT:    movdqa %xmm5, %xmm6
9647; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
9648; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
9649; SSE2-NEXT:    pcmpeqd %xmm5, %xmm7
9650; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9651; SSE2-NEXT:    pand %xmm10, %xmm5
9652; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
9653; SSE2-NEXT:    por %xmm5, %xmm6
9654; SSE2-NEXT:    pxor %xmm8, %xmm4
9655; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
9656; SSE2-NEXT:    pxor %xmm8, %xmm5
9657; SSE2-NEXT:    movdqa %xmm4, %xmm7
9658; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9659; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2]
9660; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
9661; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9662; SSE2-NEXT:    pand %xmm10, %xmm4
9663; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9664; SSE2-NEXT:    por %xmm4, %xmm5
9665; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm6[0,2]
9666; SSE2-NEXT:    pslld $31, %xmm5
9667; SSE2-NEXT:    psrad $31, %xmm5
9668; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm5[0,2,2,3,4,5,6,7]
9669; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
9670; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,2,2,3]
9671; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm9[0]
9672; SSE2-NEXT:    psllw $15, %xmm5
9673; SSE2-NEXT:    psraw $15, %xmm5
9674; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [255,255,255,255,255,255,255,255]
9675; SSE2-NEXT:    pand %xmm9, %xmm5
9676; SSE2-NEXT:    pxor %xmm8, %xmm3
9677; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm6
9678; SSE2-NEXT:    pxor %xmm8, %xmm6
9679; SSE2-NEXT:    movdqa %xmm3, %xmm7
9680; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
9681; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
9682; SSE2-NEXT:    pcmpeqd %xmm3, %xmm6
9683; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
9684; SSE2-NEXT:    pand %xmm4, %xmm3
9685; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
9686; SSE2-NEXT:    por %xmm3, %xmm4
9687; SSE2-NEXT:    pxor %xmm8, %xmm2
9688; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9689; SSE2-NEXT:    pxor %xmm8, %xmm3
9690; SSE2-NEXT:    movdqa %xmm2, %xmm6
9691; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
9692; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
9693; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
9694; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
9695; SSE2-NEXT:    pand %xmm7, %xmm2
9696; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
9697; SSE2-NEXT:    por %xmm2, %xmm3
9698; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,2],xmm4[0,2]
9699; SSE2-NEXT:    pslld $31, %xmm3
9700; SSE2-NEXT:    psrad $31, %xmm3
9701; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm3[0,2,2,3,4,5,6,7]
9702; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
9703; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
9704; SSE2-NEXT:    pxor %xmm8, %xmm1
9705; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9706; SSE2-NEXT:    pxor %xmm8, %xmm3
9707; SSE2-NEXT:    movdqa %xmm1, %xmm4
9708; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9709; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
9710; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
9711; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
9712; SSE2-NEXT:    pand %xmm6, %xmm1
9713; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9714; SSE2-NEXT:    por %xmm1, %xmm3
9715; SSE2-NEXT:    pxor %xmm8, %xmm0
9716; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
9717; SSE2-NEXT:    pxor %xmm8, %xmm1
9718; SSE2-NEXT:    movdqa %xmm0, %xmm4
9719; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
9720; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
9721; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
9722; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
9723; SSE2-NEXT:    pand %xmm6, %xmm0
9724; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
9725; SSE2-NEXT:    por %xmm0, %xmm1
9726; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
9727; SSE2-NEXT:    pslld $31, %xmm1
9728; SSE2-NEXT:    psrad $31, %xmm1
9729; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]
9730; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
9731; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
9732; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
9733; SSE2-NEXT:    psllw $15, %xmm0
9734; SSE2-NEXT:    psraw $15, %xmm0
9735; SSE2-NEXT:    pand %xmm9, %xmm0
9736; SSE2-NEXT:    packuswb %xmm5, %xmm0
9737; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
9738; SSE2-NEXT:    pxor %xmm8, %xmm1
9739; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
9740; SSE2-NEXT:    pxor %xmm8, %xmm2
9741; SSE2-NEXT:    movdqa %xmm2, %xmm3
9742; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
9743; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
9744; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
9745; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
9746; SSE2-NEXT:    pand %xmm4, %xmm1
9747; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
9748; SSE2-NEXT:    por %xmm1, %xmm2
9749; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
9750; SSE2-NEXT:    pxor %xmm8, %xmm1
9751; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9752; SSE2-NEXT:    pxor %xmm8, %xmm3
9753; SSE2-NEXT:    movdqa %xmm3, %xmm4
9754; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
9755; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9756; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
9757; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
9758; SSE2-NEXT:    pand %xmm5, %xmm1
9759; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9760; SSE2-NEXT:    por %xmm1, %xmm3
9761; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,2],xmm2[0,2]
9762; SSE2-NEXT:    pslld $31, %xmm3
9763; SSE2-NEXT:    psrad $31, %xmm3
9764; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm3[0,2,2,3,4,5,6,7]
9765; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
9766; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3]
9767; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
9768; SSE2-NEXT:    pxor %xmm8, %xmm1
9769; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9770; SSE2-NEXT:    pxor %xmm8, %xmm3
9771; SSE2-NEXT:    movdqa %xmm3, %xmm4
9772; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
9773; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9774; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
9775; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
9776; SSE2-NEXT:    pand %xmm5, %xmm1
9777; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9778; SSE2-NEXT:    por %xmm1, %xmm3
9779; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
9780; SSE2-NEXT:    pxor %xmm8, %xmm1
9781; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
9782; SSE2-NEXT:    pxor %xmm8, %xmm4
9783; SSE2-NEXT:    movdqa %xmm4, %xmm5
9784; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5
9785; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9786; SSE2-NEXT:    pcmpeqd %xmm1, %xmm4
9787; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
9788; SSE2-NEXT:    pand %xmm6, %xmm1
9789; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9790; SSE2-NEXT:    por %xmm1, %xmm4
9791; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,2],xmm3[0,2]
9792; SSE2-NEXT:    pslld $31, %xmm4
9793; SSE2-NEXT:    psrad $31, %xmm4
9794; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm4[0,2,2,3,4,5,6,7]
9795; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
9796; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
9797; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
9798; SSE2-NEXT:    psllw $15, %xmm1
9799; SSE2-NEXT:    psraw $15, %xmm1
9800; SSE2-NEXT:    pand %xmm9, %xmm1
9801; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
9802; SSE2-NEXT:    pxor %xmm8, %xmm2
9803; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9804; SSE2-NEXT:    pxor %xmm8, %xmm3
9805; SSE2-NEXT:    movdqa %xmm3, %xmm4
9806; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
9807; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9808; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
9809; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
9810; SSE2-NEXT:    pand %xmm5, %xmm2
9811; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9812; SSE2-NEXT:    por %xmm2, %xmm3
9813; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
9814; SSE2-NEXT:    pxor %xmm8, %xmm2
9815; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
9816; SSE2-NEXT:    pxor %xmm8, %xmm4
9817; SSE2-NEXT:    movdqa %xmm4, %xmm5
9818; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9819; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9820; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9821; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9822; SSE2-NEXT:    pand %xmm6, %xmm2
9823; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9824; SSE2-NEXT:    por %xmm2, %xmm4
9825; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,2],xmm3[0,2]
9826; SSE2-NEXT:    pslld $31, %xmm4
9827; SSE2-NEXT:    psrad $31, %xmm4
9828; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm4[0,2,2,3,4,5,6,7]
9829; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
9830; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
9831; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9832; SSE2-NEXT:    pxor %xmm8, %xmm3
9833; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
9834; SSE2-NEXT:    pxor %xmm8, %xmm4
9835; SSE2-NEXT:    movdqa %xmm4, %xmm5
9836; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
9837; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9838; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4
9839; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9840; SSE2-NEXT:    pand %xmm6, %xmm3
9841; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9842; SSE2-NEXT:    por %xmm3, %xmm4
9843; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9844; SSE2-NEXT:    pxor %xmm8, %xmm3
9845; SSE2-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm8
9846; SSE2-NEXT:    movdqa %xmm8, %xmm5
9847; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
9848; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9849; SSE2-NEXT:    pcmpeqd %xmm3, %xmm8
9850; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm8[1,1,3,3]
9851; SSE2-NEXT:    pand %xmm6, %xmm3
9852; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9853; SSE2-NEXT:    por %xmm3, %xmm5
9854; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm4[0,2]
9855; SSE2-NEXT:    pslld $31, %xmm5
9856; SSE2-NEXT:    psrad $31, %xmm5
9857; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm5[0,2,2,3,4,5,6,7]
9858; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
9859; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
9860; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
9861; SSE2-NEXT:    psllw $15, %xmm3
9862; SSE2-NEXT:    psraw $15, %xmm3
9863; SSE2-NEXT:    pand %xmm9, %xmm3
9864; SSE2-NEXT:    packuswb %xmm1, %xmm3
9865; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
9866; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9867; SSE2-NEXT:    andb $1, %al
9868; SSE2-NEXT:    movb %al, 2(%rdi)
9869; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
9870; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9871; SSE2-NEXT:    andb $1, %al
9872; SSE2-NEXT:    movb %al, (%rdi)
9873; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9874; SSE2-NEXT:    andb $1, %al
9875; SSE2-NEXT:    movb %al, 2(%rdi)
9876; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9877; SSE2-NEXT:    andb $1, %al
9878; SSE2-NEXT:    movb %al, (%rdi)
9879; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9880; SSE2-NEXT:    andb $1, %al
9881; SSE2-NEXT:    movb %al, 2(%rdi)
9882; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9883; SSE2-NEXT:    andb $1, %al
9884; SSE2-NEXT:    movb %al, (%rdi)
9885; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9886; SSE2-NEXT:    andb $1, %al
9887; SSE2-NEXT:    movb %al, 2(%rdi)
9888; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9889; SSE2-NEXT:    andb $1, %al
9890; SSE2-NEXT:    movb %al, (%rdi)
9891; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9892; SSE2-NEXT:    andb $1, %al
9893; SSE2-NEXT:    movb %al, 2(%rdi)
9894; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9895; SSE2-NEXT:    andb $1, %al
9896; SSE2-NEXT:    movb %al, (%rdi)
9897; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9898; SSE2-NEXT:    andb $1, %al
9899; SSE2-NEXT:    movb %al, 2(%rdi)
9900; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9901; SSE2-NEXT:    andb $1, %al
9902; SSE2-NEXT:    movb %al, (%rdi)
9903; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9904; SSE2-NEXT:    andb $1, %al
9905; SSE2-NEXT:    movb %al, 2(%rdi)
9906; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9907; SSE2-NEXT:    andb $1, %al
9908; SSE2-NEXT:    movb %al, (%rdi)
9909; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9910; SSE2-NEXT:    andb $1, %al
9911; SSE2-NEXT:    movb %al, 2(%rdi)
9912; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9913; SSE2-NEXT:    andb $1, %al
9914; SSE2-NEXT:    movb %al, (%rdi)
9915; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9916; SSE2-NEXT:    andb $1, %al
9917; SSE2-NEXT:    movb %al, 2(%rdi)
9918; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9919; SSE2-NEXT:    andb $1, %al
9920; SSE2-NEXT:    movb %al, (%rdi)
9921; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9922; SSE2-NEXT:    andb $1, %al
9923; SSE2-NEXT:    movb %al, 2(%rdi)
9924; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9925; SSE2-NEXT:    andb $1, %al
9926; SSE2-NEXT:    movb %al, (%rdi)
9927; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9928; SSE2-NEXT:    andb $1, %al
9929; SSE2-NEXT:    movb %al, 2(%rdi)
9930; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9931; SSE2-NEXT:    andb $1, %al
9932; SSE2-NEXT:    movb %al, (%rdi)
9933; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9934; SSE2-NEXT:    andb $1, %al
9935; SSE2-NEXT:    movb %al, 2(%rdi)
9936; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9937; SSE2-NEXT:    andb $1, %al
9938; SSE2-NEXT:    movb %al, (%rdi)
9939; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9940; SSE2-NEXT:    andb $1, %al
9941; SSE2-NEXT:    movb %al, 2(%rdi)
9942; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9943; SSE2-NEXT:    andb $1, %al
9944; SSE2-NEXT:    movb %al, (%rdi)
9945; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9946; SSE2-NEXT:    andb $1, %al
9947; SSE2-NEXT:    movb %al, 2(%rdi)
9948; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9949; SSE2-NEXT:    andb $1, %al
9950; SSE2-NEXT:    movb %al, (%rdi)
9951; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9952; SSE2-NEXT:    andb $1, %al
9953; SSE2-NEXT:    movb %al, 2(%rdi)
9954; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9955; SSE2-NEXT:    andb $1, %al
9956; SSE2-NEXT:    movb %al, (%rdi)
9957; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9958; SSE2-NEXT:    andb $1, %al
9959; SSE2-NEXT:    movb %al, 2(%rdi)
9960; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9961; SSE2-NEXT:    andb $1, %al
9962; SSE2-NEXT:    movb %al, (%rdi)
9963; SSE2-NEXT:    movq %rdi, %rax
9964; SSE2-NEXT:    retq
9965;
9966; SSE42-LABEL: test_cmp_v32i64:
9967; SSE42:       # BB#0:
9968; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
9969; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm11
9970; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm10
9971; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm12
9972; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
9973; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm14
9974; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm13
9975; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm15
9976; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm3
9977; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm2
9978; SSE42-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
9979; SSE42-NEXT:    pslld $31, %xmm2
9980; SSE42-NEXT:    psrad $31, %xmm2
9981; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
9982; SSE42-NEXT:    pshufb %xmm3, %xmm2
9983; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
9984; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm0
9985; SSE42-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
9986; SSE42-NEXT:    pslld $31, %xmm0
9987; SSE42-NEXT:    psrad $31, %xmm0
9988; SSE42-NEXT:    pshufb %xmm3, %xmm0
9989; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
9990; SSE42-NEXT:    psllw $15, %xmm0
9991; SSE42-NEXT:    psraw $15, %xmm0
9992; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm7
9993; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm6
9994; SSE42-NEXT:    shufps {{.*#+}} xmm6 = xmm6[0,2],xmm7[0,2]
9995; SSE42-NEXT:    pslld $31, %xmm6
9996; SSE42-NEXT:    psrad $31, %xmm6
9997; SSE42-NEXT:    pshufb %xmm3, %xmm6
9998; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm5
9999; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm4
10000; SSE42-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,2],xmm5[0,2]
10001; SSE42-NEXT:    pslld $31, %xmm4
10002; SSE42-NEXT:    psrad $31, %xmm4
10003; SSE42-NEXT:    pshufb %xmm3, %xmm4
10004; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
10005; SSE42-NEXT:    psllw $15, %xmm4
10006; SSE42-NEXT:    psraw $15, %xmm4
10007; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm15
10008; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm13
10009; SSE42-NEXT:    shufps {{.*#+}} xmm13 = xmm13[0,2],xmm15[0,2]
10010; SSE42-NEXT:    pslld $31, %xmm13
10011; SSE42-NEXT:    psrad $31, %xmm13
10012; SSE42-NEXT:    pshufb %xmm3, %xmm13
10013; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm14
10014; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm8
10015; SSE42-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,2],xmm14[0,2]
10016; SSE42-NEXT:    pslld $31, %xmm8
10017; SSE42-NEXT:    psrad $31, %xmm8
10018; SSE42-NEXT:    pshufb %xmm3, %xmm8
10019; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm13[0]
10020; SSE42-NEXT:    psllw $15, %xmm8
10021; SSE42-NEXT:    psraw $15, %xmm8
10022; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm12
10023; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm10
10024; SSE42-NEXT:    shufps {{.*#+}} xmm10 = xmm10[0,2],xmm12[0,2]
10025; SSE42-NEXT:    pslld $31, %xmm10
10026; SSE42-NEXT:    psrad $31, %xmm10
10027; SSE42-NEXT:    pshufb %xmm3, %xmm10
10028; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm11
10029; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm9
10030; SSE42-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,2],xmm11[0,2]
10031; SSE42-NEXT:    pslld $31, %xmm9
10032; SSE42-NEXT:    psrad $31, %xmm9
10033; SSE42-NEXT:    pshufb %xmm3, %xmm9
10034; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm10[0]
10035; SSE42-NEXT:    psllw $15, %xmm9
10036; SSE42-NEXT:    psraw $15, %xmm9
10037; SSE42-NEXT:    pextrb $14, %xmm9, %eax
10038; SSE42-NEXT:    andb $1, %al
10039; SSE42-NEXT:    movb %al, 2(%rdi)
10040; SSE42-NEXT:    pextrb $12, %xmm9, %eax
10041; SSE42-NEXT:    andb $1, %al
10042; SSE42-NEXT:    movb %al, 2(%rdi)
10043; SSE42-NEXT:    pextrb $10, %xmm9, %eax
10044; SSE42-NEXT:    andb $1, %al
10045; SSE42-NEXT:    movb %al, 2(%rdi)
10046; SSE42-NEXT:    pextrb $8, %xmm9, %eax
10047; SSE42-NEXT:    andb $1, %al
10048; SSE42-NEXT:    movb %al, 2(%rdi)
10049; SSE42-NEXT:    pextrb $6, %xmm9, %eax
10050; SSE42-NEXT:    andb $1, %al
10051; SSE42-NEXT:    movb %al, 2(%rdi)
10052; SSE42-NEXT:    pextrb $4, %xmm9, %eax
10053; SSE42-NEXT:    andb $1, %al
10054; SSE42-NEXT:    movb %al, 2(%rdi)
10055; SSE42-NEXT:    pextrb $2, %xmm9, %eax
10056; SSE42-NEXT:    andb $1, %al
10057; SSE42-NEXT:    movb %al, 2(%rdi)
10058; SSE42-NEXT:    pextrb $0, %xmm9, %eax
10059; SSE42-NEXT:    andb $1, %al
10060; SSE42-NEXT:    movb %al, 2(%rdi)
10061; SSE42-NEXT:    pextrb $14, %xmm8, %eax
10062; SSE42-NEXT:    andb $1, %al
10063; SSE42-NEXT:    movb %al, 2(%rdi)
10064; SSE42-NEXT:    pextrb $12, %xmm8, %eax
10065; SSE42-NEXT:    andb $1, %al
10066; SSE42-NEXT:    movb %al, 2(%rdi)
10067; SSE42-NEXT:    pextrb $10, %xmm8, %eax
10068; SSE42-NEXT:    andb $1, %al
10069; SSE42-NEXT:    movb %al, 2(%rdi)
10070; SSE42-NEXT:    pextrb $8, %xmm8, %eax
10071; SSE42-NEXT:    andb $1, %al
10072; SSE42-NEXT:    movb %al, 2(%rdi)
10073; SSE42-NEXT:    pextrb $6, %xmm8, %eax
10074; SSE42-NEXT:    andb $1, %al
10075; SSE42-NEXT:    movb %al, 2(%rdi)
10076; SSE42-NEXT:    pextrb $4, %xmm8, %eax
10077; SSE42-NEXT:    andb $1, %al
10078; SSE42-NEXT:    movb %al, 2(%rdi)
10079; SSE42-NEXT:    pextrb $2, %xmm8, %eax
10080; SSE42-NEXT:    andb $1, %al
10081; SSE42-NEXT:    movb %al, 2(%rdi)
10082; SSE42-NEXT:    pextrb $0, %xmm8, %eax
10083; SSE42-NEXT:    andb $1, %al
10084; SSE42-NEXT:    movb %al, 2(%rdi)
10085; SSE42-NEXT:    pextrb $14, %xmm4, %eax
10086; SSE42-NEXT:    andb $1, %al
10087; SSE42-NEXT:    movb %al, (%rdi)
10088; SSE42-NEXT:    pextrb $12, %xmm4, %eax
10089; SSE42-NEXT:    andb $1, %al
10090; SSE42-NEXT:    movb %al, (%rdi)
10091; SSE42-NEXT:    pextrb $10, %xmm4, %eax
10092; SSE42-NEXT:    andb $1, %al
10093; SSE42-NEXT:    movb %al, (%rdi)
10094; SSE42-NEXT:    pextrb $8, %xmm4, %eax
10095; SSE42-NEXT:    andb $1, %al
10096; SSE42-NEXT:    movb %al, (%rdi)
10097; SSE42-NEXT:    pextrb $6, %xmm4, %eax
10098; SSE42-NEXT:    andb $1, %al
10099; SSE42-NEXT:    movb %al, (%rdi)
10100; SSE42-NEXT:    pextrb $4, %xmm4, %eax
10101; SSE42-NEXT:    andb $1, %al
10102; SSE42-NEXT:    movb %al, (%rdi)
10103; SSE42-NEXT:    pextrb $2, %xmm4, %eax
10104; SSE42-NEXT:    andb $1, %al
10105; SSE42-NEXT:    movb %al, (%rdi)
10106; SSE42-NEXT:    pextrb $0, %xmm4, %eax
10107; SSE42-NEXT:    andb $1, %al
10108; SSE42-NEXT:    movb %al, (%rdi)
10109; SSE42-NEXT:    pextrb $14, %xmm0, %eax
10110; SSE42-NEXT:    andb $1, %al
10111; SSE42-NEXT:    movb %al, (%rdi)
10112; SSE42-NEXT:    pextrb $12, %xmm0, %eax
10113; SSE42-NEXT:    andb $1, %al
10114; SSE42-NEXT:    movb %al, (%rdi)
10115; SSE42-NEXT:    pextrb $10, %xmm0, %eax
10116; SSE42-NEXT:    andb $1, %al
10117; SSE42-NEXT:    movb %al, (%rdi)
10118; SSE42-NEXT:    pextrb $8, %xmm0, %eax
10119; SSE42-NEXT:    andb $1, %al
10120; SSE42-NEXT:    movb %al, (%rdi)
10121; SSE42-NEXT:    pextrb $6, %xmm0, %eax
10122; SSE42-NEXT:    andb $1, %al
10123; SSE42-NEXT:    movb %al, (%rdi)
10124; SSE42-NEXT:    pextrb $4, %xmm0, %eax
10125; SSE42-NEXT:    andb $1, %al
10126; SSE42-NEXT:    movb %al, (%rdi)
10127; SSE42-NEXT:    pextrb $2, %xmm0, %eax
10128; SSE42-NEXT:    andb $1, %al
10129; SSE42-NEXT:    movb %al, (%rdi)
10130; SSE42-NEXT:    pextrb $0, %xmm0, %eax
10131; SSE42-NEXT:    andb $1, %al
10132; SSE42-NEXT:    movb %al, (%rdi)
10133; SSE42-NEXT:    movq %rdi, %rax
10134; SSE42-NEXT:    retq
10135;
10136; AVX1-LABEL: test_cmp_v32i64:
10137; AVX1:       # BB#0:
10138; AVX1-NEXT:    pushq %rbp
10139; AVX1-NEXT:    movq %rsp, %rbp
10140; AVX1-NEXT:    andq $-32, %rsp
10141; AVX1-NEXT:    subq $32, %rsp
10142; AVX1-NEXT:    vmovdqa 240(%rbp), %ymm8
10143; AVX1-NEXT:    vextractf128 $1, %ymm8, %xmm9
10144; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm10
10145; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm10, %xmm9
10146; AVX1-NEXT:    vmovdqa 208(%rbp), %ymm10
10147; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm7, %xmm7
10148; AVX1-NEXT:    vpacksswb %xmm9, %xmm7, %xmm8
10149; AVX1-NEXT:    vextractf128 $1, %ymm10, %xmm9
10150; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
10151; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm7, %xmm7
10152; AVX1-NEXT:    vpcmpgtq %xmm10, %xmm6, %xmm6
10153; AVX1-NEXT:    vmovdqa 176(%rbp), %ymm9
10154; AVX1-NEXT:    vpacksswb %xmm7, %xmm6, %xmm6
10155; AVX1-NEXT:    vpacksswb %xmm8, %xmm6, %xmm8
10156; AVX1-NEXT:    vextractf128 $1, %ymm9, %xmm7
10157; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm6
10158; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
10159; AVX1-NEXT:    vmovdqa 144(%rbp), %ymm10
10160; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm5, %xmm5
10161; AVX1-NEXT:    vpacksswb %xmm6, %xmm5, %xmm5
10162; AVX1-NEXT:    vextractf128 $1, %ymm10, %xmm6
10163; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm7
10164; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
10165; AVX1-NEXT:    vpcmpgtq %xmm10, %xmm4, %xmm4
10166; AVX1-NEXT:    vpacksswb %xmm6, %xmm4, %xmm4
10167; AVX1-NEXT:    vmovdqa 112(%rbp), %ymm6
10168; AVX1-NEXT:    vpacksswb %xmm5, %xmm4, %xmm4
10169; AVX1-NEXT:    vpacksswb %xmm8, %xmm4, %xmm4
10170; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm5
10171; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
10172; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm7, %xmm5
10173; AVX1-NEXT:    vmovdqa 80(%rbp), %ymm7
10174; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm3
10175; AVX1-NEXT:    vpacksswb %xmm5, %xmm3, %xmm3
10176; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm5
10177; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
10178; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
10179; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm2, %xmm2
10180; AVX1-NEXT:    vmovdqa 48(%rbp), %ymm6
10181; AVX1-NEXT:    vpacksswb %xmm5, %xmm2, %xmm2
10182; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
10183; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm3
10184; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
10185; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3
10186; AVX1-NEXT:    vmovdqa 16(%rbp), %ymm5
10187; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm1, %xmm1
10188; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
10189; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
10190; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
10191; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm3
10192; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm0, %xmm0
10193; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
10194; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
10195; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
10196; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
10197; AVX1-NEXT:    movq %rbp, %rsp
10198; AVX1-NEXT:    popq %rbp
10199; AVX1-NEXT:    retq
10200;
10201; AVX2-LABEL: test_cmp_v32i64:
10202; AVX2:       # BB#0:
10203; AVX2-NEXT:    pushq %rbp
10204; AVX2-NEXT:    movq %rsp, %rbp
10205; AVX2-NEXT:    andq $-32, %rsp
10206; AVX2-NEXT:    subq $32, %rsp
10207; AVX2-NEXT:    vpcmpgtq 240(%rbp), %ymm7, %ymm7
10208; AVX2-NEXT:    vpcmpgtq 208(%rbp), %ymm6, %ymm6
10209; AVX2-NEXT:    vpacksswb %ymm7, %ymm6, %ymm6
10210; AVX2-NEXT:    vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]
10211; AVX2-NEXT:    vpcmpgtq 176(%rbp), %ymm5, %ymm5
10212; AVX2-NEXT:    vpcmpgtq 144(%rbp), %ymm4, %ymm4
10213; AVX2-NEXT:    vpacksswb %ymm5, %ymm4, %ymm4
10214; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
10215; AVX2-NEXT:    vpacksswb %ymm6, %ymm4, %ymm4
10216; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
10217; AVX2-NEXT:    vpcmpgtq 112(%rbp), %ymm3, %ymm3
10218; AVX2-NEXT:    vpcmpgtq 80(%rbp), %ymm2, %ymm2
10219; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
10220; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
10221; AVX2-NEXT:    vpcmpgtq 48(%rbp), %ymm1, %ymm1
10222; AVX2-NEXT:    vpcmpgtq 16(%rbp), %ymm0, %ymm0
10223; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
10224; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
10225; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
10226; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
10227; AVX2-NEXT:    vpacksswb %ymm4, %ymm0, %ymm0
10228; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
10229; AVX2-NEXT:    movq %rbp, %rsp
10230; AVX2-NEXT:    popq %rbp
10231; AVX2-NEXT:    retq
10232;
10233; AVX512F-LABEL: test_cmp_v32i64:
10234; AVX512F:       # BB#0:
10235; AVX512F-NEXT:    vextracti32x4 $3, %zmm4, %xmm8
10236; AVX512F-NEXT:    vpextrq $1, %xmm8, %rcx
10237; AVX512F-NEXT:    vextracti32x4 $3, %zmm0, %xmm9
10238; AVX512F-NEXT:    vpextrq $1, %xmm9, %rdx
10239; AVX512F-NEXT:    xorl %eax, %eax
10240; AVX512F-NEXT:    cmpq %rcx, %rdx
10241; AVX512F-NEXT:    movq $-1, %rcx
10242; AVX512F-NEXT:    movl $0, %edx
10243; AVX512F-NEXT:    cmovgq %rcx, %rdx
10244; AVX512F-NEXT:    vmovq %rdx, %xmm10
10245; AVX512F-NEXT:    vmovq %xmm8, %rdx
10246; AVX512F-NEXT:    vmovq %xmm9, %rsi
10247; AVX512F-NEXT:    cmpq %rdx, %rsi
10248; AVX512F-NEXT:    movl $0, %edx
10249; AVX512F-NEXT:    cmovgq %rcx, %rdx
10250; AVX512F-NEXT:    vmovq %rdx, %xmm8
10251; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm10[0]
10252; AVX512F-NEXT:    vextracti32x4 $2, %zmm4, %xmm9
10253; AVX512F-NEXT:    vpextrq $1, %xmm9, %rdx
10254; AVX512F-NEXT:    vextracti32x4 $2, %zmm0, %xmm10
10255; AVX512F-NEXT:    vpextrq $1, %xmm10, %rsi
10256; AVX512F-NEXT:    cmpq %rdx, %rsi
10257; AVX512F-NEXT:    movl $0, %edx
10258; AVX512F-NEXT:    cmovgq %rcx, %rdx
10259; AVX512F-NEXT:    vmovq %rdx, %xmm11
10260; AVX512F-NEXT:    vmovq %xmm9, %rdx
10261; AVX512F-NEXT:    vmovq %xmm10, %rsi
10262; AVX512F-NEXT:    cmpq %rdx, %rsi
10263; AVX512F-NEXT:    movl $0, %edx
10264; AVX512F-NEXT:    cmovgq %rcx, %rdx
10265; AVX512F-NEXT:    vmovq %rdx, %xmm9
10266; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10267; AVX512F-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
10268; AVX512F-NEXT:    vextracti32x4 $1, %zmm4, %xmm9
10269; AVX512F-NEXT:    vpextrq $1, %xmm9, %rdx
10270; AVX512F-NEXT:    vextracti32x4 $1, %zmm0, %xmm10
10271; AVX512F-NEXT:    vpextrq $1, %xmm10, %rsi
10272; AVX512F-NEXT:    cmpq %rdx, %rsi
10273; AVX512F-NEXT:    movl $0, %edx
10274; AVX512F-NEXT:    cmovgq %rcx, %rdx
10275; AVX512F-NEXT:    vmovq %rdx, %xmm11
10276; AVX512F-NEXT:    vmovq %xmm9, %rdx
10277; AVX512F-NEXT:    vmovq %xmm10, %rsi
10278; AVX512F-NEXT:    cmpq %rdx, %rsi
10279; AVX512F-NEXT:    movl $0, %edx
10280; AVX512F-NEXT:    cmovgq %rcx, %rdx
10281; AVX512F-NEXT:    vmovq %rdx, %xmm9
10282; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10283; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
10284; AVX512F-NEXT:    vpextrq $1, %xmm0, %rsi
10285; AVX512F-NEXT:    cmpq %rdx, %rsi
10286; AVX512F-NEXT:    movl $0, %edx
10287; AVX512F-NEXT:    cmovgq %rcx, %rdx
10288; AVX512F-NEXT:    vmovq %rdx, %xmm10
10289; AVX512F-NEXT:    vmovq %xmm4, %rdx
10290; AVX512F-NEXT:    vmovq %xmm0, %rsi
10291; AVX512F-NEXT:    cmpq %rdx, %rsi
10292; AVX512F-NEXT:    movl $0, %edx
10293; AVX512F-NEXT:    cmovgq %rcx, %rdx
10294; AVX512F-NEXT:    vmovq %rdx, %xmm0
10295; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10296; AVX512F-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
10297; AVX512F-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
10298; AVX512F-NEXT:    vpmovqd %zmm0, %ymm8
10299; AVX512F-NEXT:    vextracti32x4 $3, %zmm5, %xmm4
10300; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
10301; AVX512F-NEXT:    vextracti32x4 $3, %zmm1, %xmm0
10302; AVX512F-NEXT:    vpextrq $1, %xmm0, %rsi
10303; AVX512F-NEXT:    cmpq %rdx, %rsi
10304; AVX512F-NEXT:    movl $0, %edx
10305; AVX512F-NEXT:    cmovgq %rcx, %rdx
10306; AVX512F-NEXT:    vmovq %rdx, %xmm9
10307; AVX512F-NEXT:    vmovq %xmm4, %rdx
10308; AVX512F-NEXT:    vmovq %xmm0, %rsi
10309; AVX512F-NEXT:    cmpq %rdx, %rsi
10310; AVX512F-NEXT:    movl $0, %edx
10311; AVX512F-NEXT:    cmovgq %rcx, %rdx
10312; AVX512F-NEXT:    vmovq %rdx, %xmm0
10313; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm0[0],xmm9[0]
10314; AVX512F-NEXT:    vextracti32x4 $2, %zmm5, %xmm4
10315; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
10316; AVX512F-NEXT:    vextracti32x4 $2, %zmm1, %xmm0
10317; AVX512F-NEXT:    vpextrq $1, %xmm0, %rsi
10318; AVX512F-NEXT:    cmpq %rdx, %rsi
10319; AVX512F-NEXT:    movl $0, %edx
10320; AVX512F-NEXT:    cmovgq %rcx, %rdx
10321; AVX512F-NEXT:    vmovq %rdx, %xmm10
10322; AVX512F-NEXT:    vmovq %xmm4, %rdx
10323; AVX512F-NEXT:    vmovq %xmm0, %rsi
10324; AVX512F-NEXT:    cmpq %rdx, %rsi
10325; AVX512F-NEXT:    movl $0, %edx
10326; AVX512F-NEXT:    cmovgq %rcx, %rdx
10327; AVX512F-NEXT:    vmovq %rdx, %xmm0
10328; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10329; AVX512F-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
10330; AVX512F-NEXT:    vextracti32x4 $1, %zmm5, %xmm0
10331; AVX512F-NEXT:    vpextrq $1, %xmm0, %rdx
10332; AVX512F-NEXT:    vextracti32x4 $1, %zmm1, %xmm4
10333; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
10334; AVX512F-NEXT:    cmpq %rdx, %rsi
10335; AVX512F-NEXT:    movl $0, %edx
10336; AVX512F-NEXT:    cmovgq %rcx, %rdx
10337; AVX512F-NEXT:    vmovq %rdx, %xmm10
10338; AVX512F-NEXT:    vmovq %xmm0, %rdx
10339; AVX512F-NEXT:    vmovq %xmm4, %rsi
10340; AVX512F-NEXT:    cmpq %rdx, %rsi
10341; AVX512F-NEXT:    movl $0, %edx
10342; AVX512F-NEXT:    cmovgq %rcx, %rdx
10343; AVX512F-NEXT:    vmovq %rdx, %xmm0
10344; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10345; AVX512F-NEXT:    vpextrq $1, %xmm5, %rdx
10346; AVX512F-NEXT:    vpextrq $1, %xmm1, %rsi
10347; AVX512F-NEXT:    cmpq %rdx, %rsi
10348; AVX512F-NEXT:    movl $0, %edx
10349; AVX512F-NEXT:    cmovgq %rcx, %rdx
10350; AVX512F-NEXT:    vmovq %rdx, %xmm4
10351; AVX512F-NEXT:    vmovq %xmm5, %rdx
10352; AVX512F-NEXT:    vmovq %xmm1, %rsi
10353; AVX512F-NEXT:    cmpq %rdx, %rsi
10354; AVX512F-NEXT:    movl $0, %edx
10355; AVX512F-NEXT:    cmovgq %rcx, %rdx
10356; AVX512F-NEXT:    vmovq %rdx, %xmm1
10357; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
10358; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
10359; AVX512F-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
10360; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
10361; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
10362; AVX512F-NEXT:    vpmovdb %zmm0, %xmm8
10363; AVX512F-NEXT:    vextracti32x4 $3, %zmm6, %xmm1
10364; AVX512F-NEXT:    vpextrq $1, %xmm1, %rdx
10365; AVX512F-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
10366; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
10367; AVX512F-NEXT:    cmpq %rdx, %rsi
10368; AVX512F-NEXT:    movl $0, %edx
10369; AVX512F-NEXT:    cmovgq %rcx, %rdx
10370; AVX512F-NEXT:    vmovq %rdx, %xmm5
10371; AVX512F-NEXT:    vmovq %xmm1, %rdx
10372; AVX512F-NEXT:    vmovq %xmm4, %rsi
10373; AVX512F-NEXT:    cmpq %rdx, %rsi
10374; AVX512F-NEXT:    movl $0, %edx
10375; AVX512F-NEXT:    cmovgq %rcx, %rdx
10376; AVX512F-NEXT:    vmovq %rdx, %xmm1
10377; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
10378; AVX512F-NEXT:    vextracti32x4 $2, %zmm6, %xmm4
10379; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
10380; AVX512F-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
10381; AVX512F-NEXT:    vpextrq $1, %xmm5, %rsi
10382; AVX512F-NEXT:    cmpq %rdx, %rsi
10383; AVX512F-NEXT:    movl $0, %edx
10384; AVX512F-NEXT:    cmovgq %rcx, %rdx
10385; AVX512F-NEXT:    vmovq %rdx, %xmm0
10386; AVX512F-NEXT:    vmovq %xmm4, %rdx
10387; AVX512F-NEXT:    vmovq %xmm5, %rsi
10388; AVX512F-NEXT:    cmpq %rdx, %rsi
10389; AVX512F-NEXT:    movl $0, %edx
10390; AVX512F-NEXT:    cmovgq %rcx, %rdx
10391; AVX512F-NEXT:    vmovq %rdx, %xmm4
10392; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm4[0],xmm0[0]
10393; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
10394; AVX512F-NEXT:    vextracti32x4 $1, %zmm6, %xmm0
10395; AVX512F-NEXT:    vpextrq $1, %xmm0, %rdx
10396; AVX512F-NEXT:    vextracti32x4 $1, %zmm2, %xmm4
10397; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
10398; AVX512F-NEXT:    cmpq %rdx, %rsi
10399; AVX512F-NEXT:    movl $0, %edx
10400; AVX512F-NEXT:    cmovgq %rcx, %rdx
10401; AVX512F-NEXT:    vmovq %rdx, %xmm5
10402; AVX512F-NEXT:    vmovq %xmm0, %rdx
10403; AVX512F-NEXT:    vmovq %xmm4, %rsi
10404; AVX512F-NEXT:    cmpq %rdx, %rsi
10405; AVX512F-NEXT:    movl $0, %edx
10406; AVX512F-NEXT:    cmovgq %rcx, %rdx
10407; AVX512F-NEXT:    vmovq %rdx, %xmm0
10408; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10409; AVX512F-NEXT:    vpextrq $1, %xmm6, %rdx
10410; AVX512F-NEXT:    vpextrq $1, %xmm2, %rsi
10411; AVX512F-NEXT:    cmpq %rdx, %rsi
10412; AVX512F-NEXT:    movl $0, %edx
10413; AVX512F-NEXT:    cmovgq %rcx, %rdx
10414; AVX512F-NEXT:    vmovq %rdx, %xmm4
10415; AVX512F-NEXT:    vmovq %xmm6, %rdx
10416; AVX512F-NEXT:    vmovq %xmm2, %rsi
10417; AVX512F-NEXT:    cmpq %rdx, %rsi
10418; AVX512F-NEXT:    movl $0, %edx
10419; AVX512F-NEXT:    cmovgq %rcx, %rdx
10420; AVX512F-NEXT:    vmovq %rdx, %xmm2
10421; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
10422; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm0
10423; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
10424; AVX512F-NEXT:    vpmovqd %zmm0, %ymm1
10425; AVX512F-NEXT:    vextracti32x4 $3, %zmm7, %xmm0
10426; AVX512F-NEXT:    vpextrq $1, %xmm0, %rdx
10427; AVX512F-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
10428; AVX512F-NEXT:    vpextrq $1, %xmm2, %rsi
10429; AVX512F-NEXT:    cmpq %rdx, %rsi
10430; AVX512F-NEXT:    movl $0, %edx
10431; AVX512F-NEXT:    cmovgq %rcx, %rdx
10432; AVX512F-NEXT:    vmovq %rdx, %xmm4
10433; AVX512F-NEXT:    vmovq %xmm0, %rdx
10434; AVX512F-NEXT:    vmovq %xmm2, %rsi
10435; AVX512F-NEXT:    cmpq %rdx, %rsi
10436; AVX512F-NEXT:    movl $0, %edx
10437; AVX512F-NEXT:    cmovgq %rcx, %rdx
10438; AVX512F-NEXT:    vmovq %rdx, %xmm0
10439; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
10440; AVX512F-NEXT:    vextracti32x4 $2, %zmm7, %xmm2
10441; AVX512F-NEXT:    vpextrq $1, %xmm2, %rdx
10442; AVX512F-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
10443; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
10444; AVX512F-NEXT:    cmpq %rdx, %rsi
10445; AVX512F-NEXT:    movl $0, %edx
10446; AVX512F-NEXT:    cmovgq %rcx, %rdx
10447; AVX512F-NEXT:    vmovq %rdx, %xmm5
10448; AVX512F-NEXT:    vmovq %xmm2, %rdx
10449; AVX512F-NEXT:    vmovq %xmm4, %rsi
10450; AVX512F-NEXT:    cmpq %rdx, %rsi
10451; AVX512F-NEXT:    movl $0, %edx
10452; AVX512F-NEXT:    cmovgq %rcx, %rdx
10453; AVX512F-NEXT:    vmovq %rdx, %xmm2
10454; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
10455; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm2
10456; AVX512F-NEXT:    vextracti32x4 $1, %zmm7, %xmm0
10457; AVX512F-NEXT:    vpextrq $1, %xmm0, %rdx
10458; AVX512F-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
10459; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
10460; AVX512F-NEXT:    cmpq %rdx, %rsi
10461; AVX512F-NEXT:    movl $0, %edx
10462; AVX512F-NEXT:    cmovgq %rcx, %rdx
10463; AVX512F-NEXT:    vmovq %rdx, %xmm5
10464; AVX512F-NEXT:    vmovq %xmm0, %rdx
10465; AVX512F-NEXT:    vmovq %xmm4, %rsi
10466; AVX512F-NEXT:    cmpq %rdx, %rsi
10467; AVX512F-NEXT:    movl $0, %edx
10468; AVX512F-NEXT:    cmovgq %rcx, %rdx
10469; AVX512F-NEXT:    vmovq %rdx, %xmm0
10470; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10471; AVX512F-NEXT:    vpextrq $1, %xmm7, %rdx
10472; AVX512F-NEXT:    vpextrq $1, %xmm3, %rsi
10473; AVX512F-NEXT:    cmpq %rdx, %rsi
10474; AVX512F-NEXT:    movl $0, %edx
10475; AVX512F-NEXT:    cmovgq %rcx, %rdx
10476; AVX512F-NEXT:    vmovq %rdx, %xmm4
10477; AVX512F-NEXT:    vmovq %xmm7, %rdx
10478; AVX512F-NEXT:    vmovq %xmm3, %rsi
10479; AVX512F-NEXT:    cmpq %rdx, %rsi
10480; AVX512F-NEXT:    cmovgq %rcx, %rax
10481; AVX512F-NEXT:    vmovq %rax, %xmm3
10482; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
10483; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm0
10484; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
10485; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
10486; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
10487; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
10488; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
10489; AVX512F-NEXT:    retq
10490;
10491; AVX512DQ-LABEL: test_cmp_v32i64:
10492; AVX512DQ:       # BB#0:
10493; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm4, %xmm8
10494; AVX512DQ-NEXT:    vpextrq $1, %xmm8, %rcx
10495; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm0, %xmm9
10496; AVX512DQ-NEXT:    vpextrq $1, %xmm9, %rdx
10497; AVX512DQ-NEXT:    xorl %eax, %eax
10498; AVX512DQ-NEXT:    cmpq %rcx, %rdx
10499; AVX512DQ-NEXT:    movq $-1, %rcx
10500; AVX512DQ-NEXT:    movl $0, %edx
10501; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10502; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
10503; AVX512DQ-NEXT:    vmovq %xmm8, %rdx
10504; AVX512DQ-NEXT:    vmovq %xmm9, %rsi
10505; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10506; AVX512DQ-NEXT:    movl $0, %edx
10507; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10508; AVX512DQ-NEXT:    vmovq %rdx, %xmm8
10509; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm10[0]
10510; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm4, %xmm9
10511; AVX512DQ-NEXT:    vpextrq $1, %xmm9, %rdx
10512; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm0, %xmm10
10513; AVX512DQ-NEXT:    vpextrq $1, %xmm10, %rsi
10514; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10515; AVX512DQ-NEXT:    movl $0, %edx
10516; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10517; AVX512DQ-NEXT:    vmovq %rdx, %xmm11
10518; AVX512DQ-NEXT:    vmovq %xmm9, %rdx
10519; AVX512DQ-NEXT:    vmovq %xmm10, %rsi
10520; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10521; AVX512DQ-NEXT:    movl $0, %edx
10522; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10523; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
10524; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10525; AVX512DQ-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
10526; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm4, %xmm9
10527; AVX512DQ-NEXT:    vpextrq $1, %xmm9, %rdx
10528; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm0, %xmm10
10529; AVX512DQ-NEXT:    vpextrq $1, %xmm10, %rsi
10530; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10531; AVX512DQ-NEXT:    movl $0, %edx
10532; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10533; AVX512DQ-NEXT:    vmovq %rdx, %xmm11
10534; AVX512DQ-NEXT:    vmovq %xmm9, %rdx
10535; AVX512DQ-NEXT:    vmovq %xmm10, %rsi
10536; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10537; AVX512DQ-NEXT:    movl $0, %edx
10538; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10539; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
10540; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10541; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
10542; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rsi
10543; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10544; AVX512DQ-NEXT:    movl $0, %edx
10545; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10546; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
10547; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
10548; AVX512DQ-NEXT:    vmovq %xmm0, %rsi
10549; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10550; AVX512DQ-NEXT:    movl $0, %edx
10551; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10552; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10553; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10554; AVX512DQ-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
10555; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
10556; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm8
10557; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm5, %xmm4
10558; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
10559; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm1, %xmm0
10560; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rsi
10561; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10562; AVX512DQ-NEXT:    movl $0, %edx
10563; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10564; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
10565; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
10566; AVX512DQ-NEXT:    vmovq %xmm0, %rsi
10567; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10568; AVX512DQ-NEXT:    movl $0, %edx
10569; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10570; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10571; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm0[0],xmm9[0]
10572; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm5, %xmm4
10573; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
10574; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm1, %xmm0
10575; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rsi
10576; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10577; AVX512DQ-NEXT:    movl $0, %edx
10578; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10579; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
10580; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
10581; AVX512DQ-NEXT:    vmovq %xmm0, %rsi
10582; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10583; AVX512DQ-NEXT:    movl $0, %edx
10584; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10585; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10586; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10587; AVX512DQ-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
10588; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm5, %xmm0
10589; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rdx
10590; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm1, %xmm4
10591; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
10592; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10593; AVX512DQ-NEXT:    movl $0, %edx
10594; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10595; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
10596; AVX512DQ-NEXT:    vmovq %xmm0, %rdx
10597; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
10598; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10599; AVX512DQ-NEXT:    movl $0, %edx
10600; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10601; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10602; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10603; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rdx
10604; AVX512DQ-NEXT:    vpextrq $1, %xmm1, %rsi
10605; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10606; AVX512DQ-NEXT:    movl $0, %edx
10607; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10608; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
10609; AVX512DQ-NEXT:    vmovq %xmm5, %rdx
10610; AVX512DQ-NEXT:    vmovq %xmm1, %rsi
10611; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10612; AVX512DQ-NEXT:    movl $0, %edx
10613; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10614; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
10615; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
10616; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
10617; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
10618; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
10619; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm0, %zmm8, %zmm0
10620; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm8
10621; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm6, %xmm1
10622; AVX512DQ-NEXT:    vpextrq $1, %xmm1, %rdx
10623; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm2, %xmm4
10624; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
10625; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10626; AVX512DQ-NEXT:    movl $0, %edx
10627; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10628; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
10629; AVX512DQ-NEXT:    vmovq %xmm1, %rdx
10630; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
10631; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10632; AVX512DQ-NEXT:    movl $0, %edx
10633; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10634; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
10635; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
10636; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm6, %xmm4
10637; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
10638; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm2, %xmm5
10639; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rsi
10640; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10641; AVX512DQ-NEXT:    movl $0, %edx
10642; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10643; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10644; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
10645; AVX512DQ-NEXT:    vmovq %xmm5, %rsi
10646; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10647; AVX512DQ-NEXT:    movl $0, %edx
10648; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10649; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
10650; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm4[0],xmm0[0]
10651; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
10652; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm6, %xmm0
10653; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rdx
10654; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm2, %xmm4
10655; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
10656; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10657; AVX512DQ-NEXT:    movl $0, %edx
10658; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10659; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
10660; AVX512DQ-NEXT:    vmovq %xmm0, %rdx
10661; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
10662; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10663; AVX512DQ-NEXT:    movl $0, %edx
10664; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10665; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10666; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10667; AVX512DQ-NEXT:    vpextrq $1, %xmm6, %rdx
10668; AVX512DQ-NEXT:    vpextrq $1, %xmm2, %rsi
10669; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10670; AVX512DQ-NEXT:    movl $0, %edx
10671; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10672; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
10673; AVX512DQ-NEXT:    vmovq %xmm6, %rdx
10674; AVX512DQ-NEXT:    vmovq %xmm2, %rsi
10675; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10676; AVX512DQ-NEXT:    movl $0, %edx
10677; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10678; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
10679; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
10680; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm0
10681; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
10682; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm1
10683; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm7, %xmm0
10684; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rdx
10685; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm3, %xmm2
10686; AVX512DQ-NEXT:    vpextrq $1, %xmm2, %rsi
10687; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10688; AVX512DQ-NEXT:    movl $0, %edx
10689; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10690; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
10691; AVX512DQ-NEXT:    vmovq %xmm0, %rdx
10692; AVX512DQ-NEXT:    vmovq %xmm2, %rsi
10693; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10694; AVX512DQ-NEXT:    movl $0, %edx
10695; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10696; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10697; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
10698; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm7, %xmm2
10699; AVX512DQ-NEXT:    vpextrq $1, %xmm2, %rdx
10700; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm3, %xmm4
10701; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
10702; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10703; AVX512DQ-NEXT:    movl $0, %edx
10704; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10705; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
10706; AVX512DQ-NEXT:    vmovq %xmm2, %rdx
10707; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
10708; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10709; AVX512DQ-NEXT:    movl $0, %edx
10710; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10711; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
10712; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
10713; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm2
10714; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm7, %xmm0
10715; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rdx
10716; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm3, %xmm4
10717; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
10718; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10719; AVX512DQ-NEXT:    movl $0, %edx
10720; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10721; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
10722; AVX512DQ-NEXT:    vmovq %xmm0, %rdx
10723; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
10724; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10725; AVX512DQ-NEXT:    movl $0, %edx
10726; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10727; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10728; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10729; AVX512DQ-NEXT:    vpextrq $1, %xmm7, %rdx
10730; AVX512DQ-NEXT:    vpextrq $1, %xmm3, %rsi
10731; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10732; AVX512DQ-NEXT:    movl $0, %edx
10733; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10734; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
10735; AVX512DQ-NEXT:    vmovq %xmm7, %rdx
10736; AVX512DQ-NEXT:    vmovq %xmm3, %rsi
10737; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10738; AVX512DQ-NEXT:    cmovgq %rcx, %rax
10739; AVX512DQ-NEXT:    vmovq %rax, %xmm3
10740; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
10741; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm0
10742; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
10743; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
10744; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm0, %zmm1, %zmm0
10745; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
10746; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
10747; AVX512DQ-NEXT:    retq
10748;
10749; AVX512BW-LABEL: test_cmp_v32i64:
10750; AVX512BW:       # BB#0:
10751; AVX512BW-NEXT:    vextracti32x4 $3, %zmm4, %xmm8
10752; AVX512BW-NEXT:    vpextrq $1, %xmm8, %rcx
10753; AVX512BW-NEXT:    vextracti32x4 $3, %zmm0, %xmm9
10754; AVX512BW-NEXT:    vpextrq $1, %xmm9, %rdx
10755; AVX512BW-NEXT:    xorl %eax, %eax
10756; AVX512BW-NEXT:    cmpq %rcx, %rdx
10757; AVX512BW-NEXT:    movq $-1, %rcx
10758; AVX512BW-NEXT:    movl $0, %edx
10759; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10760; AVX512BW-NEXT:    vmovq %rdx, %xmm10
10761; AVX512BW-NEXT:    vmovq %xmm8, %rdx
10762; AVX512BW-NEXT:    vmovq %xmm9, %rsi
10763; AVX512BW-NEXT:    cmpq %rdx, %rsi
10764; AVX512BW-NEXT:    movl $0, %edx
10765; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10766; AVX512BW-NEXT:    vmovq %rdx, %xmm8
10767; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm10[0]
10768; AVX512BW-NEXT:    vextracti32x4 $2, %zmm4, %xmm9
10769; AVX512BW-NEXT:    vpextrq $1, %xmm9, %rdx
10770; AVX512BW-NEXT:    vextracti32x4 $2, %zmm0, %xmm10
10771; AVX512BW-NEXT:    vpextrq $1, %xmm10, %rsi
10772; AVX512BW-NEXT:    cmpq %rdx, %rsi
10773; AVX512BW-NEXT:    movl $0, %edx
10774; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10775; AVX512BW-NEXT:    vmovq %rdx, %xmm11
10776; AVX512BW-NEXT:    vmovq %xmm9, %rdx
10777; AVX512BW-NEXT:    vmovq %xmm10, %rsi
10778; AVX512BW-NEXT:    cmpq %rdx, %rsi
10779; AVX512BW-NEXT:    movl $0, %edx
10780; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10781; AVX512BW-NEXT:    vmovq %rdx, %xmm9
10782; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10783; AVX512BW-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
10784; AVX512BW-NEXT:    vextracti32x4 $1, %zmm4, %xmm9
10785; AVX512BW-NEXT:    vpextrq $1, %xmm9, %rdx
10786; AVX512BW-NEXT:    vextracti32x4 $1, %zmm0, %xmm10
10787; AVX512BW-NEXT:    vpextrq $1, %xmm10, %rsi
10788; AVX512BW-NEXT:    cmpq %rdx, %rsi
10789; AVX512BW-NEXT:    movl $0, %edx
10790; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10791; AVX512BW-NEXT:    vmovq %rdx, %xmm11
10792; AVX512BW-NEXT:    vmovq %xmm9, %rdx
10793; AVX512BW-NEXT:    vmovq %xmm10, %rsi
10794; AVX512BW-NEXT:    cmpq %rdx, %rsi
10795; AVX512BW-NEXT:    movl $0, %edx
10796; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10797; AVX512BW-NEXT:    vmovq %rdx, %xmm9
10798; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10799; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
10800; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rsi
10801; AVX512BW-NEXT:    cmpq %rdx, %rsi
10802; AVX512BW-NEXT:    movl $0, %edx
10803; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10804; AVX512BW-NEXT:    vmovq %rdx, %xmm10
10805; AVX512BW-NEXT:    vmovq %xmm4, %rdx
10806; AVX512BW-NEXT:    vmovq %xmm0, %rsi
10807; AVX512BW-NEXT:    cmpq %rdx, %rsi
10808; AVX512BW-NEXT:    movl $0, %edx
10809; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10810; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10811; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10812; AVX512BW-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
10813; AVX512BW-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
10814; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm8
10815; AVX512BW-NEXT:    vextracti32x4 $3, %zmm5, %xmm4
10816; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
10817; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm0
10818; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rsi
10819; AVX512BW-NEXT:    cmpq %rdx, %rsi
10820; AVX512BW-NEXT:    movl $0, %edx
10821; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10822; AVX512BW-NEXT:    vmovq %rdx, %xmm9
10823; AVX512BW-NEXT:    vmovq %xmm4, %rdx
10824; AVX512BW-NEXT:    vmovq %xmm0, %rsi
10825; AVX512BW-NEXT:    cmpq %rdx, %rsi
10826; AVX512BW-NEXT:    movl $0, %edx
10827; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10828; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10829; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm0[0],xmm9[0]
10830; AVX512BW-NEXT:    vextracti32x4 $2, %zmm5, %xmm4
10831; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
10832; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm0
10833; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rsi
10834; AVX512BW-NEXT:    cmpq %rdx, %rsi
10835; AVX512BW-NEXT:    movl $0, %edx
10836; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10837; AVX512BW-NEXT:    vmovq %rdx, %xmm10
10838; AVX512BW-NEXT:    vmovq %xmm4, %rdx
10839; AVX512BW-NEXT:    vmovq %xmm0, %rsi
10840; AVX512BW-NEXT:    cmpq %rdx, %rsi
10841; AVX512BW-NEXT:    movl $0, %edx
10842; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10843; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10844; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10845; AVX512BW-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
10846; AVX512BW-NEXT:    vextracti32x4 $1, %zmm5, %xmm0
10847; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rdx
10848; AVX512BW-NEXT:    vextracti32x4 $1, %zmm1, %xmm4
10849; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
10850; AVX512BW-NEXT:    cmpq %rdx, %rsi
10851; AVX512BW-NEXT:    movl $0, %edx
10852; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10853; AVX512BW-NEXT:    vmovq %rdx, %xmm10
10854; AVX512BW-NEXT:    vmovq %xmm0, %rdx
10855; AVX512BW-NEXT:    vmovq %xmm4, %rsi
10856; AVX512BW-NEXT:    cmpq %rdx, %rsi
10857; AVX512BW-NEXT:    movl $0, %edx
10858; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10859; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10860; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10861; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rdx
10862; AVX512BW-NEXT:    vpextrq $1, %xmm1, %rsi
10863; AVX512BW-NEXT:    cmpq %rdx, %rsi
10864; AVX512BW-NEXT:    movl $0, %edx
10865; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10866; AVX512BW-NEXT:    vmovq %rdx, %xmm4
10867; AVX512BW-NEXT:    vmovq %xmm5, %rdx
10868; AVX512BW-NEXT:    vmovq %xmm1, %rsi
10869; AVX512BW-NEXT:    cmpq %rdx, %rsi
10870; AVX512BW-NEXT:    movl $0, %edx
10871; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10872; AVX512BW-NEXT:    vmovq %rdx, %xmm1
10873; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
10874; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
10875; AVX512BW-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
10876; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
10877; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
10878; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm8
10879; AVX512BW-NEXT:    vextracti32x4 $3, %zmm6, %xmm1
10880; AVX512BW-NEXT:    vpextrq $1, %xmm1, %rdx
10881; AVX512BW-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
10882; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
10883; AVX512BW-NEXT:    cmpq %rdx, %rsi
10884; AVX512BW-NEXT:    movl $0, %edx
10885; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10886; AVX512BW-NEXT:    vmovq %rdx, %xmm5
10887; AVX512BW-NEXT:    vmovq %xmm1, %rdx
10888; AVX512BW-NEXT:    vmovq %xmm4, %rsi
10889; AVX512BW-NEXT:    cmpq %rdx, %rsi
10890; AVX512BW-NEXT:    movl $0, %edx
10891; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10892; AVX512BW-NEXT:    vmovq %rdx, %xmm1
10893; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
10894; AVX512BW-NEXT:    vextracti32x4 $2, %zmm6, %xmm4
10895; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
10896; AVX512BW-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
10897; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rsi
10898; AVX512BW-NEXT:    cmpq %rdx, %rsi
10899; AVX512BW-NEXT:    movl $0, %edx
10900; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10901; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10902; AVX512BW-NEXT:    vmovq %xmm4, %rdx
10903; AVX512BW-NEXT:    vmovq %xmm5, %rsi
10904; AVX512BW-NEXT:    cmpq %rdx, %rsi
10905; AVX512BW-NEXT:    movl $0, %edx
10906; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10907; AVX512BW-NEXT:    vmovq %rdx, %xmm4
10908; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm4[0],xmm0[0]
10909; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
10910; AVX512BW-NEXT:    vextracti32x4 $1, %zmm6, %xmm0
10911; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rdx
10912; AVX512BW-NEXT:    vextracti32x4 $1, %zmm2, %xmm4
10913; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
10914; AVX512BW-NEXT:    cmpq %rdx, %rsi
10915; AVX512BW-NEXT:    movl $0, %edx
10916; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10917; AVX512BW-NEXT:    vmovq %rdx, %xmm5
10918; AVX512BW-NEXT:    vmovq %xmm0, %rdx
10919; AVX512BW-NEXT:    vmovq %xmm4, %rsi
10920; AVX512BW-NEXT:    cmpq %rdx, %rsi
10921; AVX512BW-NEXT:    movl $0, %edx
10922; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10923; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10924; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10925; AVX512BW-NEXT:    vpextrq $1, %xmm6, %rdx
10926; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rsi
10927; AVX512BW-NEXT:    cmpq %rdx, %rsi
10928; AVX512BW-NEXT:    movl $0, %edx
10929; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10930; AVX512BW-NEXT:    vmovq %rdx, %xmm4
10931; AVX512BW-NEXT:    vmovq %xmm6, %rdx
10932; AVX512BW-NEXT:    vmovq %xmm2, %rsi
10933; AVX512BW-NEXT:    cmpq %rdx, %rsi
10934; AVX512BW-NEXT:    movl $0, %edx
10935; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10936; AVX512BW-NEXT:    vmovq %rdx, %xmm2
10937; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
10938; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm0
10939; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
10940; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm1
10941; AVX512BW-NEXT:    vextracti32x4 $3, %zmm7, %xmm0
10942; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rdx
10943; AVX512BW-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
10944; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rsi
10945; AVX512BW-NEXT:    cmpq %rdx, %rsi
10946; AVX512BW-NEXT:    movl $0, %edx
10947; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10948; AVX512BW-NEXT:    vmovq %rdx, %xmm4
10949; AVX512BW-NEXT:    vmovq %xmm0, %rdx
10950; AVX512BW-NEXT:    vmovq %xmm2, %rsi
10951; AVX512BW-NEXT:    cmpq %rdx, %rsi
10952; AVX512BW-NEXT:    movl $0, %edx
10953; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10954; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10955; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
10956; AVX512BW-NEXT:    vextracti32x4 $2, %zmm7, %xmm2
10957; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rdx
10958; AVX512BW-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
10959; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
10960; AVX512BW-NEXT:    cmpq %rdx, %rsi
10961; AVX512BW-NEXT:    movl $0, %edx
10962; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10963; AVX512BW-NEXT:    vmovq %rdx, %xmm5
10964; AVX512BW-NEXT:    vmovq %xmm2, %rdx
10965; AVX512BW-NEXT:    vmovq %xmm4, %rsi
10966; AVX512BW-NEXT:    cmpq %rdx, %rsi
10967; AVX512BW-NEXT:    movl $0, %edx
10968; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10969; AVX512BW-NEXT:    vmovq %rdx, %xmm2
10970; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
10971; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm2
10972; AVX512BW-NEXT:    vextracti32x4 $1, %zmm7, %xmm0
10973; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rdx
10974; AVX512BW-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
10975; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
10976; AVX512BW-NEXT:    cmpq %rdx, %rsi
10977; AVX512BW-NEXT:    movl $0, %edx
10978; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10979; AVX512BW-NEXT:    vmovq %rdx, %xmm5
10980; AVX512BW-NEXT:    vmovq %xmm0, %rdx
10981; AVX512BW-NEXT:    vmovq %xmm4, %rsi
10982; AVX512BW-NEXT:    cmpq %rdx, %rsi
10983; AVX512BW-NEXT:    movl $0, %edx
10984; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10985; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10986; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10987; AVX512BW-NEXT:    vpextrq $1, %xmm7, %rdx
10988; AVX512BW-NEXT:    vpextrq $1, %xmm3, %rsi
10989; AVX512BW-NEXT:    cmpq %rdx, %rsi
10990; AVX512BW-NEXT:    movl $0, %edx
10991; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10992; AVX512BW-NEXT:    vmovq %rdx, %xmm4
10993; AVX512BW-NEXT:    vmovq %xmm7, %rdx
10994; AVX512BW-NEXT:    vmovq %xmm3, %rsi
10995; AVX512BW-NEXT:    cmpq %rdx, %rsi
10996; AVX512BW-NEXT:    cmovgq %rcx, %rax
10997; AVX512BW-NEXT:    vmovq %rax, %xmm3
10998; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
10999; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm0
11000; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
11001; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
11002; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
11003; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
11004; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
11005; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
11006; AVX512BW-NEXT:    retq
11007  %1 = icmp sgt <32 x i64> %a0, %a1
11008  ret <32 x i1> %1
11009}
11010