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 %xmm5, %xmm1
984; SSE42-NEXT:    movdqa {{.*#+}} xmm5 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
985; SSE42-NEXT:    pshufb %xmm5, %xmm1
986; SSE42-NEXT:    pcmpgtw %xmm4, %xmm0
987; SSE42-NEXT:    pshufb %xmm5, %xmm0
988; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
989; SSE42-NEXT:    pcmpgtw %xmm7, %xmm3
990; SSE42-NEXT:    pshufb %xmm5, %xmm3
991; SSE42-NEXT:    pcmpgtw %xmm6, %xmm2
992; SSE42-NEXT:    pshufb %xmm5, %xmm2
993; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
994; SSE42-NEXT:    pextrb $15, %xmm2, %eax
995; SSE42-NEXT:    andb $1, %al
996; SSE42-NEXT:    movb %al, 2(%rdi)
997; SSE42-NEXT:    pextrb $14, %xmm2, %eax
998; SSE42-NEXT:    andb $1, %al
999; SSE42-NEXT:    movb %al, 2(%rdi)
1000; SSE42-NEXT:    pextrb $13, %xmm2, %eax
1001; SSE42-NEXT:    andb $1, %al
1002; SSE42-NEXT:    movb %al, 2(%rdi)
1003; SSE42-NEXT:    pextrb $12, %xmm2, %eax
1004; SSE42-NEXT:    andb $1, %al
1005; SSE42-NEXT:    movb %al, 2(%rdi)
1006; SSE42-NEXT:    pextrb $11, %xmm2, %eax
1007; SSE42-NEXT:    andb $1, %al
1008; SSE42-NEXT:    movb %al, 2(%rdi)
1009; SSE42-NEXT:    pextrb $10, %xmm2, %eax
1010; SSE42-NEXT:    andb $1, %al
1011; SSE42-NEXT:    movb %al, 2(%rdi)
1012; SSE42-NEXT:    pextrb $9, %xmm2, %eax
1013; SSE42-NEXT:    andb $1, %al
1014; SSE42-NEXT:    movb %al, 2(%rdi)
1015; SSE42-NEXT:    pextrb $8, %xmm2, %eax
1016; SSE42-NEXT:    andb $1, %al
1017; SSE42-NEXT:    movb %al, 2(%rdi)
1018; SSE42-NEXT:    pextrb $7, %xmm2, %eax
1019; SSE42-NEXT:    andb $1, %al
1020; SSE42-NEXT:    movb %al, 2(%rdi)
1021; SSE42-NEXT:    pextrb $6, %xmm2, %eax
1022; SSE42-NEXT:    andb $1, %al
1023; SSE42-NEXT:    movb %al, 2(%rdi)
1024; SSE42-NEXT:    pextrb $5, %xmm2, %eax
1025; SSE42-NEXT:    andb $1, %al
1026; SSE42-NEXT:    movb %al, 2(%rdi)
1027; SSE42-NEXT:    pextrb $4, %xmm2, %eax
1028; SSE42-NEXT:    andb $1, %al
1029; SSE42-NEXT:    movb %al, 2(%rdi)
1030; SSE42-NEXT:    pextrb $3, %xmm2, %eax
1031; SSE42-NEXT:    andb $1, %al
1032; SSE42-NEXT:    movb %al, 2(%rdi)
1033; SSE42-NEXT:    pextrb $2, %xmm2, %eax
1034; SSE42-NEXT:    andb $1, %al
1035; SSE42-NEXT:    movb %al, 2(%rdi)
1036; SSE42-NEXT:    pextrb $1, %xmm2, %eax
1037; SSE42-NEXT:    andb $1, %al
1038; SSE42-NEXT:    movb %al, 2(%rdi)
1039; SSE42-NEXT:    pextrb $0, %xmm2, %eax
1040; SSE42-NEXT:    andb $1, %al
1041; SSE42-NEXT:    movb %al, 2(%rdi)
1042; SSE42-NEXT:    pextrb $15, %xmm0, %eax
1043; SSE42-NEXT:    andb $1, %al
1044; SSE42-NEXT:    movb %al, (%rdi)
1045; SSE42-NEXT:    pextrb $14, %xmm0, %eax
1046; SSE42-NEXT:    andb $1, %al
1047; SSE42-NEXT:    movb %al, (%rdi)
1048; SSE42-NEXT:    pextrb $13, %xmm0, %eax
1049; SSE42-NEXT:    andb $1, %al
1050; SSE42-NEXT:    movb %al, (%rdi)
1051; SSE42-NEXT:    pextrb $12, %xmm0, %eax
1052; SSE42-NEXT:    andb $1, %al
1053; SSE42-NEXT:    movb %al, (%rdi)
1054; SSE42-NEXT:    pextrb $11, %xmm0, %eax
1055; SSE42-NEXT:    andb $1, %al
1056; SSE42-NEXT:    movb %al, (%rdi)
1057; SSE42-NEXT:    pextrb $10, %xmm0, %eax
1058; SSE42-NEXT:    andb $1, %al
1059; SSE42-NEXT:    movb %al, (%rdi)
1060; SSE42-NEXT:    pextrb $9, %xmm0, %eax
1061; SSE42-NEXT:    andb $1, %al
1062; SSE42-NEXT:    movb %al, (%rdi)
1063; SSE42-NEXT:    pextrb $8, %xmm0, %eax
1064; SSE42-NEXT:    andb $1, %al
1065; SSE42-NEXT:    movb %al, (%rdi)
1066; SSE42-NEXT:    pextrb $7, %xmm0, %eax
1067; SSE42-NEXT:    andb $1, %al
1068; SSE42-NEXT:    movb %al, (%rdi)
1069; SSE42-NEXT:    pextrb $6, %xmm0, %eax
1070; SSE42-NEXT:    andb $1, %al
1071; SSE42-NEXT:    movb %al, (%rdi)
1072; SSE42-NEXT:    pextrb $5, %xmm0, %eax
1073; SSE42-NEXT:    andb $1, %al
1074; SSE42-NEXT:    movb %al, (%rdi)
1075; SSE42-NEXT:    pextrb $4, %xmm0, %eax
1076; SSE42-NEXT:    andb $1, %al
1077; SSE42-NEXT:    movb %al, (%rdi)
1078; SSE42-NEXT:    pextrb $3, %xmm0, %eax
1079; SSE42-NEXT:    andb $1, %al
1080; SSE42-NEXT:    movb %al, (%rdi)
1081; SSE42-NEXT:    pextrb $2, %xmm0, %eax
1082; SSE42-NEXT:    andb $1, %al
1083; SSE42-NEXT:    movb %al, (%rdi)
1084; SSE42-NEXT:    pextrb $1, %xmm0, %eax
1085; SSE42-NEXT:    andb $1, %al
1086; SSE42-NEXT:    movb %al, (%rdi)
1087; SSE42-NEXT:    pextrb $0, %xmm0, %eax
1088; SSE42-NEXT:    andb $1, %al
1089; SSE42-NEXT:    movb %al, (%rdi)
1090; SSE42-NEXT:    movq %rdi, %rax
1091; SSE42-NEXT:    retq
1092;
1093; AVX1-LABEL: test_cmp_v32i16:
1094; AVX1:       # BB#0:
1095; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1096; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
1097; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm5, %xmm4
1098; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm1, %xmm1
1099; AVX1-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
1100; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
1101; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
1102; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm4, %xmm3
1103; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm0, %xmm0
1104; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
1105; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1106; AVX1-NEXT:    retq
1107;
1108; AVX2-LABEL: test_cmp_v32i16:
1109; AVX2:       # BB#0:
1110; AVX2-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1111; AVX2-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1112; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
1113; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1114; AVX2-NEXT:    retq
1115;
1116; AVX512F-LABEL: test_cmp_v32i16:
1117; AVX512F:       # BB#0:
1118; AVX512F-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1119; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
1120; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
1121; AVX512F-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1122; AVX512F-NEXT:    vpmovsxwd %ymm1, %zmm1
1123; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
1124; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1125; AVX512F-NEXT:    retq
1126;
1127; AVX512DQ-LABEL: test_cmp_v32i16:
1128; AVX512DQ:       # BB#0:
1129; AVX512DQ-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1130; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm0
1131; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
1132; AVX512DQ-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1133; AVX512DQ-NEXT:    vpmovsxwd %ymm1, %zmm1
1134; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm1
1135; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1136; AVX512DQ-NEXT:    retq
1137;
1138; AVX512BW-LABEL: test_cmp_v32i16:
1139; AVX512BW:       # BB#0:
1140; AVX512BW-NEXT:    vpcmpgtw %zmm1, %zmm0, %k1
1141; AVX512BW-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
1142; AVX512BW-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}
1143; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
1144; AVX512BW-NEXT:    retq
1145  %1 = icmp sgt <32 x i16> %a0, %a1
1146  ret <32 x i1> %1
1147}
1148
1149define <64 x i1> @test_cmp_v64i8(<64 x i8> %a0, <64 x i8> %a1) nounwind {
1150; SSE2-LABEL: test_cmp_v64i8:
1151; SSE2:       # BB#0:
1152; SSE2-NEXT:    pcmpgtb %xmm4, %xmm0
1153; SSE2-NEXT:    pcmpgtb %xmm5, %xmm1
1154; SSE2-NEXT:    pcmpgtb %xmm6, %xmm2
1155; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
1156; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
1157; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1158; SSE2-NEXT:    andb $1, %al
1159; SSE2-NEXT:    movb %al, 6(%rdi)
1160; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
1161; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1162; SSE2-NEXT:    andb $1, %al
1163; SSE2-NEXT:    movb %al, 4(%rdi)
1164; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
1165; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1166; SSE2-NEXT:    andb $1, %al
1167; SSE2-NEXT:    movb %al, 2(%rdi)
1168; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
1169; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1170; SSE2-NEXT:    andb $1, %al
1171; SSE2-NEXT:    movb %al, (%rdi)
1172; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1173; SSE2-NEXT:    andb $1, %al
1174; SSE2-NEXT:    movb %al, 6(%rdi)
1175; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1176; SSE2-NEXT:    andb $1, %al
1177; SSE2-NEXT:    movb %al, 4(%rdi)
1178; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1179; SSE2-NEXT:    andb $1, %al
1180; SSE2-NEXT:    movb %al, 2(%rdi)
1181; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1182; SSE2-NEXT:    andb $1, %al
1183; SSE2-NEXT:    movb %al, (%rdi)
1184; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1185; SSE2-NEXT:    andb $1, %al
1186; SSE2-NEXT:    movb %al, 6(%rdi)
1187; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1188; SSE2-NEXT:    andb $1, %al
1189; SSE2-NEXT:    movb %al, 4(%rdi)
1190; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1191; SSE2-NEXT:    andb $1, %al
1192; SSE2-NEXT:    movb %al, 2(%rdi)
1193; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1194; SSE2-NEXT:    andb $1, %al
1195; SSE2-NEXT:    movb %al, (%rdi)
1196; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1197; SSE2-NEXT:    andb $1, %al
1198; SSE2-NEXT:    movb %al, 6(%rdi)
1199; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1200; SSE2-NEXT:    andb $1, %al
1201; SSE2-NEXT:    movb %al, 4(%rdi)
1202; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1203; SSE2-NEXT:    andb $1, %al
1204; SSE2-NEXT:    movb %al, 2(%rdi)
1205; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1206; SSE2-NEXT:    andb $1, %al
1207; SSE2-NEXT:    movb %al, (%rdi)
1208; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1209; SSE2-NEXT:    andb $1, %al
1210; SSE2-NEXT:    movb %al, 6(%rdi)
1211; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1212; SSE2-NEXT:    andb $1, %al
1213; SSE2-NEXT:    movb %al, 4(%rdi)
1214; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1215; SSE2-NEXT:    andb $1, %al
1216; SSE2-NEXT:    movb %al, 2(%rdi)
1217; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1218; SSE2-NEXT:    andb $1, %al
1219; SSE2-NEXT:    movb %al, (%rdi)
1220; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1221; SSE2-NEXT:    andb $1, %al
1222; SSE2-NEXT:    movb %al, 6(%rdi)
1223; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1224; SSE2-NEXT:    andb $1, %al
1225; SSE2-NEXT:    movb %al, 4(%rdi)
1226; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1227; SSE2-NEXT:    andb $1, %al
1228; SSE2-NEXT:    movb %al, 2(%rdi)
1229; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1230; SSE2-NEXT:    andb $1, %al
1231; SSE2-NEXT:    movb %al, (%rdi)
1232; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1233; SSE2-NEXT:    andb $1, %al
1234; SSE2-NEXT:    movb %al, 6(%rdi)
1235; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1236; SSE2-NEXT:    andb $1, %al
1237; SSE2-NEXT:    movb %al, 4(%rdi)
1238; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1239; SSE2-NEXT:    andb $1, %al
1240; SSE2-NEXT:    movb %al, 2(%rdi)
1241; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1242; SSE2-NEXT:    andb $1, %al
1243; SSE2-NEXT:    movb %al, (%rdi)
1244; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1245; SSE2-NEXT:    andb $1, %al
1246; SSE2-NEXT:    movb %al, 6(%rdi)
1247; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1248; SSE2-NEXT:    andb $1, %al
1249; SSE2-NEXT:    movb %al, 4(%rdi)
1250; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1251; SSE2-NEXT:    andb $1, %al
1252; SSE2-NEXT:    movb %al, 2(%rdi)
1253; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1254; SSE2-NEXT:    andb $1, %al
1255; SSE2-NEXT:    movb %al, (%rdi)
1256; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1257; SSE2-NEXT:    andb $1, %al
1258; SSE2-NEXT:    movb %al, 6(%rdi)
1259; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1260; SSE2-NEXT:    andb $1, %al
1261; SSE2-NEXT:    movb %al, 4(%rdi)
1262; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1263; SSE2-NEXT:    andb $1, %al
1264; SSE2-NEXT:    movb %al, 2(%rdi)
1265; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1266; SSE2-NEXT:    andb $1, %al
1267; SSE2-NEXT:    movb %al, (%rdi)
1268; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1269; SSE2-NEXT:    andb $1, %al
1270; SSE2-NEXT:    movb %al, 6(%rdi)
1271; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1272; SSE2-NEXT:    andb $1, %al
1273; SSE2-NEXT:    movb %al, 4(%rdi)
1274; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1275; SSE2-NEXT:    andb $1, %al
1276; SSE2-NEXT:    movb %al, 2(%rdi)
1277; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1278; SSE2-NEXT:    andb $1, %al
1279; SSE2-NEXT:    movb %al, (%rdi)
1280; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1281; SSE2-NEXT:    andb $1, %al
1282; SSE2-NEXT:    movb %al, 6(%rdi)
1283; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1284; SSE2-NEXT:    andb $1, %al
1285; SSE2-NEXT:    movb %al, 4(%rdi)
1286; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1287; SSE2-NEXT:    andb $1, %al
1288; SSE2-NEXT:    movb %al, 2(%rdi)
1289; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1290; SSE2-NEXT:    andb $1, %al
1291; SSE2-NEXT:    movb %al, (%rdi)
1292; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1293; SSE2-NEXT:    andb $1, %al
1294; SSE2-NEXT:    movb %al, 6(%rdi)
1295; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1296; SSE2-NEXT:    andb $1, %al
1297; SSE2-NEXT:    movb %al, 4(%rdi)
1298; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1299; SSE2-NEXT:    andb $1, %al
1300; SSE2-NEXT:    movb %al, 2(%rdi)
1301; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1302; SSE2-NEXT:    andb $1, %al
1303; SSE2-NEXT:    movb %al, (%rdi)
1304; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1305; SSE2-NEXT:    andb $1, %al
1306; SSE2-NEXT:    movb %al, 6(%rdi)
1307; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1308; SSE2-NEXT:    andb $1, %al
1309; SSE2-NEXT:    movb %al, 4(%rdi)
1310; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1311; SSE2-NEXT:    andb $1, %al
1312; SSE2-NEXT:    movb %al, 2(%rdi)
1313; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1314; SSE2-NEXT:    andb $1, %al
1315; SSE2-NEXT:    movb %al, (%rdi)
1316; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1317; SSE2-NEXT:    andb $1, %al
1318; SSE2-NEXT:    movb %al, 6(%rdi)
1319; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1320; SSE2-NEXT:    andb $1, %al
1321; SSE2-NEXT:    movb %al, 4(%rdi)
1322; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1323; SSE2-NEXT:    andb $1, %al
1324; SSE2-NEXT:    movb %al, 2(%rdi)
1325; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1326; SSE2-NEXT:    andb $1, %al
1327; SSE2-NEXT:    movb %al, (%rdi)
1328; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1329; SSE2-NEXT:    andb $1, %al
1330; SSE2-NEXT:    movb %al, 6(%rdi)
1331; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1332; SSE2-NEXT:    andb $1, %al
1333; SSE2-NEXT:    movb %al, 4(%rdi)
1334; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1335; SSE2-NEXT:    andb $1, %al
1336; SSE2-NEXT:    movb %al, 2(%rdi)
1337; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1338; SSE2-NEXT:    andb $1, %al
1339; SSE2-NEXT:    movb %al, (%rdi)
1340; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1341; SSE2-NEXT:    andb $1, %al
1342; SSE2-NEXT:    movb %al, 6(%rdi)
1343; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1344; SSE2-NEXT:    andb $1, %al
1345; SSE2-NEXT:    movb %al, 4(%rdi)
1346; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1347; SSE2-NEXT:    andb $1, %al
1348; SSE2-NEXT:    movb %al, 2(%rdi)
1349; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1350; SSE2-NEXT:    andb $1, %al
1351; SSE2-NEXT:    movb %al, (%rdi)
1352; SSE2-NEXT:    movq %rdi, %rax
1353; SSE2-NEXT:    retq
1354;
1355; SSE42-LABEL: test_cmp_v64i8:
1356; SSE42:       # BB#0:
1357; SSE42-NEXT:    pcmpgtb %xmm4, %xmm0
1358; SSE42-NEXT:    pcmpgtb %xmm5, %xmm1
1359; SSE42-NEXT:    pcmpgtb %xmm6, %xmm2
1360; SSE42-NEXT:    pcmpgtb %xmm7, %xmm3
1361; SSE42-NEXT:    pextrb $15, %xmm3, %eax
1362; SSE42-NEXT:    andb $1, %al
1363; SSE42-NEXT:    movb %al, 6(%rdi)
1364; SSE42-NEXT:    pextrb $14, %xmm3, %eax
1365; SSE42-NEXT:    andb $1, %al
1366; SSE42-NEXT:    movb %al, 6(%rdi)
1367; SSE42-NEXT:    pextrb $13, %xmm3, %eax
1368; SSE42-NEXT:    andb $1, %al
1369; SSE42-NEXT:    movb %al, 6(%rdi)
1370; SSE42-NEXT:    pextrb $12, %xmm3, %eax
1371; SSE42-NEXT:    andb $1, %al
1372; SSE42-NEXT:    movb %al, 6(%rdi)
1373; SSE42-NEXT:    pextrb $11, %xmm3, %eax
1374; SSE42-NEXT:    andb $1, %al
1375; SSE42-NEXT:    movb %al, 6(%rdi)
1376; SSE42-NEXT:    pextrb $10, %xmm3, %eax
1377; SSE42-NEXT:    andb $1, %al
1378; SSE42-NEXT:    movb %al, 6(%rdi)
1379; SSE42-NEXT:    pextrb $9, %xmm3, %eax
1380; SSE42-NEXT:    andb $1, %al
1381; SSE42-NEXT:    movb %al, 6(%rdi)
1382; SSE42-NEXT:    pextrb $8, %xmm3, %eax
1383; SSE42-NEXT:    andb $1, %al
1384; SSE42-NEXT:    movb %al, 6(%rdi)
1385; SSE42-NEXT:    pextrb $7, %xmm3, %eax
1386; SSE42-NEXT:    andb $1, %al
1387; SSE42-NEXT:    movb %al, 6(%rdi)
1388; SSE42-NEXT:    pextrb $6, %xmm3, %eax
1389; SSE42-NEXT:    andb $1, %al
1390; SSE42-NEXT:    movb %al, 6(%rdi)
1391; SSE42-NEXT:    pextrb $5, %xmm3, %eax
1392; SSE42-NEXT:    andb $1, %al
1393; SSE42-NEXT:    movb %al, 6(%rdi)
1394; SSE42-NEXT:    pextrb $4, %xmm3, %eax
1395; SSE42-NEXT:    andb $1, %al
1396; SSE42-NEXT:    movb %al, 6(%rdi)
1397; SSE42-NEXT:    pextrb $3, %xmm3, %eax
1398; SSE42-NEXT:    andb $1, %al
1399; SSE42-NEXT:    movb %al, 6(%rdi)
1400; SSE42-NEXT:    pextrb $2, %xmm3, %eax
1401; SSE42-NEXT:    andb $1, %al
1402; SSE42-NEXT:    movb %al, 6(%rdi)
1403; SSE42-NEXT:    pextrb $1, %xmm3, %eax
1404; SSE42-NEXT:    andb $1, %al
1405; SSE42-NEXT:    movb %al, 6(%rdi)
1406; SSE42-NEXT:    pextrb $0, %xmm3, %eax
1407; SSE42-NEXT:    andb $1, %al
1408; SSE42-NEXT:    movb %al, 6(%rdi)
1409; SSE42-NEXT:    pextrb $15, %xmm2, %eax
1410; SSE42-NEXT:    andb $1, %al
1411; SSE42-NEXT:    movb %al, 4(%rdi)
1412; SSE42-NEXT:    pextrb $14, %xmm2, %eax
1413; SSE42-NEXT:    andb $1, %al
1414; SSE42-NEXT:    movb %al, 4(%rdi)
1415; SSE42-NEXT:    pextrb $13, %xmm2, %eax
1416; SSE42-NEXT:    andb $1, %al
1417; SSE42-NEXT:    movb %al, 4(%rdi)
1418; SSE42-NEXT:    pextrb $12, %xmm2, %eax
1419; SSE42-NEXT:    andb $1, %al
1420; SSE42-NEXT:    movb %al, 4(%rdi)
1421; SSE42-NEXT:    pextrb $11, %xmm2, %eax
1422; SSE42-NEXT:    andb $1, %al
1423; SSE42-NEXT:    movb %al, 4(%rdi)
1424; SSE42-NEXT:    pextrb $10, %xmm2, %eax
1425; SSE42-NEXT:    andb $1, %al
1426; SSE42-NEXT:    movb %al, 4(%rdi)
1427; SSE42-NEXT:    pextrb $9, %xmm2, %eax
1428; SSE42-NEXT:    andb $1, %al
1429; SSE42-NEXT:    movb %al, 4(%rdi)
1430; SSE42-NEXT:    pextrb $8, %xmm2, %eax
1431; SSE42-NEXT:    andb $1, %al
1432; SSE42-NEXT:    movb %al, 4(%rdi)
1433; SSE42-NEXT:    pextrb $7, %xmm2, %eax
1434; SSE42-NEXT:    andb $1, %al
1435; SSE42-NEXT:    movb %al, 4(%rdi)
1436; SSE42-NEXT:    pextrb $6, %xmm2, %eax
1437; SSE42-NEXT:    andb $1, %al
1438; SSE42-NEXT:    movb %al, 4(%rdi)
1439; SSE42-NEXT:    pextrb $5, %xmm2, %eax
1440; SSE42-NEXT:    andb $1, %al
1441; SSE42-NEXT:    movb %al, 4(%rdi)
1442; SSE42-NEXT:    pextrb $4, %xmm2, %eax
1443; SSE42-NEXT:    andb $1, %al
1444; SSE42-NEXT:    movb %al, 4(%rdi)
1445; SSE42-NEXT:    pextrb $3, %xmm2, %eax
1446; SSE42-NEXT:    andb $1, %al
1447; SSE42-NEXT:    movb %al, 4(%rdi)
1448; SSE42-NEXT:    pextrb $2, %xmm2, %eax
1449; SSE42-NEXT:    andb $1, %al
1450; SSE42-NEXT:    movb %al, 4(%rdi)
1451; SSE42-NEXT:    pextrb $1, %xmm2, %eax
1452; SSE42-NEXT:    andb $1, %al
1453; SSE42-NEXT:    movb %al, 4(%rdi)
1454; SSE42-NEXT:    pextrb $0, %xmm2, %eax
1455; SSE42-NEXT:    andb $1, %al
1456; SSE42-NEXT:    movb %al, 4(%rdi)
1457; SSE42-NEXT:    pextrb $15, %xmm1, %eax
1458; SSE42-NEXT:    andb $1, %al
1459; SSE42-NEXT:    movb %al, 2(%rdi)
1460; SSE42-NEXT:    pextrb $14, %xmm1, %eax
1461; SSE42-NEXT:    andb $1, %al
1462; SSE42-NEXT:    movb %al, 2(%rdi)
1463; SSE42-NEXT:    pextrb $13, %xmm1, %eax
1464; SSE42-NEXT:    andb $1, %al
1465; SSE42-NEXT:    movb %al, 2(%rdi)
1466; SSE42-NEXT:    pextrb $12, %xmm1, %eax
1467; SSE42-NEXT:    andb $1, %al
1468; SSE42-NEXT:    movb %al, 2(%rdi)
1469; SSE42-NEXT:    pextrb $11, %xmm1, %eax
1470; SSE42-NEXT:    andb $1, %al
1471; SSE42-NEXT:    movb %al, 2(%rdi)
1472; SSE42-NEXT:    pextrb $10, %xmm1, %eax
1473; SSE42-NEXT:    andb $1, %al
1474; SSE42-NEXT:    movb %al, 2(%rdi)
1475; SSE42-NEXT:    pextrb $9, %xmm1, %eax
1476; SSE42-NEXT:    andb $1, %al
1477; SSE42-NEXT:    movb %al, 2(%rdi)
1478; SSE42-NEXT:    pextrb $8, %xmm1, %eax
1479; SSE42-NEXT:    andb $1, %al
1480; SSE42-NEXT:    movb %al, 2(%rdi)
1481; SSE42-NEXT:    pextrb $7, %xmm1, %eax
1482; SSE42-NEXT:    andb $1, %al
1483; SSE42-NEXT:    movb %al, 2(%rdi)
1484; SSE42-NEXT:    pextrb $6, %xmm1, %eax
1485; SSE42-NEXT:    andb $1, %al
1486; SSE42-NEXT:    movb %al, 2(%rdi)
1487; SSE42-NEXT:    pextrb $5, %xmm1, %eax
1488; SSE42-NEXT:    andb $1, %al
1489; SSE42-NEXT:    movb %al, 2(%rdi)
1490; SSE42-NEXT:    pextrb $4, %xmm1, %eax
1491; SSE42-NEXT:    andb $1, %al
1492; SSE42-NEXT:    movb %al, 2(%rdi)
1493; SSE42-NEXT:    pextrb $3, %xmm1, %eax
1494; SSE42-NEXT:    andb $1, %al
1495; SSE42-NEXT:    movb %al, 2(%rdi)
1496; SSE42-NEXT:    pextrb $2, %xmm1, %eax
1497; SSE42-NEXT:    andb $1, %al
1498; SSE42-NEXT:    movb %al, 2(%rdi)
1499; SSE42-NEXT:    pextrb $1, %xmm1, %eax
1500; SSE42-NEXT:    andb $1, %al
1501; SSE42-NEXT:    movb %al, 2(%rdi)
1502; SSE42-NEXT:    pextrb $0, %xmm1, %eax
1503; SSE42-NEXT:    andb $1, %al
1504; SSE42-NEXT:    movb %al, 2(%rdi)
1505; SSE42-NEXT:    pextrb $15, %xmm0, %eax
1506; SSE42-NEXT:    andb $1, %al
1507; SSE42-NEXT:    movb %al, (%rdi)
1508; SSE42-NEXT:    pextrb $14, %xmm0, %eax
1509; SSE42-NEXT:    andb $1, %al
1510; SSE42-NEXT:    movb %al, (%rdi)
1511; SSE42-NEXT:    pextrb $13, %xmm0, %eax
1512; SSE42-NEXT:    andb $1, %al
1513; SSE42-NEXT:    movb %al, (%rdi)
1514; SSE42-NEXT:    pextrb $12, %xmm0, %eax
1515; SSE42-NEXT:    andb $1, %al
1516; SSE42-NEXT:    movb %al, (%rdi)
1517; SSE42-NEXT:    pextrb $11, %xmm0, %eax
1518; SSE42-NEXT:    andb $1, %al
1519; SSE42-NEXT:    movb %al, (%rdi)
1520; SSE42-NEXT:    pextrb $10, %xmm0, %eax
1521; SSE42-NEXT:    andb $1, %al
1522; SSE42-NEXT:    movb %al, (%rdi)
1523; SSE42-NEXT:    pextrb $9, %xmm0, %eax
1524; SSE42-NEXT:    andb $1, %al
1525; SSE42-NEXT:    movb %al, (%rdi)
1526; SSE42-NEXT:    pextrb $8, %xmm0, %eax
1527; SSE42-NEXT:    andb $1, %al
1528; SSE42-NEXT:    movb %al, (%rdi)
1529; SSE42-NEXT:    pextrb $7, %xmm0, %eax
1530; SSE42-NEXT:    andb $1, %al
1531; SSE42-NEXT:    movb %al, (%rdi)
1532; SSE42-NEXT:    pextrb $6, %xmm0, %eax
1533; SSE42-NEXT:    andb $1, %al
1534; SSE42-NEXT:    movb %al, (%rdi)
1535; SSE42-NEXT:    pextrb $5, %xmm0, %eax
1536; SSE42-NEXT:    andb $1, %al
1537; SSE42-NEXT:    movb %al, (%rdi)
1538; SSE42-NEXT:    pextrb $4, %xmm0, %eax
1539; SSE42-NEXT:    andb $1, %al
1540; SSE42-NEXT:    movb %al, (%rdi)
1541; SSE42-NEXT:    pextrb $3, %xmm0, %eax
1542; SSE42-NEXT:    andb $1, %al
1543; SSE42-NEXT:    movb %al, (%rdi)
1544; SSE42-NEXT:    pextrb $2, %xmm0, %eax
1545; SSE42-NEXT:    andb $1, %al
1546; SSE42-NEXT:    movb %al, (%rdi)
1547; SSE42-NEXT:    pextrb $1, %xmm0, %eax
1548; SSE42-NEXT:    andb $1, %al
1549; SSE42-NEXT:    movb %al, (%rdi)
1550; SSE42-NEXT:    pextrb $0, %xmm0, %eax
1551; SSE42-NEXT:    andb $1, %al
1552; SSE42-NEXT:    movb %al, (%rdi)
1553; SSE42-NEXT:    movq %rdi, %rax
1554; SSE42-NEXT:    retq
1555;
1556; AVX1-LABEL: test_cmp_v64i8:
1557; AVX1:       # BB#0:
1558; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm4
1559; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
1560; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1561; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm0
1562; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm2
1563; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
1564; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1565; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm1
1566; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
1567; AVX1-NEXT:    andb $1, %al
1568; AVX1-NEXT:    movb %al, 4(%rdi)
1569; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
1570; AVX1-NEXT:    andb $1, %al
1571; AVX1-NEXT:    movb %al, 4(%rdi)
1572; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
1573; AVX1-NEXT:    andb $1, %al
1574; AVX1-NEXT:    movb %al, 4(%rdi)
1575; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
1576; AVX1-NEXT:    andb $1, %al
1577; AVX1-NEXT:    movb %al, 4(%rdi)
1578; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
1579; AVX1-NEXT:    andb $1, %al
1580; AVX1-NEXT:    movb %al, 4(%rdi)
1581; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
1582; AVX1-NEXT:    andb $1, %al
1583; AVX1-NEXT:    movb %al, 4(%rdi)
1584; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
1585; AVX1-NEXT:    andb $1, %al
1586; AVX1-NEXT:    movb %al, 4(%rdi)
1587; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
1588; AVX1-NEXT:    andb $1, %al
1589; AVX1-NEXT:    movb %al, 4(%rdi)
1590; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
1591; AVX1-NEXT:    andb $1, %al
1592; AVX1-NEXT:    movb %al, 4(%rdi)
1593; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
1594; AVX1-NEXT:    andb $1, %al
1595; AVX1-NEXT:    movb %al, 4(%rdi)
1596; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
1597; AVX1-NEXT:    andb $1, %al
1598; AVX1-NEXT:    movb %al, 4(%rdi)
1599; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
1600; AVX1-NEXT:    andb $1, %al
1601; AVX1-NEXT:    movb %al, 4(%rdi)
1602; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
1603; AVX1-NEXT:    andb $1, %al
1604; AVX1-NEXT:    movb %al, 4(%rdi)
1605; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
1606; AVX1-NEXT:    andb $1, %al
1607; AVX1-NEXT:    movb %al, 4(%rdi)
1608; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
1609; AVX1-NEXT:    andb $1, %al
1610; AVX1-NEXT:    movb %al, 4(%rdi)
1611; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
1612; AVX1-NEXT:    andb $1, %al
1613; AVX1-NEXT:    movb %al, 4(%rdi)
1614; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
1615; AVX1-NEXT:    andb $1, %al
1616; AVX1-NEXT:    movb %al, 4(%rdi)
1617; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
1618; AVX1-NEXT:    andb $1, %al
1619; AVX1-NEXT:    movb %al, 4(%rdi)
1620; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
1621; AVX1-NEXT:    andb $1, %al
1622; AVX1-NEXT:    movb %al, 4(%rdi)
1623; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
1624; AVX1-NEXT:    andb $1, %al
1625; AVX1-NEXT:    movb %al, 4(%rdi)
1626; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
1627; AVX1-NEXT:    andb $1, %al
1628; AVX1-NEXT:    movb %al, 4(%rdi)
1629; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
1630; AVX1-NEXT:    andb $1, %al
1631; AVX1-NEXT:    movb %al, 4(%rdi)
1632; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
1633; AVX1-NEXT:    andb $1, %al
1634; AVX1-NEXT:    movb %al, 4(%rdi)
1635; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
1636; AVX1-NEXT:    andb $1, %al
1637; AVX1-NEXT:    movb %al, 4(%rdi)
1638; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
1639; AVX1-NEXT:    andb $1, %al
1640; AVX1-NEXT:    movb %al, 4(%rdi)
1641; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
1642; AVX1-NEXT:    andb $1, %al
1643; AVX1-NEXT:    movb %al, 4(%rdi)
1644; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
1645; AVX1-NEXT:    andb $1, %al
1646; AVX1-NEXT:    movb %al, 4(%rdi)
1647; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
1648; AVX1-NEXT:    andb $1, %al
1649; AVX1-NEXT:    movb %al, 4(%rdi)
1650; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
1651; AVX1-NEXT:    andb $1, %al
1652; AVX1-NEXT:    movb %al, 4(%rdi)
1653; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
1654; AVX1-NEXT:    andb $1, %al
1655; AVX1-NEXT:    movb %al, 4(%rdi)
1656; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
1657; AVX1-NEXT:    andb $1, %al
1658; AVX1-NEXT:    movb %al, 4(%rdi)
1659; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
1660; AVX1-NEXT:    andb $1, %al
1661; AVX1-NEXT:    movb %al, 4(%rdi)
1662; AVX1-NEXT:    vpextrb $15, %xmm0, %eax
1663; AVX1-NEXT:    andb $1, %al
1664; AVX1-NEXT:    movb %al, (%rdi)
1665; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
1666; AVX1-NEXT:    andb $1, %al
1667; AVX1-NEXT:    movb %al, (%rdi)
1668; AVX1-NEXT:    vpextrb $13, %xmm0, %eax
1669; AVX1-NEXT:    andb $1, %al
1670; AVX1-NEXT:    movb %al, (%rdi)
1671; AVX1-NEXT:    vpextrb $12, %xmm0, %eax
1672; AVX1-NEXT:    andb $1, %al
1673; AVX1-NEXT:    movb %al, (%rdi)
1674; AVX1-NEXT:    vpextrb $11, %xmm0, %eax
1675; AVX1-NEXT:    andb $1, %al
1676; AVX1-NEXT:    movb %al, (%rdi)
1677; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
1678; AVX1-NEXT:    andb $1, %al
1679; AVX1-NEXT:    movb %al, (%rdi)
1680; AVX1-NEXT:    vpextrb $9, %xmm0, %eax
1681; AVX1-NEXT:    andb $1, %al
1682; AVX1-NEXT:    movb %al, (%rdi)
1683; AVX1-NEXT:    vpextrb $8, %xmm0, %eax
1684; AVX1-NEXT:    andb $1, %al
1685; AVX1-NEXT:    movb %al, (%rdi)
1686; AVX1-NEXT:    vpextrb $7, %xmm0, %eax
1687; AVX1-NEXT:    andb $1, %al
1688; AVX1-NEXT:    movb %al, (%rdi)
1689; AVX1-NEXT:    vpextrb $6, %xmm0, %eax
1690; AVX1-NEXT:    andb $1, %al
1691; AVX1-NEXT:    movb %al, (%rdi)
1692; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
1693; AVX1-NEXT:    andb $1, %al
1694; AVX1-NEXT:    movb %al, (%rdi)
1695; AVX1-NEXT:    vpextrb $4, %xmm0, %eax
1696; AVX1-NEXT:    andb $1, %al
1697; AVX1-NEXT:    movb %al, (%rdi)
1698; AVX1-NEXT:    vpextrb $3, %xmm0, %eax
1699; AVX1-NEXT:    andb $1, %al
1700; AVX1-NEXT:    movb %al, (%rdi)
1701; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
1702; AVX1-NEXT:    andb $1, %al
1703; AVX1-NEXT:    movb %al, (%rdi)
1704; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
1705; AVX1-NEXT:    andb $1, %al
1706; AVX1-NEXT:    movb %al, (%rdi)
1707; AVX1-NEXT:    vpextrb $0, %xmm0, %eax
1708; AVX1-NEXT:    andb $1, %al
1709; AVX1-NEXT:    movb %al, (%rdi)
1710; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
1711; AVX1-NEXT:    andb $1, %al
1712; AVX1-NEXT:    movb %al, (%rdi)
1713; AVX1-NEXT:    vpextrb $14, %xmm4, %eax
1714; AVX1-NEXT:    andb $1, %al
1715; AVX1-NEXT:    movb %al, (%rdi)
1716; AVX1-NEXT:    vpextrb $13, %xmm4, %eax
1717; AVX1-NEXT:    andb $1, %al
1718; AVX1-NEXT:    movb %al, (%rdi)
1719; AVX1-NEXT:    vpextrb $12, %xmm4, %eax
1720; AVX1-NEXT:    andb $1, %al
1721; AVX1-NEXT:    movb %al, (%rdi)
1722; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
1723; AVX1-NEXT:    andb $1, %al
1724; AVX1-NEXT:    movb %al, (%rdi)
1725; AVX1-NEXT:    vpextrb $10, %xmm4, %eax
1726; AVX1-NEXT:    andb $1, %al
1727; AVX1-NEXT:    movb %al, (%rdi)
1728; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
1729; AVX1-NEXT:    andb $1, %al
1730; AVX1-NEXT:    movb %al, (%rdi)
1731; AVX1-NEXT:    vpextrb $8, %xmm4, %eax
1732; AVX1-NEXT:    andb $1, %al
1733; AVX1-NEXT:    movb %al, (%rdi)
1734; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
1735; AVX1-NEXT:    andb $1, %al
1736; AVX1-NEXT:    movb %al, (%rdi)
1737; AVX1-NEXT:    vpextrb $6, %xmm4, %eax
1738; AVX1-NEXT:    andb $1, %al
1739; AVX1-NEXT:    movb %al, (%rdi)
1740; AVX1-NEXT:    vpextrb $5, %xmm4, %eax
1741; AVX1-NEXT:    andb $1, %al
1742; AVX1-NEXT:    movb %al, (%rdi)
1743; AVX1-NEXT:    vpextrb $4, %xmm4, %eax
1744; AVX1-NEXT:    andb $1, %al
1745; AVX1-NEXT:    movb %al, (%rdi)
1746; AVX1-NEXT:    vpextrb $3, %xmm4, %eax
1747; AVX1-NEXT:    andb $1, %al
1748; AVX1-NEXT:    movb %al, (%rdi)
1749; AVX1-NEXT:    vpextrb $2, %xmm4, %eax
1750; AVX1-NEXT:    andb $1, %al
1751; AVX1-NEXT:    movb %al, (%rdi)
1752; AVX1-NEXT:    vpextrb $1, %xmm4, %eax
1753; AVX1-NEXT:    andb $1, %al
1754; AVX1-NEXT:    movb %al, (%rdi)
1755; AVX1-NEXT:    vpextrb $0, %xmm4, %eax
1756; AVX1-NEXT:    andb $1, %al
1757; AVX1-NEXT:    movb %al, (%rdi)
1758; AVX1-NEXT:    movq %rdi, %rax
1759; AVX1-NEXT:    vzeroupper
1760; AVX1-NEXT:    retq
1761;
1762; AVX2-LABEL: test_cmp_v64i8:
1763; AVX2:       # BB#0:
1764; AVX2-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
1765; AVX2-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm1
1766; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
1767; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
1768; AVX2-NEXT:    andb $1, %al
1769; AVX2-NEXT:    movb %al, 4(%rdi)
1770; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
1771; AVX2-NEXT:    andb $1, %al
1772; AVX2-NEXT:    movb %al, 4(%rdi)
1773; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
1774; AVX2-NEXT:    andb $1, %al
1775; AVX2-NEXT:    movb %al, 4(%rdi)
1776; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
1777; AVX2-NEXT:    andb $1, %al
1778; AVX2-NEXT:    movb %al, 4(%rdi)
1779; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
1780; AVX2-NEXT:    andb $1, %al
1781; AVX2-NEXT:    movb %al, 4(%rdi)
1782; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
1783; AVX2-NEXT:    andb $1, %al
1784; AVX2-NEXT:    movb %al, 4(%rdi)
1785; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
1786; AVX2-NEXT:    andb $1, %al
1787; AVX2-NEXT:    movb %al, 4(%rdi)
1788; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
1789; AVX2-NEXT:    andb $1, %al
1790; AVX2-NEXT:    movb %al, 4(%rdi)
1791; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
1792; AVX2-NEXT:    andb $1, %al
1793; AVX2-NEXT:    movb %al, 4(%rdi)
1794; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
1795; AVX2-NEXT:    andb $1, %al
1796; AVX2-NEXT:    movb %al, 4(%rdi)
1797; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
1798; AVX2-NEXT:    andb $1, %al
1799; AVX2-NEXT:    movb %al, 4(%rdi)
1800; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
1801; AVX2-NEXT:    andb $1, %al
1802; AVX2-NEXT:    movb %al, 4(%rdi)
1803; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
1804; AVX2-NEXT:    andb $1, %al
1805; AVX2-NEXT:    movb %al, 4(%rdi)
1806; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
1807; AVX2-NEXT:    andb $1, %al
1808; AVX2-NEXT:    movb %al, 4(%rdi)
1809; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
1810; AVX2-NEXT:    andb $1, %al
1811; AVX2-NEXT:    movb %al, 4(%rdi)
1812; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
1813; AVX2-NEXT:    andb $1, %al
1814; AVX2-NEXT:    movb %al, 4(%rdi)
1815; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
1816; AVX2-NEXT:    andb $1, %al
1817; AVX2-NEXT:    movb %al, 4(%rdi)
1818; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
1819; AVX2-NEXT:    andb $1, %al
1820; AVX2-NEXT:    movb %al, 4(%rdi)
1821; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
1822; AVX2-NEXT:    andb $1, %al
1823; AVX2-NEXT:    movb %al, 4(%rdi)
1824; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
1825; AVX2-NEXT:    andb $1, %al
1826; AVX2-NEXT:    movb %al, 4(%rdi)
1827; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
1828; AVX2-NEXT:    andb $1, %al
1829; AVX2-NEXT:    movb %al, 4(%rdi)
1830; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
1831; AVX2-NEXT:    andb $1, %al
1832; AVX2-NEXT:    movb %al, 4(%rdi)
1833; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
1834; AVX2-NEXT:    andb $1, %al
1835; AVX2-NEXT:    movb %al, 4(%rdi)
1836; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
1837; AVX2-NEXT:    andb $1, %al
1838; AVX2-NEXT:    movb %al, 4(%rdi)
1839; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
1840; AVX2-NEXT:    andb $1, %al
1841; AVX2-NEXT:    movb %al, 4(%rdi)
1842; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
1843; AVX2-NEXT:    andb $1, %al
1844; AVX2-NEXT:    movb %al, 4(%rdi)
1845; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
1846; AVX2-NEXT:    andb $1, %al
1847; AVX2-NEXT:    movb %al, 4(%rdi)
1848; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
1849; AVX2-NEXT:    andb $1, %al
1850; AVX2-NEXT:    movb %al, 4(%rdi)
1851; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
1852; AVX2-NEXT:    andb $1, %al
1853; AVX2-NEXT:    movb %al, 4(%rdi)
1854; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
1855; AVX2-NEXT:    andb $1, %al
1856; AVX2-NEXT:    movb %al, 4(%rdi)
1857; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
1858; AVX2-NEXT:    andb $1, %al
1859; AVX2-NEXT:    movb %al, 4(%rdi)
1860; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
1861; AVX2-NEXT:    andb $1, %al
1862; AVX2-NEXT:    movb %al, 4(%rdi)
1863; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1864; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
1865; AVX2-NEXT:    andb $1, %al
1866; AVX2-NEXT:    movb %al, (%rdi)
1867; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
1868; AVX2-NEXT:    andb $1, %al
1869; AVX2-NEXT:    movb %al, (%rdi)
1870; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
1871; AVX2-NEXT:    andb $1, %al
1872; AVX2-NEXT:    movb %al, (%rdi)
1873; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
1874; AVX2-NEXT:    andb $1, %al
1875; AVX2-NEXT:    movb %al, (%rdi)
1876; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
1877; AVX2-NEXT:    andb $1, %al
1878; AVX2-NEXT:    movb %al, (%rdi)
1879; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
1880; AVX2-NEXT:    andb $1, %al
1881; AVX2-NEXT:    movb %al, (%rdi)
1882; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
1883; AVX2-NEXT:    andb $1, %al
1884; AVX2-NEXT:    movb %al, (%rdi)
1885; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
1886; AVX2-NEXT:    andb $1, %al
1887; AVX2-NEXT:    movb %al, (%rdi)
1888; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
1889; AVX2-NEXT:    andb $1, %al
1890; AVX2-NEXT:    movb %al, (%rdi)
1891; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
1892; AVX2-NEXT:    andb $1, %al
1893; AVX2-NEXT:    movb %al, (%rdi)
1894; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
1895; AVX2-NEXT:    andb $1, %al
1896; AVX2-NEXT:    movb %al, (%rdi)
1897; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
1898; AVX2-NEXT:    andb $1, %al
1899; AVX2-NEXT:    movb %al, (%rdi)
1900; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
1901; AVX2-NEXT:    andb $1, %al
1902; AVX2-NEXT:    movb %al, (%rdi)
1903; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
1904; AVX2-NEXT:    andb $1, %al
1905; AVX2-NEXT:    movb %al, (%rdi)
1906; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
1907; AVX2-NEXT:    andb $1, %al
1908; AVX2-NEXT:    movb %al, (%rdi)
1909; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
1910; AVX2-NEXT:    andb $1, %al
1911; AVX2-NEXT:    movb %al, (%rdi)
1912; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
1913; AVX2-NEXT:    andb $1, %al
1914; AVX2-NEXT:    movb %al, (%rdi)
1915; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
1916; AVX2-NEXT:    andb $1, %al
1917; AVX2-NEXT:    movb %al, (%rdi)
1918; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
1919; AVX2-NEXT:    andb $1, %al
1920; AVX2-NEXT:    movb %al, (%rdi)
1921; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
1922; AVX2-NEXT:    andb $1, %al
1923; AVX2-NEXT:    movb %al, (%rdi)
1924; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
1925; AVX2-NEXT:    andb $1, %al
1926; AVX2-NEXT:    movb %al, (%rdi)
1927; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
1928; AVX2-NEXT:    andb $1, %al
1929; AVX2-NEXT:    movb %al, (%rdi)
1930; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
1931; AVX2-NEXT:    andb $1, %al
1932; AVX2-NEXT:    movb %al, (%rdi)
1933; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
1934; AVX2-NEXT:    andb $1, %al
1935; AVX2-NEXT:    movb %al, (%rdi)
1936; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
1937; AVX2-NEXT:    andb $1, %al
1938; AVX2-NEXT:    movb %al, (%rdi)
1939; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
1940; AVX2-NEXT:    andb $1, %al
1941; AVX2-NEXT:    movb %al, (%rdi)
1942; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
1943; AVX2-NEXT:    andb $1, %al
1944; AVX2-NEXT:    movb %al, (%rdi)
1945; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
1946; AVX2-NEXT:    andb $1, %al
1947; AVX2-NEXT:    movb %al, (%rdi)
1948; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
1949; AVX2-NEXT:    andb $1, %al
1950; AVX2-NEXT:    movb %al, (%rdi)
1951; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
1952; AVX2-NEXT:    andb $1, %al
1953; AVX2-NEXT:    movb %al, (%rdi)
1954; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
1955; AVX2-NEXT:    andb $1, %al
1956; AVX2-NEXT:    movb %al, (%rdi)
1957; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
1958; AVX2-NEXT:    andb $1, %al
1959; AVX2-NEXT:    movb %al, (%rdi)
1960; AVX2-NEXT:    movq %rdi, %rax
1961; AVX2-NEXT:    vzeroupper
1962; AVX2-NEXT:    retq
1963;
1964; AVX512F-LABEL: test_cmp_v64i8:
1965; AVX512F:       # BB#0:
1966; AVX512F-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm4
1967; AVX512F-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
1968; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1
1969; AVX512F-NEXT:    vextracti128 $1, %ymm4, %xmm3
1970; AVX512F-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1971; AVX512F-NEXT:    vmovdqa %xmm4, %xmm2
1972; AVX512F-NEXT:    retq
1973;
1974; AVX512DQ-LABEL: test_cmp_v64i8:
1975; AVX512DQ:       # BB#0:
1976; AVX512DQ-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm4
1977; AVX512DQ-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
1978; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm1
1979; AVX512DQ-NEXT:    vextracti128 $1, %ymm4, %xmm3
1980; AVX512DQ-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1981; AVX512DQ-NEXT:    vmovdqa %xmm4, %xmm2
1982; AVX512DQ-NEXT:    retq
1983;
1984; AVX512BW-LABEL: test_cmp_v64i8:
1985; AVX512BW:       # BB#0:
1986; AVX512BW-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0
1987; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
1988; AVX512BW-NEXT:    retq
1989  %1 = icmp sgt <64 x i8> %a0, %a1
1990  ret <64 x i1> %1
1991}
1992
1993;
1994; 1024-bit vector comparisons
1995;
1996
1997define <16 x i1> @test_cmp_v16f64(<16 x double> %a0, <16 x double> %a1) nounwind {
1998; SSE-LABEL: test_cmp_v16f64:
1999; SSE:       # BB#0:
2000; SSE-NEXT:    movapd %xmm0, %xmm8
2001; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
2002; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm11
2003; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm10
2004; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm12
2005; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm9
2006; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm13
2007; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm14
2008; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm15
2009; SSE-NEXT:    cmpltpd %xmm7, %xmm15
2010; SSE-NEXT:    cmpltpd %xmm6, %xmm14
2011; SSE-NEXT:    packsswb %xmm15, %xmm14
2012; SSE-NEXT:    cmpltpd %xmm5, %xmm13
2013; SSE-NEXT:    cmpltpd %xmm4, %xmm9
2014; SSE-NEXT:    packsswb %xmm13, %xmm9
2015; SSE-NEXT:    packsswb %xmm14, %xmm9
2016; SSE-NEXT:    cmpltpd %xmm3, %xmm12
2017; SSE-NEXT:    cmpltpd %xmm2, %xmm10
2018; SSE-NEXT:    packsswb %xmm12, %xmm10
2019; SSE-NEXT:    cmpltpd %xmm1, %xmm11
2020; SSE-NEXT:    cmpltpd %xmm8, %xmm0
2021; SSE-NEXT:    packsswb %xmm11, %xmm0
2022; SSE-NEXT:    packsswb %xmm10, %xmm0
2023; SSE-NEXT:    packsswb %xmm9, %xmm0
2024; SSE-NEXT:    retq
2025;
2026; AVX1-LABEL: test_cmp_v16f64:
2027; AVX1:       # BB#0:
2028; AVX1-NEXT:    vcmpltpd %ymm3, %ymm7, %ymm3
2029; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
2030; AVX1-NEXT:    vpacksswb %xmm7, %xmm3, %xmm3
2031; AVX1-NEXT:    vcmpltpd %ymm2, %ymm6, %ymm2
2032; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
2033; AVX1-NEXT:    vpacksswb %xmm6, %xmm2, %xmm2
2034; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
2035; AVX1-NEXT:    vcmpltpd %ymm1, %ymm5, %ymm1
2036; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
2037; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
2038; AVX1-NEXT:    vcmpltpd %ymm0, %ymm4, %ymm0
2039; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2040; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
2041; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2042; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
2043; AVX1-NEXT:    vzeroupper
2044; AVX1-NEXT:    retq
2045;
2046; AVX2-LABEL: test_cmp_v16f64:
2047; AVX2:       # BB#0:
2048; AVX2-NEXT:    vcmpltpd %ymm3, %ymm7, %ymm3
2049; AVX2-NEXT:    vcmpltpd %ymm2, %ymm6, %ymm2
2050; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
2051; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2052; AVX2-NEXT:    vcmpltpd %ymm1, %ymm5, %ymm1
2053; AVX2-NEXT:    vcmpltpd %ymm0, %ymm4, %ymm0
2054; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
2055; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2056; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
2057; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2058; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2059; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2060; AVX2-NEXT:    vzeroupper
2061; AVX2-NEXT:    retq
2062;
2063; AVX512F-LABEL: test_cmp_v16f64:
2064; AVX512F:       # BB#0:
2065; AVX512F-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2066; AVX512F-NEXT:    vextractf32x4 $3, %zmm0, %xmm5
2067; AVX512F-NEXT:    xorl %eax, %eax
2068; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2069; AVX512F-NEXT:    movq $-1, %rcx
2070; AVX512F-NEXT:    movl $0, %edx
2071; AVX512F-NEXT:    cmovaq %rcx, %rdx
2072; AVX512F-NEXT:    vmovq %rdx, %xmm6
2073; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2074; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2075; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2076; AVX512F-NEXT:    movl $0, %edx
2077; AVX512F-NEXT:    cmovaq %rcx, %rdx
2078; AVX512F-NEXT:    vmovq %rdx, %xmm4
2079; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2080; AVX512F-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2081; AVX512F-NEXT:    vextractf32x4 $2, %zmm0, %xmm6
2082; AVX512F-NEXT:    vucomisd %xmm5, %xmm6
2083; AVX512F-NEXT:    movl $0, %edx
2084; AVX512F-NEXT:    cmovaq %rcx, %rdx
2085; AVX512F-NEXT:    vmovq %rdx, %xmm7
2086; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2087; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2088; AVX512F-NEXT:    vucomisd %xmm5, %xmm6
2089; AVX512F-NEXT:    movl $0, %edx
2090; AVX512F-NEXT:    cmovaq %rcx, %rdx
2091; AVX512F-NEXT:    vmovq %rdx, %xmm5
2092; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2093; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
2094; AVX512F-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
2095; AVX512F-NEXT:    vextractf32x4 $1, %zmm0, %xmm6
2096; AVX512F-NEXT:    vucomisd %xmm5, %xmm6
2097; AVX512F-NEXT:    movl $0, %edx
2098; AVX512F-NEXT:    cmovaq %rcx, %rdx
2099; AVX512F-NEXT:    vmovq %rdx, %xmm7
2100; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2101; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2102; AVX512F-NEXT:    vucomisd %xmm5, %xmm6
2103; AVX512F-NEXT:    movl $0, %edx
2104; AVX512F-NEXT:    cmovaq %rcx, %rdx
2105; AVX512F-NEXT:    vmovq %rdx, %xmm5
2106; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2107; AVX512F-NEXT:    vucomisd %xmm2, %xmm0
2108; AVX512F-NEXT:    movl $0, %edx
2109; AVX512F-NEXT:    cmovaq %rcx, %rdx
2110; AVX512F-NEXT:    vmovq %rdx, %xmm6
2111; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2112; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2113; AVX512F-NEXT:    vucomisd %xmm2, %xmm0
2114; AVX512F-NEXT:    movl $0, %edx
2115; AVX512F-NEXT:    cmovaq %rcx, %rdx
2116; AVX512F-NEXT:    vmovq %rdx, %xmm0
2117; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm6[0],xmm0[0]
2118; AVX512F-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
2119; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
2120; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
2121; AVX512F-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
2122; AVX512F-NEXT:    vextractf32x4 $3, %zmm1, %xmm4
2123; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
2124; AVX512F-NEXT:    movl $0, %edx
2125; AVX512F-NEXT:    cmovaq %rcx, %rdx
2126; AVX512F-NEXT:    vmovq %rdx, %xmm5
2127; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2128; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2129; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
2130; AVX512F-NEXT:    movl $0, %edx
2131; AVX512F-NEXT:    cmovaq %rcx, %rdx
2132; AVX512F-NEXT:    vmovq %rdx, %xmm2
2133; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
2134; AVX512F-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
2135; AVX512F-NEXT:    vextractf32x4 $2, %zmm1, %xmm5
2136; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2137; AVX512F-NEXT:    movl $0, %edx
2138; AVX512F-NEXT:    cmovaq %rcx, %rdx
2139; AVX512F-NEXT:    vmovq %rdx, %xmm6
2140; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2141; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2142; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2143; AVX512F-NEXT:    movl $0, %edx
2144; AVX512F-NEXT:    cmovaq %rcx, %rdx
2145; AVX512F-NEXT:    vmovq %rdx, %xmm4
2146; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2147; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
2148; AVX512F-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
2149; AVX512F-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
2150; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2151; AVX512F-NEXT:    movl $0, %edx
2152; AVX512F-NEXT:    cmovaq %rcx, %rdx
2153; AVX512F-NEXT:    vmovq %rdx, %xmm6
2154; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2155; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2156; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
2157; AVX512F-NEXT:    movl $0, %edx
2158; AVX512F-NEXT:    cmovaq %rcx, %rdx
2159; AVX512F-NEXT:    vmovq %rdx, %xmm4
2160; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2161; AVX512F-NEXT:    vucomisd %xmm3, %xmm1
2162; AVX512F-NEXT:    movl $0, %edx
2163; AVX512F-NEXT:    cmovaq %rcx, %rdx
2164; AVX512F-NEXT:    vmovq %rdx, %xmm5
2165; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
2166; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
2167; AVX512F-NEXT:    vucomisd %xmm3, %xmm1
2168; AVX512F-NEXT:    cmovaq %rcx, %rax
2169; AVX512F-NEXT:    vmovq %rax, %xmm1
2170; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
2171; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
2172; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
2173; AVX512F-NEXT:    vpmovqd %zmm1, %ymm1
2174; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2175; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
2176; AVX512F-NEXT:    retq
2177;
2178; AVX512DQ-LABEL: test_cmp_v16f64:
2179; AVX512DQ:       # BB#0:
2180; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm2, %xmm4
2181; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm0, %xmm5
2182; AVX512DQ-NEXT:    xorl %eax, %eax
2183; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2184; AVX512DQ-NEXT:    movq $-1, %rcx
2185; AVX512DQ-NEXT:    movl $0, %edx
2186; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2187; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
2188; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2189; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2190; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2191; AVX512DQ-NEXT:    movl $0, %edx
2192; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2193; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
2194; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2195; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm2, %xmm5
2196; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm0, %xmm6
2197; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm6
2198; AVX512DQ-NEXT:    movl $0, %edx
2199; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2200; AVX512DQ-NEXT:    vmovq %rdx, %xmm7
2201; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2202; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2203; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm6
2204; AVX512DQ-NEXT:    movl $0, %edx
2205; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2206; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
2207; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2208; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
2209; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm2, %xmm5
2210; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm0, %xmm6
2211; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm6
2212; AVX512DQ-NEXT:    movl $0, %edx
2213; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2214; AVX512DQ-NEXT:    vmovq %rdx, %xmm7
2215; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2216; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2217; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm6
2218; AVX512DQ-NEXT:    movl $0, %edx
2219; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2220; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
2221; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2222; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm0
2223; AVX512DQ-NEXT:    movl $0, %edx
2224; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2225; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
2226; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2227; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2228; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm0
2229; AVX512DQ-NEXT:    movl $0, %edx
2230; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2231; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
2232; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm6[0],xmm0[0]
2233; AVX512DQ-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
2234; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
2235; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
2236; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm3, %xmm2
2237; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm1, %xmm4
2238; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
2239; AVX512DQ-NEXT:    movl $0, %edx
2240; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2241; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
2242; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2243; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2244; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
2245; AVX512DQ-NEXT:    movl $0, %edx
2246; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2247; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
2248; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
2249; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm3, %xmm4
2250; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm1, %xmm5
2251; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2252; AVX512DQ-NEXT:    movl $0, %edx
2253; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2254; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
2255; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2256; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2257; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2258; AVX512DQ-NEXT:    movl $0, %edx
2259; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2260; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
2261; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2262; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
2263; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm3, %xmm4
2264; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm1, %xmm5
2265; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2266; AVX512DQ-NEXT:    movl $0, %edx
2267; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2268; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
2269; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2270; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2271; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
2272; AVX512DQ-NEXT:    movl $0, %edx
2273; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2274; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
2275; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2276; AVX512DQ-NEXT:    vucomisd %xmm3, %xmm1
2277; AVX512DQ-NEXT:    movl $0, %edx
2278; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
2279; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
2280; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
2281; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
2282; AVX512DQ-NEXT:    vucomisd %xmm3, %xmm1
2283; AVX512DQ-NEXT:    cmovaq %rcx, %rax
2284; AVX512DQ-NEXT:    vmovq %rax, %xmm1
2285; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
2286; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
2287; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
2288; AVX512DQ-NEXT:    vpmovqd %zmm1, %ymm1
2289; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm1, %zmm0, %zmm0
2290; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
2291; AVX512DQ-NEXT:    retq
2292;
2293; AVX512BW-LABEL: test_cmp_v16f64:
2294; AVX512BW:       # BB#0:
2295; AVX512BW-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2296; AVX512BW-NEXT:    vextractf32x4 $3, %zmm0, %xmm5
2297; AVX512BW-NEXT:    xorl %eax, %eax
2298; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2299; AVX512BW-NEXT:    movq $-1, %rcx
2300; AVX512BW-NEXT:    movl $0, %edx
2301; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2302; AVX512BW-NEXT:    vmovq %rdx, %xmm6
2303; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2304; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2305; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2306; AVX512BW-NEXT:    movl $0, %edx
2307; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2308; AVX512BW-NEXT:    vmovq %rdx, %xmm4
2309; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2310; AVX512BW-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2311; AVX512BW-NEXT:    vextractf32x4 $2, %zmm0, %xmm6
2312; AVX512BW-NEXT:    vucomisd %xmm5, %xmm6
2313; AVX512BW-NEXT:    movl $0, %edx
2314; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2315; AVX512BW-NEXT:    vmovq %rdx, %xmm7
2316; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2317; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2318; AVX512BW-NEXT:    vucomisd %xmm5, %xmm6
2319; AVX512BW-NEXT:    movl $0, %edx
2320; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2321; AVX512BW-NEXT:    vmovq %rdx, %xmm5
2322; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2323; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
2324; AVX512BW-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
2325; AVX512BW-NEXT:    vextractf32x4 $1, %zmm0, %xmm6
2326; AVX512BW-NEXT:    vucomisd %xmm5, %xmm6
2327; AVX512BW-NEXT:    movl $0, %edx
2328; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2329; AVX512BW-NEXT:    vmovq %rdx, %xmm7
2330; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2331; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2332; AVX512BW-NEXT:    vucomisd %xmm5, %xmm6
2333; AVX512BW-NEXT:    movl $0, %edx
2334; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2335; AVX512BW-NEXT:    vmovq %rdx, %xmm5
2336; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2337; AVX512BW-NEXT:    vucomisd %xmm2, %xmm0
2338; AVX512BW-NEXT:    movl $0, %edx
2339; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2340; AVX512BW-NEXT:    vmovq %rdx, %xmm6
2341; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2342; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2343; AVX512BW-NEXT:    vucomisd %xmm2, %xmm0
2344; AVX512BW-NEXT:    movl $0, %edx
2345; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2346; AVX512BW-NEXT:    vmovq %rdx, %xmm0
2347; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm6[0],xmm0[0]
2348; AVX512BW-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
2349; AVX512BW-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
2350; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
2351; AVX512BW-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
2352; AVX512BW-NEXT:    vextractf32x4 $3, %zmm1, %xmm4
2353; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
2354; AVX512BW-NEXT:    movl $0, %edx
2355; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2356; AVX512BW-NEXT:    vmovq %rdx, %xmm5
2357; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2358; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2359; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
2360; AVX512BW-NEXT:    movl $0, %edx
2361; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2362; AVX512BW-NEXT:    vmovq %rdx, %xmm2
2363; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
2364; AVX512BW-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
2365; AVX512BW-NEXT:    vextractf32x4 $2, %zmm1, %xmm5
2366; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2367; AVX512BW-NEXT:    movl $0, %edx
2368; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2369; AVX512BW-NEXT:    vmovq %rdx, %xmm6
2370; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2371; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2372; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2373; AVX512BW-NEXT:    movl $0, %edx
2374; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2375; AVX512BW-NEXT:    vmovq %rdx, %xmm4
2376; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2377; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
2378; AVX512BW-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
2379; AVX512BW-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
2380; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2381; AVX512BW-NEXT:    movl $0, %edx
2382; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2383; AVX512BW-NEXT:    vmovq %rdx, %xmm6
2384; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2385; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2386; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
2387; AVX512BW-NEXT:    movl $0, %edx
2388; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2389; AVX512BW-NEXT:    vmovq %rdx, %xmm4
2390; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2391; AVX512BW-NEXT:    vucomisd %xmm3, %xmm1
2392; AVX512BW-NEXT:    movl $0, %edx
2393; AVX512BW-NEXT:    cmovaq %rcx, %rdx
2394; AVX512BW-NEXT:    vmovq %rdx, %xmm5
2395; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
2396; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
2397; AVX512BW-NEXT:    vucomisd %xmm3, %xmm1
2398; AVX512BW-NEXT:    cmovaq %rcx, %rax
2399; AVX512BW-NEXT:    vmovq %rax, %xmm1
2400; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
2401; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
2402; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
2403; AVX512BW-NEXT:    vpmovqd %zmm1, %ymm1
2404; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2405; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0
2406; AVX512BW-NEXT:    retq
2407  %1 = fcmp ogt <16 x double> %a0, %a1
2408  ret <16 x i1> %1
2409}
2410
2411define <32 x i1> @test_cmp_v32f32(<32 x float> %a0, <32 x float> %a1) nounwind {
2412; SSE2-LABEL: test_cmp_v32f32:
2413; SSE2:       # BB#0:
2414; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
2415; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
2416; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
2417; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
2418; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
2419; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
2420; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
2421; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
2422; SSE2-NEXT:    cmpltps %xmm3, %xmm15
2423; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm15[0,2,2,3,4,5,6,7]
2424; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
2425; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
2426; SSE2-NEXT:    cmpltps %xmm2, %xmm14
2427; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm14[0,2,2,3,4,5,6,7]
2428; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
2429; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2430; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
2431; SSE2-NEXT:    psllw $15, %xmm2
2432; SSE2-NEXT:    psraw $15, %xmm2
2433; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
2434; SSE2-NEXT:    pand %xmm3, %xmm2
2435; SSE2-NEXT:    cmpltps %xmm1, %xmm13
2436; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm13[0,2,2,3,4,5,6,7]
2437; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2438; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2439; SSE2-NEXT:    cmpltps %xmm0, %xmm12
2440; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm12[0,2,2,3,4,5,6,7]
2441; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
2442; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2443; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2444; SSE2-NEXT:    psllw $15, %xmm0
2445; SSE2-NEXT:    psraw $15, %xmm0
2446; SSE2-NEXT:    pand %xmm3, %xmm0
2447; SSE2-NEXT:    packuswb %xmm2, %xmm0
2448; SSE2-NEXT:    cmpltps %xmm7, %xmm11
2449; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm11[0,2,2,3,4,5,6,7]
2450; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2451; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2452; SSE2-NEXT:    cmpltps %xmm6, %xmm10
2453; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm10[0,2,2,3,4,5,6,7]
2454; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
2455; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2456; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
2457; SSE2-NEXT:    psllw $15, %xmm2
2458; SSE2-NEXT:    psraw $15, %xmm2
2459; SSE2-NEXT:    pand %xmm3, %xmm2
2460; SSE2-NEXT:    cmpltps %xmm5, %xmm9
2461; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm9[0,2,2,3,4,5,6,7]
2462; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2463; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2464; SSE2-NEXT:    cmpltps %xmm4, %xmm8
2465; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm8[0,2,2,3,4,5,6,7]
2466; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
2467; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
2468; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm1[0]
2469; SSE2-NEXT:    psllw $15, %xmm4
2470; SSE2-NEXT:    psraw $15, %xmm4
2471; SSE2-NEXT:    pand %xmm3, %xmm4
2472; SSE2-NEXT:    packuswb %xmm2, %xmm4
2473; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
2474; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2475; SSE2-NEXT:    andb $1, %al
2476; SSE2-NEXT:    movb %al, 2(%rdi)
2477; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
2478; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2479; SSE2-NEXT:    andb $1, %al
2480; SSE2-NEXT:    movb %al, (%rdi)
2481; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2482; SSE2-NEXT:    andb $1, %al
2483; SSE2-NEXT:    movb %al, 2(%rdi)
2484; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2485; SSE2-NEXT:    andb $1, %al
2486; SSE2-NEXT:    movb %al, (%rdi)
2487; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2488; SSE2-NEXT:    andb $1, %al
2489; SSE2-NEXT:    movb %al, 2(%rdi)
2490; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2491; SSE2-NEXT:    andb $1, %al
2492; SSE2-NEXT:    movb %al, (%rdi)
2493; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2494; SSE2-NEXT:    andb $1, %al
2495; SSE2-NEXT:    movb %al, 2(%rdi)
2496; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2497; SSE2-NEXT:    andb $1, %al
2498; SSE2-NEXT:    movb %al, (%rdi)
2499; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2500; SSE2-NEXT:    andb $1, %al
2501; SSE2-NEXT:    movb %al, 2(%rdi)
2502; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2503; SSE2-NEXT:    andb $1, %al
2504; SSE2-NEXT:    movb %al, (%rdi)
2505; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2506; SSE2-NEXT:    andb $1, %al
2507; SSE2-NEXT:    movb %al, 2(%rdi)
2508; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2509; SSE2-NEXT:    andb $1, %al
2510; SSE2-NEXT:    movb %al, (%rdi)
2511; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2512; SSE2-NEXT:    andb $1, %al
2513; SSE2-NEXT:    movb %al, 2(%rdi)
2514; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2515; SSE2-NEXT:    andb $1, %al
2516; SSE2-NEXT:    movb %al, (%rdi)
2517; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2518; SSE2-NEXT:    andb $1, %al
2519; SSE2-NEXT:    movb %al, 2(%rdi)
2520; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2521; SSE2-NEXT:    andb $1, %al
2522; SSE2-NEXT:    movb %al, (%rdi)
2523; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2524; SSE2-NEXT:    andb $1, %al
2525; SSE2-NEXT:    movb %al, 2(%rdi)
2526; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2527; SSE2-NEXT:    andb $1, %al
2528; SSE2-NEXT:    movb %al, (%rdi)
2529; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2530; SSE2-NEXT:    andb $1, %al
2531; SSE2-NEXT:    movb %al, 2(%rdi)
2532; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2533; SSE2-NEXT:    andb $1, %al
2534; SSE2-NEXT:    movb %al, (%rdi)
2535; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2536; SSE2-NEXT:    andb $1, %al
2537; SSE2-NEXT:    movb %al, 2(%rdi)
2538; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2539; SSE2-NEXT:    andb $1, %al
2540; SSE2-NEXT:    movb %al, (%rdi)
2541; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2542; SSE2-NEXT:    andb $1, %al
2543; SSE2-NEXT:    movb %al, 2(%rdi)
2544; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2545; SSE2-NEXT:    andb $1, %al
2546; SSE2-NEXT:    movb %al, (%rdi)
2547; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2548; SSE2-NEXT:    andb $1, %al
2549; SSE2-NEXT:    movb %al, 2(%rdi)
2550; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2551; SSE2-NEXT:    andb $1, %al
2552; SSE2-NEXT:    movb %al, (%rdi)
2553; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2554; SSE2-NEXT:    andb $1, %al
2555; SSE2-NEXT:    movb %al, 2(%rdi)
2556; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2557; SSE2-NEXT:    andb $1, %al
2558; SSE2-NEXT:    movb %al, (%rdi)
2559; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2560; SSE2-NEXT:    andb $1, %al
2561; SSE2-NEXT:    movb %al, 2(%rdi)
2562; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2563; SSE2-NEXT:    andb $1, %al
2564; SSE2-NEXT:    movb %al, (%rdi)
2565; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2566; SSE2-NEXT:    andb $1, %al
2567; SSE2-NEXT:    movb %al, 2(%rdi)
2568; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2569; SSE2-NEXT:    andb $1, %al
2570; SSE2-NEXT:    movb %al, (%rdi)
2571; SSE2-NEXT:    movq %rdi, %rax
2572; SSE2-NEXT:    retq
2573;
2574; SSE42-LABEL: test_cmp_v32f32:
2575; SSE42:       # BB#0:
2576; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
2577; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
2578; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
2579; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
2580; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
2581; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
2582; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
2583; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
2584; SSE42-NEXT:    cmpltps %xmm3, %xmm15
2585; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2586; SSE42-NEXT:    pshufb %xmm3, %xmm15
2587; SSE42-NEXT:    cmpltps %xmm2, %xmm13
2588; SSE42-NEXT:    pshufb %xmm3, %xmm13
2589; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm13 = xmm13[0],xmm15[0]
2590; SSE42-NEXT:    psllw $15, %xmm13
2591; SSE42-NEXT:    psraw $15, %xmm13
2592; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2593; SSE42-NEXT:    pshufb %xmm2, %xmm13
2594; SSE42-NEXT:    cmpltps %xmm1, %xmm14
2595; SSE42-NEXT:    pshufb %xmm3, %xmm14
2596; SSE42-NEXT:    cmpltps %xmm0, %xmm8
2597; SSE42-NEXT:    pshufb %xmm3, %xmm8
2598; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm14[0]
2599; SSE42-NEXT:    psllw $15, %xmm8
2600; SSE42-NEXT:    psraw $15, %xmm8
2601; SSE42-NEXT:    pshufb %xmm2, %xmm8
2602; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm13[0]
2603; SSE42-NEXT:    cmpltps %xmm7, %xmm12
2604; SSE42-NEXT:    pshufb %xmm3, %xmm12
2605; SSE42-NEXT:    cmpltps %xmm6, %xmm10
2606; SSE42-NEXT:    pshufb %xmm3, %xmm10
2607; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm10 = xmm10[0],xmm12[0]
2608; SSE42-NEXT:    psllw $15, %xmm10
2609; SSE42-NEXT:    psraw $15, %xmm10
2610; SSE42-NEXT:    pshufb %xmm2, %xmm10
2611; SSE42-NEXT:    cmpltps %xmm5, %xmm11
2612; SSE42-NEXT:    pshufb %xmm3, %xmm11
2613; SSE42-NEXT:    cmpltps %xmm4, %xmm9
2614; SSE42-NEXT:    pshufb %xmm3, %xmm9
2615; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
2616; SSE42-NEXT:    psllw $15, %xmm9
2617; SSE42-NEXT:    psraw $15, %xmm9
2618; SSE42-NEXT:    pshufb %xmm2, %xmm9
2619; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm10[0]
2620; SSE42-NEXT:    pextrb $15, %xmm9, %eax
2621; SSE42-NEXT:    andb $1, %al
2622; SSE42-NEXT:    movb %al, 2(%rdi)
2623; SSE42-NEXT:    pextrb $14, %xmm9, %eax
2624; SSE42-NEXT:    andb $1, %al
2625; SSE42-NEXT:    movb %al, 2(%rdi)
2626; SSE42-NEXT:    pextrb $13, %xmm9, %eax
2627; SSE42-NEXT:    andb $1, %al
2628; SSE42-NEXT:    movb %al, 2(%rdi)
2629; SSE42-NEXT:    pextrb $12, %xmm9, %eax
2630; SSE42-NEXT:    andb $1, %al
2631; SSE42-NEXT:    movb %al, 2(%rdi)
2632; SSE42-NEXT:    pextrb $11, %xmm9, %eax
2633; SSE42-NEXT:    andb $1, %al
2634; SSE42-NEXT:    movb %al, 2(%rdi)
2635; SSE42-NEXT:    pextrb $10, %xmm9, %eax
2636; SSE42-NEXT:    andb $1, %al
2637; SSE42-NEXT:    movb %al, 2(%rdi)
2638; SSE42-NEXT:    pextrb $9, %xmm9, %eax
2639; SSE42-NEXT:    andb $1, %al
2640; SSE42-NEXT:    movb %al, 2(%rdi)
2641; SSE42-NEXT:    pextrb $8, %xmm9, %eax
2642; SSE42-NEXT:    andb $1, %al
2643; SSE42-NEXT:    movb %al, 2(%rdi)
2644; SSE42-NEXT:    pextrb $7, %xmm9, %eax
2645; SSE42-NEXT:    andb $1, %al
2646; SSE42-NEXT:    movb %al, 2(%rdi)
2647; SSE42-NEXT:    pextrb $6, %xmm9, %eax
2648; SSE42-NEXT:    andb $1, %al
2649; SSE42-NEXT:    movb %al, 2(%rdi)
2650; SSE42-NEXT:    pextrb $5, %xmm9, %eax
2651; SSE42-NEXT:    andb $1, %al
2652; SSE42-NEXT:    movb %al, 2(%rdi)
2653; SSE42-NEXT:    pextrb $4, %xmm9, %eax
2654; SSE42-NEXT:    andb $1, %al
2655; SSE42-NEXT:    movb %al, 2(%rdi)
2656; SSE42-NEXT:    pextrb $3, %xmm9, %eax
2657; SSE42-NEXT:    andb $1, %al
2658; SSE42-NEXT:    movb %al, 2(%rdi)
2659; SSE42-NEXT:    pextrb $2, %xmm9, %eax
2660; SSE42-NEXT:    andb $1, %al
2661; SSE42-NEXT:    movb %al, 2(%rdi)
2662; SSE42-NEXT:    pextrb $1, %xmm9, %eax
2663; SSE42-NEXT:    andb $1, %al
2664; SSE42-NEXT:    movb %al, 2(%rdi)
2665; SSE42-NEXT:    pextrb $0, %xmm9, %eax
2666; SSE42-NEXT:    andb $1, %al
2667; SSE42-NEXT:    movb %al, 2(%rdi)
2668; SSE42-NEXT:    pextrb $15, %xmm8, %eax
2669; SSE42-NEXT:    andb $1, %al
2670; SSE42-NEXT:    movb %al, (%rdi)
2671; SSE42-NEXT:    pextrb $14, %xmm8, %eax
2672; SSE42-NEXT:    andb $1, %al
2673; SSE42-NEXT:    movb %al, (%rdi)
2674; SSE42-NEXT:    pextrb $13, %xmm8, %eax
2675; SSE42-NEXT:    andb $1, %al
2676; SSE42-NEXT:    movb %al, (%rdi)
2677; SSE42-NEXT:    pextrb $12, %xmm8, %eax
2678; SSE42-NEXT:    andb $1, %al
2679; SSE42-NEXT:    movb %al, (%rdi)
2680; SSE42-NEXT:    pextrb $11, %xmm8, %eax
2681; SSE42-NEXT:    andb $1, %al
2682; SSE42-NEXT:    movb %al, (%rdi)
2683; SSE42-NEXT:    pextrb $10, %xmm8, %eax
2684; SSE42-NEXT:    andb $1, %al
2685; SSE42-NEXT:    movb %al, (%rdi)
2686; SSE42-NEXT:    pextrb $9, %xmm8, %eax
2687; SSE42-NEXT:    andb $1, %al
2688; SSE42-NEXT:    movb %al, (%rdi)
2689; SSE42-NEXT:    pextrb $8, %xmm8, %eax
2690; SSE42-NEXT:    andb $1, %al
2691; SSE42-NEXT:    movb %al, (%rdi)
2692; SSE42-NEXT:    pextrb $7, %xmm8, %eax
2693; SSE42-NEXT:    andb $1, %al
2694; SSE42-NEXT:    movb %al, (%rdi)
2695; SSE42-NEXT:    pextrb $6, %xmm8, %eax
2696; SSE42-NEXT:    andb $1, %al
2697; SSE42-NEXT:    movb %al, (%rdi)
2698; SSE42-NEXT:    pextrb $5, %xmm8, %eax
2699; SSE42-NEXT:    andb $1, %al
2700; SSE42-NEXT:    movb %al, (%rdi)
2701; SSE42-NEXT:    pextrb $4, %xmm8, %eax
2702; SSE42-NEXT:    andb $1, %al
2703; SSE42-NEXT:    movb %al, (%rdi)
2704; SSE42-NEXT:    pextrb $3, %xmm8, %eax
2705; SSE42-NEXT:    andb $1, %al
2706; SSE42-NEXT:    movb %al, (%rdi)
2707; SSE42-NEXT:    pextrb $2, %xmm8, %eax
2708; SSE42-NEXT:    andb $1, %al
2709; SSE42-NEXT:    movb %al, (%rdi)
2710; SSE42-NEXT:    pextrb $1, %xmm8, %eax
2711; SSE42-NEXT:    andb $1, %al
2712; SSE42-NEXT:    movb %al, (%rdi)
2713; SSE42-NEXT:    pextrb $0, %xmm8, %eax
2714; SSE42-NEXT:    andb $1, %al
2715; SSE42-NEXT:    movb %al, (%rdi)
2716; SSE42-NEXT:    movq %rdi, %rax
2717; SSE42-NEXT:    retq
2718;
2719; AVX1-LABEL: test_cmp_v32f32:
2720; AVX1:       # BB#0:
2721; AVX1-NEXT:    vcmpltps %ymm3, %ymm7, %ymm3
2722; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
2723; AVX1-NEXT:    vpacksswb %xmm7, %xmm3, %xmm3
2724; AVX1-NEXT:    vcmpltps %ymm2, %ymm6, %ymm2
2725; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
2726; AVX1-NEXT:    vpacksswb %xmm6, %xmm2, %xmm2
2727; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
2728; AVX1-NEXT:    vcmpltps %ymm1, %ymm5, %ymm1
2729; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
2730; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
2731; AVX1-NEXT:    vcmpltps %ymm0, %ymm4, %ymm0
2732; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2733; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
2734; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2735; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2736; AVX1-NEXT:    retq
2737;
2738; AVX2-LABEL: test_cmp_v32f32:
2739; AVX2:       # BB#0:
2740; AVX2-NEXT:    vcmpltps %ymm3, %ymm7, %ymm3
2741; AVX2-NEXT:    vcmpltps %ymm2, %ymm6, %ymm2
2742; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
2743; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2744; AVX2-NEXT:    vcmpltps %ymm1, %ymm5, %ymm1
2745; AVX2-NEXT:    vcmpltps %ymm0, %ymm4, %ymm0
2746; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
2747; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2748; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
2749; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2750; AVX2-NEXT:    retq
2751;
2752; AVX512F-LABEL: test_cmp_v32f32:
2753; AVX512F:       # BB#0:
2754; AVX512F-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2755; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
2756; AVX512F-NEXT:    vextractf32x4 $3, %zmm0, %xmm6
2757; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
2758; AVX512F-NEXT:    xorl %eax, %eax
2759; AVX512F-NEXT:    vucomiss %xmm5, %xmm7
2760; AVX512F-NEXT:    movl $-1, %ecx
2761; AVX512F-NEXT:    movl $0, %edx
2762; AVX512F-NEXT:    cmoval %ecx, %edx
2763; AVX512F-NEXT:    vucomiss %xmm4, %xmm6
2764; AVX512F-NEXT:    movl $0, %esi
2765; AVX512F-NEXT:    cmoval %ecx, %esi
2766; AVX512F-NEXT:    vmovd %esi, %xmm5
2767; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm8
2768; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
2769; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
2770; AVX512F-NEXT:    vucomiss %xmm7, %xmm5
2771; AVX512F-NEXT:    movl $0, %edx
2772; AVX512F-NEXT:    cmoval %ecx, %edx
2773; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm8, %xmm5
2774; AVX512F-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
2775; AVX512F-NEXT:    vpermilps {{.*#+}} xmm6 = xmm6[3,1,2,3]
2776; AVX512F-NEXT:    vucomiss %xmm4, %xmm6
2777; AVX512F-NEXT:    movl $0, %edx
2778; AVX512F-NEXT:    cmoval %ecx, %edx
2779; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm8
2780; AVX512F-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2781; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2782; AVX512F-NEXT:    vextractf32x4 $2, %zmm0, %xmm7
2783; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2784; AVX512F-NEXT:    vucomiss %xmm6, %xmm4
2785; AVX512F-NEXT:    movl $0, %edx
2786; AVX512F-NEXT:    cmoval %ecx, %edx
2787; AVX512F-NEXT:    vucomiss %xmm5, %xmm7
2788; AVX512F-NEXT:    movl $0, %esi
2789; AVX512F-NEXT:    cmoval %ecx, %esi
2790; AVX512F-NEXT:    vmovd %esi, %xmm4
2791; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
2792; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
2793; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
2794; AVX512F-NEXT:    vucomiss %xmm6, %xmm4
2795; AVX512F-NEXT:    movl $0, %edx
2796; AVX512F-NEXT:    cmoval %ecx, %edx
2797; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
2798; AVX512F-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2799; AVX512F-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
2800; AVX512F-NEXT:    vucomiss %xmm5, %xmm6
2801; AVX512F-NEXT:    movl $0, %edx
2802; AVX512F-NEXT:    cmoval %ecx, %edx
2803; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
2804; AVX512F-NEXT:    vinserti128 $1, %xmm8, %ymm4, %ymm8
2805; AVX512F-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
2806; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2807; AVX512F-NEXT:    vextractf32x4 $1, %zmm0, %xmm7
2808; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2809; AVX512F-NEXT:    vucomiss %xmm6, %xmm4
2810; AVX512F-NEXT:    movl $0, %edx
2811; AVX512F-NEXT:    cmoval %ecx, %edx
2812; AVX512F-NEXT:    vucomiss %xmm5, %xmm7
2813; AVX512F-NEXT:    movl $0, %esi
2814; AVX512F-NEXT:    cmoval %ecx, %esi
2815; AVX512F-NEXT:    vmovd %esi, %xmm4
2816; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
2817; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
2818; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
2819; AVX512F-NEXT:    vucomiss %xmm6, %xmm4
2820; AVX512F-NEXT:    movl $0, %edx
2821; AVX512F-NEXT:    cmoval %ecx, %edx
2822; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
2823; AVX512F-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2824; AVX512F-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
2825; AVX512F-NEXT:    vucomiss %xmm5, %xmm6
2826; AVX512F-NEXT:    movl $0, %edx
2827; AVX512F-NEXT:    cmoval %ecx, %edx
2828; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
2829; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]
2830; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
2831; AVX512F-NEXT:    vucomiss %xmm5, %xmm6
2832; AVX512F-NEXT:    movl $0, %edx
2833; AVX512F-NEXT:    cmoval %ecx, %edx
2834; AVX512F-NEXT:    vucomiss %xmm2, %xmm0
2835; AVX512F-NEXT:    movl $0, %esi
2836; AVX512F-NEXT:    cmoval %ecx, %esi
2837; AVX512F-NEXT:    vmovd %esi, %xmm5
2838; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
2839; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
2840; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm0[1,0]
2841; AVX512F-NEXT:    vucomiss %xmm6, %xmm7
2842; AVX512F-NEXT:    movl $0, %edx
2843; AVX512F-NEXT:    cmoval %ecx, %edx
2844; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
2845; AVX512F-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
2846; AVX512F-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2847; AVX512F-NEXT:    vucomiss %xmm2, %xmm0
2848; AVX512F-NEXT:    movl $0, %edx
2849; AVX512F-NEXT:    cmoval %ecx, %edx
2850; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm0
2851; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
2852; AVX512F-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
2853; AVX512F-NEXT:    vpmovdb %zmm0, %xmm8
2854; AVX512F-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
2855; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]
2856; AVX512F-NEXT:    vextractf32x4 $3, %zmm1, %xmm5
2857; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2858; AVX512F-NEXT:    vucomiss %xmm4, %xmm6
2859; AVX512F-NEXT:    movl $0, %edx
2860; AVX512F-NEXT:    cmoval %ecx, %edx
2861; AVX512F-NEXT:    vucomiss %xmm2, %xmm5
2862; AVX512F-NEXT:    movl $0, %esi
2863; AVX512F-NEXT:    cmoval %ecx, %esi
2864; AVX512F-NEXT:    vmovd %esi, %xmm4
2865; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2866; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
2867; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
2868; AVX512F-NEXT:    vucomiss %xmm6, %xmm7
2869; AVX512F-NEXT:    movl $0, %edx
2870; AVX512F-NEXT:    cmoval %ecx, %edx
2871; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2872; AVX512F-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
2873; AVX512F-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2874; AVX512F-NEXT:    vucomiss %xmm2, %xmm5
2875; AVX512F-NEXT:    movl $0, %edx
2876; AVX512F-NEXT:    cmoval %ecx, %edx
2877; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm2
2878; AVX512F-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
2879; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
2880; AVX512F-NEXT:    vextractf32x4 $2, %zmm1, %xmm6
2881; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
2882; AVX512F-NEXT:    vucomiss %xmm5, %xmm7
2883; AVX512F-NEXT:    movl $0, %edx
2884; AVX512F-NEXT:    cmoval %ecx, %edx
2885; AVX512F-NEXT:    vucomiss %xmm4, %xmm6
2886; AVX512F-NEXT:    movl $0, %esi
2887; AVX512F-NEXT:    cmoval %ecx, %esi
2888; AVX512F-NEXT:    vmovd %esi, %xmm5
2889; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
2890; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
2891; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm6[1,0]
2892; AVX512F-NEXT:    vucomiss %xmm7, %xmm0
2893; AVX512F-NEXT:    movl $0, %edx
2894; AVX512F-NEXT:    cmoval %ecx, %edx
2895; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm0
2896; AVX512F-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
2897; AVX512F-NEXT:    vpermilps {{.*#+}} xmm5 = xmm6[3,1,2,3]
2898; AVX512F-NEXT:    vucomiss %xmm4, %xmm5
2899; AVX512F-NEXT:    movl $0, %edx
2900; AVX512F-NEXT:    cmoval %ecx, %edx
2901; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm0
2902; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2903; AVX512F-NEXT:    vextractf32x4 $1, %zmm3, %xmm0
2904; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
2905; AVX512F-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
2906; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2907; AVX512F-NEXT:    vucomiss %xmm4, %xmm6
2908; AVX512F-NEXT:    movl $0, %edx
2909; AVX512F-NEXT:    cmoval %ecx, %edx
2910; AVX512F-NEXT:    vucomiss %xmm0, %xmm5
2911; AVX512F-NEXT:    movl $0, %esi
2912; AVX512F-NEXT:    cmoval %ecx, %esi
2913; AVX512F-NEXT:    vmovd %esi, %xmm4
2914; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2915; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm0[1,0]
2916; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
2917; AVX512F-NEXT:    vucomiss %xmm6, %xmm7
2918; AVX512F-NEXT:    movl $0, %edx
2919; AVX512F-NEXT:    cmoval %ecx, %edx
2920; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2921; AVX512F-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2922; AVX512F-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2923; AVX512F-NEXT:    vucomiss %xmm0, %xmm5
2924; AVX512F-NEXT:    movl $0, %edx
2925; AVX512F-NEXT:    cmoval %ecx, %edx
2926; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm0
2927; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
2928; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]
2929; AVX512F-NEXT:    vucomiss %xmm4, %xmm5
2930; AVX512F-NEXT:    movl $0, %edx
2931; AVX512F-NEXT:    cmoval %ecx, %edx
2932; AVX512F-NEXT:    vucomiss %xmm3, %xmm1
2933; AVX512F-NEXT:    movl $0, %esi
2934; AVX512F-NEXT:    cmoval %ecx, %esi
2935; AVX512F-NEXT:    vmovd %esi, %xmm4
2936; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2937; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm3[1,0]
2938; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm1[1,0]
2939; AVX512F-NEXT:    vucomiss %xmm5, %xmm6
2940; AVX512F-NEXT:    movl $0, %edx
2941; AVX512F-NEXT:    cmoval %ecx, %edx
2942; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2943; AVX512F-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[3,1,2,3]
2944; AVX512F-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
2945; AVX512F-NEXT:    vucomiss %xmm3, %xmm1
2946; AVX512F-NEXT:    cmoval %ecx, %eax
2947; AVX512F-NEXT:    vpinsrd $3, %eax, %xmm4, %xmm1
2948; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
2949; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
2950; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
2951; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
2952; AVX512F-NEXT:    retq
2953;
2954; AVX512DQ-LABEL: test_cmp_v32f32:
2955; AVX512DQ:       # BB#0:
2956; AVX512DQ-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2957; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
2958; AVX512DQ-NEXT:    vextractf32x4 $3, %zmm0, %xmm6
2959; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
2960; AVX512DQ-NEXT:    xorl %eax, %eax
2961; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm7
2962; AVX512DQ-NEXT:    movl $-1, %ecx
2963; AVX512DQ-NEXT:    movl $0, %edx
2964; AVX512DQ-NEXT:    cmoval %ecx, %edx
2965; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm6
2966; AVX512DQ-NEXT:    movl $0, %esi
2967; AVX512DQ-NEXT:    cmoval %ecx, %esi
2968; AVX512DQ-NEXT:    vmovd %esi, %xmm5
2969; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm8
2970; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
2971; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
2972; AVX512DQ-NEXT:    vucomiss %xmm7, %xmm5
2973; AVX512DQ-NEXT:    movl $0, %edx
2974; AVX512DQ-NEXT:    cmoval %ecx, %edx
2975; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm8, %xmm5
2976; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
2977; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm6 = xmm6[3,1,2,3]
2978; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm6
2979; AVX512DQ-NEXT:    movl $0, %edx
2980; AVX512DQ-NEXT:    cmoval %ecx, %edx
2981; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm8
2982; AVX512DQ-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2983; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2984; AVX512DQ-NEXT:    vextractf32x4 $2, %zmm0, %xmm7
2985; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2986; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm4
2987; AVX512DQ-NEXT:    movl $0, %edx
2988; AVX512DQ-NEXT:    cmoval %ecx, %edx
2989; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm7
2990; AVX512DQ-NEXT:    movl $0, %esi
2991; AVX512DQ-NEXT:    cmoval %ecx, %esi
2992; AVX512DQ-NEXT:    vmovd %esi, %xmm4
2993; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
2994; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
2995; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
2996; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm4
2997; AVX512DQ-NEXT:    movl $0, %edx
2998; AVX512DQ-NEXT:    cmoval %ecx, %edx
2999; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
3000; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3001; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
3002; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm6
3003; AVX512DQ-NEXT:    movl $0, %edx
3004; AVX512DQ-NEXT:    cmoval %ecx, %edx
3005; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
3006; AVX512DQ-NEXT:    vinserti128 $1, %xmm8, %ymm4, %ymm8
3007; AVX512DQ-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
3008; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3009; AVX512DQ-NEXT:    vextractf32x4 $1, %zmm0, %xmm7
3010; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
3011; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm4
3012; AVX512DQ-NEXT:    movl $0, %edx
3013; AVX512DQ-NEXT:    cmoval %ecx, %edx
3014; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm7
3015; AVX512DQ-NEXT:    movl $0, %esi
3016; AVX512DQ-NEXT:    cmoval %ecx, %esi
3017; AVX512DQ-NEXT:    vmovd %esi, %xmm4
3018; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
3019; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
3020; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
3021; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm4
3022; AVX512DQ-NEXT:    movl $0, %edx
3023; AVX512DQ-NEXT:    cmoval %ecx, %edx
3024; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
3025; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3026; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
3027; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm6
3028; AVX512DQ-NEXT:    movl $0, %edx
3029; AVX512DQ-NEXT:    cmoval %ecx, %edx
3030; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
3031; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]
3032; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
3033; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm6
3034; AVX512DQ-NEXT:    movl $0, %edx
3035; AVX512DQ-NEXT:    cmoval %ecx, %edx
3036; AVX512DQ-NEXT:    vucomiss %xmm2, %xmm0
3037; AVX512DQ-NEXT:    movl $0, %esi
3038; AVX512DQ-NEXT:    cmoval %ecx, %esi
3039; AVX512DQ-NEXT:    vmovd %esi, %xmm5
3040; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3041; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
3042; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm0[1,0]
3043; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm7
3044; AVX512DQ-NEXT:    movl $0, %edx
3045; AVX512DQ-NEXT:    cmoval %ecx, %edx
3046; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
3047; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
3048; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
3049; AVX512DQ-NEXT:    vucomiss %xmm2, %xmm0
3050; AVX512DQ-NEXT:    movl $0, %edx
3051; AVX512DQ-NEXT:    cmoval %ecx, %edx
3052; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm0
3053; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
3054; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm8, %zmm0, %zmm0
3055; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm8
3056; AVX512DQ-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
3057; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]
3058; AVX512DQ-NEXT:    vextractf32x4 $3, %zmm1, %xmm5
3059; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3060; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm6
3061; AVX512DQ-NEXT:    movl $0, %edx
3062; AVX512DQ-NEXT:    cmoval %ecx, %edx
3063; AVX512DQ-NEXT:    vucomiss %xmm2, %xmm5
3064; AVX512DQ-NEXT:    movl $0, %esi
3065; AVX512DQ-NEXT:    cmoval %ecx, %esi
3066; AVX512DQ-NEXT:    vmovd %esi, %xmm4
3067; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3068; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
3069; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
3070; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm7
3071; AVX512DQ-NEXT:    movl $0, %edx
3072; AVX512DQ-NEXT:    cmoval %ecx, %edx
3073; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3074; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
3075; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3076; AVX512DQ-NEXT:    vucomiss %xmm2, %xmm5
3077; AVX512DQ-NEXT:    movl $0, %edx
3078; AVX512DQ-NEXT:    cmoval %ecx, %edx
3079; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm2
3080; AVX512DQ-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
3081; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
3082; AVX512DQ-NEXT:    vextractf32x4 $2, %zmm1, %xmm6
3083; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
3084; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm7
3085; AVX512DQ-NEXT:    movl $0, %edx
3086; AVX512DQ-NEXT:    cmoval %ecx, %edx
3087; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm6
3088; AVX512DQ-NEXT:    movl $0, %esi
3089; AVX512DQ-NEXT:    cmoval %ecx, %esi
3090; AVX512DQ-NEXT:    vmovd %esi, %xmm5
3091; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3092; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
3093; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm6[1,0]
3094; AVX512DQ-NEXT:    vucomiss %xmm7, %xmm0
3095; AVX512DQ-NEXT:    movl $0, %edx
3096; AVX512DQ-NEXT:    cmoval %ecx, %edx
3097; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm0
3098; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
3099; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm5 = xmm6[3,1,2,3]
3100; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm5
3101; AVX512DQ-NEXT:    movl $0, %edx
3102; AVX512DQ-NEXT:    cmoval %ecx, %edx
3103; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm0
3104; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
3105; AVX512DQ-NEXT:    vextractf32x4 $1, %zmm3, %xmm0
3106; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
3107; AVX512DQ-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
3108; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3109; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm6
3110; AVX512DQ-NEXT:    movl $0, %edx
3111; AVX512DQ-NEXT:    cmoval %ecx, %edx
3112; AVX512DQ-NEXT:    vucomiss %xmm0, %xmm5
3113; AVX512DQ-NEXT:    movl $0, %esi
3114; AVX512DQ-NEXT:    cmoval %ecx, %esi
3115; AVX512DQ-NEXT:    vmovd %esi, %xmm4
3116; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3117; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm0[1,0]
3118; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
3119; AVX512DQ-NEXT:    vucomiss %xmm6, %xmm7
3120; AVX512DQ-NEXT:    movl $0, %edx
3121; AVX512DQ-NEXT:    cmoval %ecx, %edx
3122; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3123; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
3124; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3125; AVX512DQ-NEXT:    vucomiss %xmm0, %xmm5
3126; AVX512DQ-NEXT:    movl $0, %edx
3127; AVX512DQ-NEXT:    cmoval %ecx, %edx
3128; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm0
3129; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
3130; AVX512DQ-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]
3131; AVX512DQ-NEXT:    vucomiss %xmm4, %xmm5
3132; AVX512DQ-NEXT:    movl $0, %edx
3133; AVX512DQ-NEXT:    cmoval %ecx, %edx
3134; AVX512DQ-NEXT:    vucomiss %xmm3, %xmm1
3135; AVX512DQ-NEXT:    movl $0, %esi
3136; AVX512DQ-NEXT:    cmoval %ecx, %esi
3137; AVX512DQ-NEXT:    vmovd %esi, %xmm4
3138; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3139; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm3[1,0]
3140; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm1[1,0]
3141; AVX512DQ-NEXT:    vucomiss %xmm5, %xmm6
3142; AVX512DQ-NEXT:    movl $0, %edx
3143; AVX512DQ-NEXT:    cmoval %ecx, %edx
3144; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3145; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[3,1,2,3]
3146; AVX512DQ-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
3147; AVX512DQ-NEXT:    vucomiss %xmm3, %xmm1
3148; AVX512DQ-NEXT:    cmoval %ecx, %eax
3149; AVX512DQ-NEXT:    vpinsrd $3, %eax, %xmm4, %xmm1
3150; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
3151; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm2, %zmm0, %zmm0
3152; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
3153; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
3154; AVX512DQ-NEXT:    retq
3155;
3156; AVX512BW-LABEL: test_cmp_v32f32:
3157; AVX512BW:       # BB#0:
3158; AVX512BW-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
3159; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
3160; AVX512BW-NEXT:    vextractf32x4 $3, %zmm0, %xmm6
3161; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
3162; AVX512BW-NEXT:    xorl %eax, %eax
3163; AVX512BW-NEXT:    vucomiss %xmm5, %xmm7
3164; AVX512BW-NEXT:    movl $-1, %ecx
3165; AVX512BW-NEXT:    movl $0, %edx
3166; AVX512BW-NEXT:    cmoval %ecx, %edx
3167; AVX512BW-NEXT:    vucomiss %xmm4, %xmm6
3168; AVX512BW-NEXT:    movl $0, %esi
3169; AVX512BW-NEXT:    cmoval %ecx, %esi
3170; AVX512BW-NEXT:    vmovd %esi, %xmm5
3171; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm8
3172; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
3173; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
3174; AVX512BW-NEXT:    vucomiss %xmm7, %xmm5
3175; AVX512BW-NEXT:    movl $0, %edx
3176; AVX512BW-NEXT:    cmoval %ecx, %edx
3177; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm8, %xmm5
3178; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
3179; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm6 = xmm6[3,1,2,3]
3180; AVX512BW-NEXT:    vucomiss %xmm4, %xmm6
3181; AVX512BW-NEXT:    movl $0, %edx
3182; AVX512BW-NEXT:    cmoval %ecx, %edx
3183; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm8
3184; AVX512BW-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
3185; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3186; AVX512BW-NEXT:    vextractf32x4 $2, %zmm0, %xmm7
3187; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
3188; AVX512BW-NEXT:    vucomiss %xmm6, %xmm4
3189; AVX512BW-NEXT:    movl $0, %edx
3190; AVX512BW-NEXT:    cmoval %ecx, %edx
3191; AVX512BW-NEXT:    vucomiss %xmm5, %xmm7
3192; AVX512BW-NEXT:    movl $0, %esi
3193; AVX512BW-NEXT:    cmoval %ecx, %esi
3194; AVX512BW-NEXT:    vmovd %esi, %xmm4
3195; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
3196; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
3197; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
3198; AVX512BW-NEXT:    vucomiss %xmm6, %xmm4
3199; AVX512BW-NEXT:    movl $0, %edx
3200; AVX512BW-NEXT:    cmoval %ecx, %edx
3201; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
3202; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3203; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
3204; AVX512BW-NEXT:    vucomiss %xmm5, %xmm6
3205; AVX512BW-NEXT:    movl $0, %edx
3206; AVX512BW-NEXT:    cmoval %ecx, %edx
3207; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
3208; AVX512BW-NEXT:    vinserti128 $1, %xmm8, %ymm4, %ymm8
3209; AVX512BW-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
3210; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3211; AVX512BW-NEXT:    vextractf32x4 $1, %zmm0, %xmm7
3212; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
3213; AVX512BW-NEXT:    vucomiss %xmm6, %xmm4
3214; AVX512BW-NEXT:    movl $0, %edx
3215; AVX512BW-NEXT:    cmoval %ecx, %edx
3216; AVX512BW-NEXT:    vucomiss %xmm5, %xmm7
3217; AVX512BW-NEXT:    movl $0, %esi
3218; AVX512BW-NEXT:    cmoval %ecx, %esi
3219; AVX512BW-NEXT:    vmovd %esi, %xmm4
3220; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
3221; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
3222; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
3223; AVX512BW-NEXT:    vucomiss %xmm6, %xmm4
3224; AVX512BW-NEXT:    movl $0, %edx
3225; AVX512BW-NEXT:    cmoval %ecx, %edx
3226; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
3227; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3228; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
3229; AVX512BW-NEXT:    vucomiss %xmm5, %xmm6
3230; AVX512BW-NEXT:    movl $0, %edx
3231; AVX512BW-NEXT:    cmoval %ecx, %edx
3232; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
3233; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]
3234; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
3235; AVX512BW-NEXT:    vucomiss %xmm5, %xmm6
3236; AVX512BW-NEXT:    movl $0, %edx
3237; AVX512BW-NEXT:    cmoval %ecx, %edx
3238; AVX512BW-NEXT:    vucomiss %xmm2, %xmm0
3239; AVX512BW-NEXT:    movl $0, %esi
3240; AVX512BW-NEXT:    cmoval %ecx, %esi
3241; AVX512BW-NEXT:    vmovd %esi, %xmm5
3242; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3243; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
3244; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm0[1,0]
3245; AVX512BW-NEXT:    vucomiss %xmm6, %xmm7
3246; AVX512BW-NEXT:    movl $0, %edx
3247; AVX512BW-NEXT:    cmoval %ecx, %edx
3248; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
3249; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
3250; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
3251; AVX512BW-NEXT:    vucomiss %xmm2, %xmm0
3252; AVX512BW-NEXT:    movl $0, %edx
3253; AVX512BW-NEXT:    cmoval %ecx, %edx
3254; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm0
3255; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
3256; AVX512BW-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
3257; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm8
3258; AVX512BW-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
3259; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]
3260; AVX512BW-NEXT:    vextractf32x4 $3, %zmm1, %xmm5
3261; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3262; AVX512BW-NEXT:    vucomiss %xmm4, %xmm6
3263; AVX512BW-NEXT:    movl $0, %edx
3264; AVX512BW-NEXT:    cmoval %ecx, %edx
3265; AVX512BW-NEXT:    vucomiss %xmm2, %xmm5
3266; AVX512BW-NEXT:    movl $0, %esi
3267; AVX512BW-NEXT:    cmoval %ecx, %esi
3268; AVX512BW-NEXT:    vmovd %esi, %xmm4
3269; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3270; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
3271; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
3272; AVX512BW-NEXT:    vucomiss %xmm6, %xmm7
3273; AVX512BW-NEXT:    movl $0, %edx
3274; AVX512BW-NEXT:    cmoval %ecx, %edx
3275; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3276; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
3277; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3278; AVX512BW-NEXT:    vucomiss %xmm2, %xmm5
3279; AVX512BW-NEXT:    movl $0, %edx
3280; AVX512BW-NEXT:    cmoval %ecx, %edx
3281; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm2
3282; AVX512BW-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
3283; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
3284; AVX512BW-NEXT:    vextractf32x4 $2, %zmm1, %xmm6
3285; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
3286; AVX512BW-NEXT:    vucomiss %xmm5, %xmm7
3287; AVX512BW-NEXT:    movl $0, %edx
3288; AVX512BW-NEXT:    cmoval %ecx, %edx
3289; AVX512BW-NEXT:    vucomiss %xmm4, %xmm6
3290; AVX512BW-NEXT:    movl $0, %esi
3291; AVX512BW-NEXT:    cmoval %ecx, %esi
3292; AVX512BW-NEXT:    vmovd %esi, %xmm5
3293; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3294; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
3295; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm6[1,0]
3296; AVX512BW-NEXT:    vucomiss %xmm7, %xmm0
3297; AVX512BW-NEXT:    movl $0, %edx
3298; AVX512BW-NEXT:    cmoval %ecx, %edx
3299; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm0
3300; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
3301; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm5 = xmm6[3,1,2,3]
3302; AVX512BW-NEXT:    vucomiss %xmm4, %xmm5
3303; AVX512BW-NEXT:    movl $0, %edx
3304; AVX512BW-NEXT:    cmoval %ecx, %edx
3305; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm0
3306; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
3307; AVX512BW-NEXT:    vextractf32x4 $1, %zmm3, %xmm0
3308; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
3309; AVX512BW-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
3310; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
3311; AVX512BW-NEXT:    vucomiss %xmm4, %xmm6
3312; AVX512BW-NEXT:    movl $0, %edx
3313; AVX512BW-NEXT:    cmoval %ecx, %edx
3314; AVX512BW-NEXT:    vucomiss %xmm0, %xmm5
3315; AVX512BW-NEXT:    movl $0, %esi
3316; AVX512BW-NEXT:    cmoval %ecx, %esi
3317; AVX512BW-NEXT:    vmovd %esi, %xmm4
3318; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3319; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm0[1,0]
3320; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
3321; AVX512BW-NEXT:    vucomiss %xmm6, %xmm7
3322; AVX512BW-NEXT:    movl $0, %edx
3323; AVX512BW-NEXT:    cmoval %ecx, %edx
3324; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3325; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
3326; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
3327; AVX512BW-NEXT:    vucomiss %xmm0, %xmm5
3328; AVX512BW-NEXT:    movl $0, %edx
3329; AVX512BW-NEXT:    cmoval %ecx, %edx
3330; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm0
3331; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
3332; AVX512BW-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]
3333; AVX512BW-NEXT:    vucomiss %xmm4, %xmm5
3334; AVX512BW-NEXT:    movl $0, %edx
3335; AVX512BW-NEXT:    cmoval %ecx, %edx
3336; AVX512BW-NEXT:    vucomiss %xmm3, %xmm1
3337; AVX512BW-NEXT:    movl $0, %esi
3338; AVX512BW-NEXT:    cmoval %ecx, %esi
3339; AVX512BW-NEXT:    vmovd %esi, %xmm4
3340; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
3341; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm3[1,0]
3342; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm1[1,0]
3343; AVX512BW-NEXT:    vucomiss %xmm5, %xmm6
3344; AVX512BW-NEXT:    movl $0, %edx
3345; AVX512BW-NEXT:    cmoval %ecx, %edx
3346; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
3347; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[3,1,2,3]
3348; AVX512BW-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
3349; AVX512BW-NEXT:    vucomiss %xmm3, %xmm1
3350; AVX512BW-NEXT:    cmoval %ecx, %eax
3351; AVX512BW-NEXT:    vpinsrd $3, %eax, %xmm4, %xmm1
3352; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
3353; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3354; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
3355; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
3356; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
3357; AVX512BW-NEXT:    retq
3358  %1 = fcmp ogt <32 x float> %a0, %a1
3359  ret <32 x i1> %1
3360}
3361
3362define <16 x i1> @test_cmp_v16i64(<16 x i64> %a0, <16 x i64> %a1) nounwind {
3363; SSE2-LABEL: test_cmp_v16i64:
3364; SSE2:       # BB#0:
3365; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
3366; SSE2-NEXT:    pxor %xmm8, %xmm7
3367; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
3368; SSE2-NEXT:    pxor %xmm8, %xmm9
3369; SSE2-NEXT:    movdqa %xmm7, %xmm10
3370; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
3371; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
3372; SSE2-NEXT:    pcmpeqd %xmm7, %xmm9
3373; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
3374; SSE2-NEXT:    pand %xmm11, %xmm7
3375; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
3376; SSE2-NEXT:    por %xmm7, %xmm9
3377; SSE2-NEXT:    pxor %xmm8, %xmm6
3378; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
3379; SSE2-NEXT:    pxor %xmm8, %xmm7
3380; SSE2-NEXT:    movdqa %xmm6, %xmm10
3381; SSE2-NEXT:    pcmpgtd %xmm7, %xmm10
3382; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
3383; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
3384; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
3385; SSE2-NEXT:    pand %xmm11, %xmm7
3386; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
3387; SSE2-NEXT:    por %xmm7, %xmm10
3388; SSE2-NEXT:    packsswb %xmm9, %xmm10
3389; SSE2-NEXT:    pxor %xmm8, %xmm5
3390; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
3391; SSE2-NEXT:    pxor %xmm8, %xmm7
3392; SSE2-NEXT:    movdqa %xmm5, %xmm6
3393; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
3394; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2]
3395; SSE2-NEXT:    pcmpeqd %xmm5, %xmm7
3396; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
3397; SSE2-NEXT:    pand %xmm9, %xmm5
3398; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
3399; SSE2-NEXT:    por %xmm5, %xmm6
3400; SSE2-NEXT:    pxor %xmm8, %xmm4
3401; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
3402; SSE2-NEXT:    pxor %xmm8, %xmm5
3403; SSE2-NEXT:    movdqa %xmm4, %xmm7
3404; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
3405; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,0,2,2]
3406; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
3407; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
3408; SSE2-NEXT:    pand %xmm9, %xmm5
3409; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
3410; SSE2-NEXT:    por %xmm5, %xmm4
3411; SSE2-NEXT:    packsswb %xmm6, %xmm4
3412; SSE2-NEXT:    packsswb %xmm10, %xmm4
3413; SSE2-NEXT:    pxor %xmm8, %xmm3
3414; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
3415; SSE2-NEXT:    pxor %xmm8, %xmm5
3416; SSE2-NEXT:    movdqa %xmm3, %xmm6
3417; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
3418; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
3419; SSE2-NEXT:    pcmpeqd %xmm3, %xmm5
3420; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
3421; SSE2-NEXT:    pand %xmm7, %xmm3
3422; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
3423; SSE2-NEXT:    por %xmm3, %xmm5
3424; SSE2-NEXT:    pxor %xmm8, %xmm2
3425; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
3426; SSE2-NEXT:    pxor %xmm8, %xmm3
3427; SSE2-NEXT:    movdqa %xmm2, %xmm6
3428; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
3429; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
3430; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
3431; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
3432; SSE2-NEXT:    pand %xmm7, %xmm3
3433; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
3434; SSE2-NEXT:    por %xmm3, %xmm2
3435; SSE2-NEXT:    packsswb %xmm5, %xmm2
3436; SSE2-NEXT:    pxor %xmm8, %xmm1
3437; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
3438; SSE2-NEXT:    pxor %xmm8, %xmm3
3439; SSE2-NEXT:    movdqa %xmm1, %xmm5
3440; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
3441; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
3442; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
3443; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
3444; SSE2-NEXT:    pand %xmm6, %xmm1
3445; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
3446; SSE2-NEXT:    por %xmm1, %xmm3
3447; SSE2-NEXT:    pxor %xmm8, %xmm0
3448; SSE2-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm8
3449; SSE2-NEXT:    movdqa %xmm0, %xmm1
3450; SSE2-NEXT:    pcmpgtd %xmm8, %xmm1
3451; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
3452; SSE2-NEXT:    pcmpeqd %xmm0, %xmm8
3453; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[1,1,3,3]
3454; SSE2-NEXT:    pand %xmm5, %xmm6
3455; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
3456; SSE2-NEXT:    por %xmm6, %xmm0
3457; SSE2-NEXT:    packsswb %xmm3, %xmm0
3458; SSE2-NEXT:    packsswb %xmm2, %xmm0
3459; SSE2-NEXT:    packsswb %xmm4, %xmm0
3460; SSE2-NEXT:    retq
3461;
3462; SSE42-LABEL: test_cmp_v16i64:
3463; SSE42:       # BB#0:
3464; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm7
3465; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm6
3466; SSE42-NEXT:    packsswb %xmm7, %xmm6
3467; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm5
3468; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm4
3469; SSE42-NEXT:    packsswb %xmm5, %xmm4
3470; SSE42-NEXT:    packsswb %xmm6, %xmm4
3471; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm3
3472; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm2
3473; SSE42-NEXT:    packsswb %xmm3, %xmm2
3474; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
3475; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm0
3476; SSE42-NEXT:    packsswb %xmm1, %xmm0
3477; SSE42-NEXT:    packsswb %xmm2, %xmm0
3478; SSE42-NEXT:    packsswb %xmm4, %xmm0
3479; SSE42-NEXT:    retq
3480;
3481; AVX1-LABEL: test_cmp_v16i64:
3482; AVX1:       # BB#0:
3483; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm8
3484; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm9
3485; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm9, %xmm8
3486; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm3, %xmm3
3487; AVX1-NEXT:    vpacksswb %xmm8, %xmm3, %xmm8
3488; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
3489; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
3490; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm3, %xmm3
3491; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm2, %xmm2
3492; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
3493; AVX1-NEXT:    vpacksswb %xmm8, %xmm2, %xmm2
3494; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
3495; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
3496; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm3
3497; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm1, %xmm1
3498; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
3499; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm3
3500; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3501; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3
3502; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm0
3503; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
3504; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
3505; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
3506; AVX1-NEXT:    vzeroupper
3507; AVX1-NEXT:    retq
3508;
3509; AVX2-LABEL: test_cmp_v16i64:
3510; AVX2:       # BB#0:
3511; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm3, %ymm3
3512; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm2, %ymm2
3513; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
3514; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
3515; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm1, %ymm1
3516; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm0
3517; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
3518; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3519; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
3520; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3521; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
3522; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
3523; AVX2-NEXT:    vzeroupper
3524; AVX2-NEXT:    retq
3525;
3526; AVX512F-LABEL: test_cmp_v16i64:
3527; AVX512F:       # BB#0:
3528; AVX512F-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
3529; AVX512F-NEXT:    vpextrq $1, %xmm4, %rcx
3530; AVX512F-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
3531; AVX512F-NEXT:    vpextrq $1, %xmm5, %rdx
3532; AVX512F-NEXT:    xorl %eax, %eax
3533; AVX512F-NEXT:    cmpq %rcx, %rdx
3534; AVX512F-NEXT:    movq $-1, %rcx
3535; AVX512F-NEXT:    movl $0, %edx
3536; AVX512F-NEXT:    cmovgq %rcx, %rdx
3537; AVX512F-NEXT:    vmovq %rdx, %xmm6
3538; AVX512F-NEXT:    vmovq %xmm4, %rdx
3539; AVX512F-NEXT:    vmovq %xmm5, %rsi
3540; AVX512F-NEXT:    cmpq %rdx, %rsi
3541; AVX512F-NEXT:    movl $0, %edx
3542; AVX512F-NEXT:    cmovgq %rcx, %rdx
3543; AVX512F-NEXT:    vmovq %rdx, %xmm4
3544; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3545; AVX512F-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
3546; AVX512F-NEXT:    vpextrq $1, %xmm5, %rdx
3547; AVX512F-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
3548; AVX512F-NEXT:    vpextrq $1, %xmm6, %rsi
3549; AVX512F-NEXT:    cmpq %rdx, %rsi
3550; AVX512F-NEXT:    movl $0, %edx
3551; AVX512F-NEXT:    cmovgq %rcx, %rdx
3552; AVX512F-NEXT:    vmovq %rdx, %xmm7
3553; AVX512F-NEXT:    vmovq %xmm5, %rdx
3554; AVX512F-NEXT:    vmovq %xmm6, %rsi
3555; AVX512F-NEXT:    cmpq %rdx, %rsi
3556; AVX512F-NEXT:    movl $0, %edx
3557; AVX512F-NEXT:    cmovgq %rcx, %rdx
3558; AVX512F-NEXT:    vmovq %rdx, %xmm5
3559; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3560; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
3561; AVX512F-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
3562; AVX512F-NEXT:    vpextrq $1, %xmm5, %rdx
3563; AVX512F-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
3564; AVX512F-NEXT:    vpextrq $1, %xmm6, %rsi
3565; AVX512F-NEXT:    cmpq %rdx, %rsi
3566; AVX512F-NEXT:    movl $0, %edx
3567; AVX512F-NEXT:    cmovgq %rcx, %rdx
3568; AVX512F-NEXT:    vmovq %rdx, %xmm7
3569; AVX512F-NEXT:    vmovq %xmm5, %rdx
3570; AVX512F-NEXT:    vmovq %xmm6, %rsi
3571; AVX512F-NEXT:    cmpq %rdx, %rsi
3572; AVX512F-NEXT:    movl $0, %edx
3573; AVX512F-NEXT:    cmovgq %rcx, %rdx
3574; AVX512F-NEXT:    vmovq %rdx, %xmm5
3575; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3576; AVX512F-NEXT:    vpextrq $1, %xmm2, %rdx
3577; AVX512F-NEXT:    vpextrq $1, %xmm0, %rsi
3578; AVX512F-NEXT:    cmpq %rdx, %rsi
3579; AVX512F-NEXT:    movl $0, %edx
3580; AVX512F-NEXT:    cmovgq %rcx, %rdx
3581; AVX512F-NEXT:    vmovq %rdx, %xmm6
3582; AVX512F-NEXT:    vmovq %xmm2, %rdx
3583; AVX512F-NEXT:    vmovq %xmm0, %rsi
3584; AVX512F-NEXT:    cmpq %rdx, %rsi
3585; AVX512F-NEXT:    movl $0, %edx
3586; AVX512F-NEXT:    cmovgq %rcx, %rdx
3587; AVX512F-NEXT:    vmovq %rdx, %xmm0
3588; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
3589; AVX512F-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
3590; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
3591; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
3592; AVX512F-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
3593; AVX512F-NEXT:    vpextrq $1, %xmm2, %rdx
3594; AVX512F-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
3595; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
3596; AVX512F-NEXT:    cmpq %rdx, %rsi
3597; AVX512F-NEXT:    movl $0, %edx
3598; AVX512F-NEXT:    cmovgq %rcx, %rdx
3599; AVX512F-NEXT:    vmovq %rdx, %xmm5
3600; AVX512F-NEXT:    vmovq %xmm2, %rdx
3601; AVX512F-NEXT:    vmovq %xmm4, %rsi
3602; AVX512F-NEXT:    cmpq %rdx, %rsi
3603; AVX512F-NEXT:    movl $0, %edx
3604; AVX512F-NEXT:    cmovgq %rcx, %rdx
3605; AVX512F-NEXT:    vmovq %rdx, %xmm2
3606; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
3607; AVX512F-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
3608; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
3609; AVX512F-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
3610; AVX512F-NEXT:    vpextrq $1, %xmm5, %rsi
3611; AVX512F-NEXT:    cmpq %rdx, %rsi
3612; AVX512F-NEXT:    movl $0, %edx
3613; AVX512F-NEXT:    cmovgq %rcx, %rdx
3614; AVX512F-NEXT:    vmovq %rdx, %xmm6
3615; AVX512F-NEXT:    vmovq %xmm4, %rdx
3616; AVX512F-NEXT:    vmovq %xmm5, %rsi
3617; AVX512F-NEXT:    cmpq %rdx, %rsi
3618; AVX512F-NEXT:    movl $0, %edx
3619; AVX512F-NEXT:    cmovgq %rcx, %rdx
3620; AVX512F-NEXT:    vmovq %rdx, %xmm4
3621; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3622; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
3623; AVX512F-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
3624; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
3625; AVX512F-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
3626; AVX512F-NEXT:    vpextrq $1, %xmm5, %rsi
3627; AVX512F-NEXT:    cmpq %rdx, %rsi
3628; AVX512F-NEXT:    movl $0, %edx
3629; AVX512F-NEXT:    cmovgq %rcx, %rdx
3630; AVX512F-NEXT:    vmovq %rdx, %xmm6
3631; AVX512F-NEXT:    vmovq %xmm4, %rdx
3632; AVX512F-NEXT:    vmovq %xmm5, %rsi
3633; AVX512F-NEXT:    cmpq %rdx, %rsi
3634; AVX512F-NEXT:    movl $0, %edx
3635; AVX512F-NEXT:    cmovgq %rcx, %rdx
3636; AVX512F-NEXT:    vmovq %rdx, %xmm4
3637; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3638; AVX512F-NEXT:    vpextrq $1, %xmm3, %rdx
3639; AVX512F-NEXT:    vpextrq $1, %xmm1, %rsi
3640; AVX512F-NEXT:    cmpq %rdx, %rsi
3641; AVX512F-NEXT:    movl $0, %edx
3642; AVX512F-NEXT:    cmovgq %rcx, %rdx
3643; AVX512F-NEXT:    vmovq %rdx, %xmm5
3644; AVX512F-NEXT:    vmovq %xmm3, %rdx
3645; AVX512F-NEXT:    vmovq %xmm1, %rsi
3646; AVX512F-NEXT:    cmpq %rdx, %rsi
3647; AVX512F-NEXT:    cmovgq %rcx, %rax
3648; AVX512F-NEXT:    vmovq %rax, %xmm1
3649; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
3650; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
3651; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
3652; AVX512F-NEXT:    vpmovqd %zmm1, %ymm1
3653; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3654; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
3655; AVX512F-NEXT:    retq
3656;
3657; AVX512DQ-LABEL: test_cmp_v16i64:
3658; AVX512DQ:       # BB#0:
3659; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm2, %xmm4
3660; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rcx
3661; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm0, %xmm5
3662; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rdx
3663; AVX512DQ-NEXT:    xorl %eax, %eax
3664; AVX512DQ-NEXT:    cmpq %rcx, %rdx
3665; AVX512DQ-NEXT:    movq $-1, %rcx
3666; AVX512DQ-NEXT:    movl $0, %edx
3667; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3668; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
3669; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
3670; AVX512DQ-NEXT:    vmovq %xmm5, %rsi
3671; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3672; AVX512DQ-NEXT:    movl $0, %edx
3673; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3674; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
3675; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3676; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm2, %xmm5
3677; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rdx
3678; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm0, %xmm6
3679; AVX512DQ-NEXT:    vpextrq $1, %xmm6, %rsi
3680; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3681; AVX512DQ-NEXT:    movl $0, %edx
3682; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3683; AVX512DQ-NEXT:    vmovq %rdx, %xmm7
3684; AVX512DQ-NEXT:    vmovq %xmm5, %rdx
3685; AVX512DQ-NEXT:    vmovq %xmm6, %rsi
3686; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3687; AVX512DQ-NEXT:    movl $0, %edx
3688; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3689; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
3690; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3691; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
3692; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm2, %xmm5
3693; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rdx
3694; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm0, %xmm6
3695; AVX512DQ-NEXT:    vpextrq $1, %xmm6, %rsi
3696; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3697; AVX512DQ-NEXT:    movl $0, %edx
3698; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3699; AVX512DQ-NEXT:    vmovq %rdx, %xmm7
3700; AVX512DQ-NEXT:    vmovq %xmm5, %rdx
3701; AVX512DQ-NEXT:    vmovq %xmm6, %rsi
3702; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3703; AVX512DQ-NEXT:    movl $0, %edx
3704; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3705; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
3706; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3707; AVX512DQ-NEXT:    vpextrq $1, %xmm2, %rdx
3708; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rsi
3709; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3710; AVX512DQ-NEXT:    movl $0, %edx
3711; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3712; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
3713; AVX512DQ-NEXT:    vmovq %xmm2, %rdx
3714; AVX512DQ-NEXT:    vmovq %xmm0, %rsi
3715; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3716; AVX512DQ-NEXT:    movl $0, %edx
3717; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3718; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
3719; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
3720; AVX512DQ-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
3721; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
3722; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
3723; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm3, %xmm2
3724; AVX512DQ-NEXT:    vpextrq $1, %xmm2, %rdx
3725; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm1, %xmm4
3726; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
3727; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3728; AVX512DQ-NEXT:    movl $0, %edx
3729; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3730; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
3731; AVX512DQ-NEXT:    vmovq %xmm2, %rdx
3732; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
3733; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3734; AVX512DQ-NEXT:    movl $0, %edx
3735; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3736; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
3737; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
3738; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm3, %xmm4
3739; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
3740; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm1, %xmm5
3741; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rsi
3742; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3743; AVX512DQ-NEXT:    movl $0, %edx
3744; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3745; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
3746; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
3747; AVX512DQ-NEXT:    vmovq %xmm5, %rsi
3748; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3749; AVX512DQ-NEXT:    movl $0, %edx
3750; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3751; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
3752; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3753; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
3754; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm3, %xmm4
3755; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
3756; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm1, %xmm5
3757; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rsi
3758; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3759; AVX512DQ-NEXT:    movl $0, %edx
3760; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3761; AVX512DQ-NEXT:    vmovq %rdx, %xmm6
3762; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
3763; AVX512DQ-NEXT:    vmovq %xmm5, %rsi
3764; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3765; AVX512DQ-NEXT:    movl $0, %edx
3766; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3767; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
3768; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3769; AVX512DQ-NEXT:    vpextrq $1, %xmm3, %rdx
3770; AVX512DQ-NEXT:    vpextrq $1, %xmm1, %rsi
3771; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3772; AVX512DQ-NEXT:    movl $0, %edx
3773; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
3774; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
3775; AVX512DQ-NEXT:    vmovq %xmm3, %rdx
3776; AVX512DQ-NEXT:    vmovq %xmm1, %rsi
3777; AVX512DQ-NEXT:    cmpq %rdx, %rsi
3778; AVX512DQ-NEXT:    cmovgq %rcx, %rax
3779; AVX512DQ-NEXT:    vmovq %rax, %xmm1
3780; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
3781; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
3782; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
3783; AVX512DQ-NEXT:    vpmovqd %zmm1, %ymm1
3784; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm1, %zmm0, %zmm0
3785; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
3786; AVX512DQ-NEXT:    retq
3787;
3788; AVX512BW-LABEL: test_cmp_v16i64:
3789; AVX512BW:       # BB#0:
3790; AVX512BW-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
3791; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rcx
3792; AVX512BW-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
3793; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rdx
3794; AVX512BW-NEXT:    xorl %eax, %eax
3795; AVX512BW-NEXT:    cmpq %rcx, %rdx
3796; AVX512BW-NEXT:    movq $-1, %rcx
3797; AVX512BW-NEXT:    movl $0, %edx
3798; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3799; AVX512BW-NEXT:    vmovq %rdx, %xmm6
3800; AVX512BW-NEXT:    vmovq %xmm4, %rdx
3801; AVX512BW-NEXT:    vmovq %xmm5, %rsi
3802; AVX512BW-NEXT:    cmpq %rdx, %rsi
3803; AVX512BW-NEXT:    movl $0, %edx
3804; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3805; AVX512BW-NEXT:    vmovq %rdx, %xmm4
3806; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3807; AVX512BW-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
3808; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rdx
3809; AVX512BW-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
3810; AVX512BW-NEXT:    vpextrq $1, %xmm6, %rsi
3811; AVX512BW-NEXT:    cmpq %rdx, %rsi
3812; AVX512BW-NEXT:    movl $0, %edx
3813; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3814; AVX512BW-NEXT:    vmovq %rdx, %xmm7
3815; AVX512BW-NEXT:    vmovq %xmm5, %rdx
3816; AVX512BW-NEXT:    vmovq %xmm6, %rsi
3817; AVX512BW-NEXT:    cmpq %rdx, %rsi
3818; AVX512BW-NEXT:    movl $0, %edx
3819; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3820; AVX512BW-NEXT:    vmovq %rdx, %xmm5
3821; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3822; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
3823; AVX512BW-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
3824; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rdx
3825; AVX512BW-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
3826; AVX512BW-NEXT:    vpextrq $1, %xmm6, %rsi
3827; AVX512BW-NEXT:    cmpq %rdx, %rsi
3828; AVX512BW-NEXT:    movl $0, %edx
3829; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3830; AVX512BW-NEXT:    vmovq %rdx, %xmm7
3831; AVX512BW-NEXT:    vmovq %xmm5, %rdx
3832; AVX512BW-NEXT:    vmovq %xmm6, %rsi
3833; AVX512BW-NEXT:    cmpq %rdx, %rsi
3834; AVX512BW-NEXT:    movl $0, %edx
3835; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3836; AVX512BW-NEXT:    vmovq %rdx, %xmm5
3837; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3838; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rdx
3839; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rsi
3840; AVX512BW-NEXT:    cmpq %rdx, %rsi
3841; AVX512BW-NEXT:    movl $0, %edx
3842; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3843; AVX512BW-NEXT:    vmovq %rdx, %xmm6
3844; AVX512BW-NEXT:    vmovq %xmm2, %rdx
3845; AVX512BW-NEXT:    vmovq %xmm0, %rsi
3846; AVX512BW-NEXT:    cmpq %rdx, %rsi
3847; AVX512BW-NEXT:    movl $0, %edx
3848; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3849; AVX512BW-NEXT:    vmovq %rdx, %xmm0
3850; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
3851; AVX512BW-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
3852; AVX512BW-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
3853; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
3854; AVX512BW-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
3855; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rdx
3856; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
3857; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
3858; AVX512BW-NEXT:    cmpq %rdx, %rsi
3859; AVX512BW-NEXT:    movl $0, %edx
3860; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3861; AVX512BW-NEXT:    vmovq %rdx, %xmm5
3862; AVX512BW-NEXT:    vmovq %xmm2, %rdx
3863; AVX512BW-NEXT:    vmovq %xmm4, %rsi
3864; AVX512BW-NEXT:    cmpq %rdx, %rsi
3865; AVX512BW-NEXT:    movl $0, %edx
3866; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3867; AVX512BW-NEXT:    vmovq %rdx, %xmm2
3868; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
3869; AVX512BW-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
3870; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
3871; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
3872; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rsi
3873; AVX512BW-NEXT:    cmpq %rdx, %rsi
3874; AVX512BW-NEXT:    movl $0, %edx
3875; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3876; AVX512BW-NEXT:    vmovq %rdx, %xmm6
3877; AVX512BW-NEXT:    vmovq %xmm4, %rdx
3878; AVX512BW-NEXT:    vmovq %xmm5, %rsi
3879; AVX512BW-NEXT:    cmpq %rdx, %rsi
3880; AVX512BW-NEXT:    movl $0, %edx
3881; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3882; AVX512BW-NEXT:    vmovq %rdx, %xmm4
3883; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3884; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
3885; AVX512BW-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
3886; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
3887; AVX512BW-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
3888; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rsi
3889; AVX512BW-NEXT:    cmpq %rdx, %rsi
3890; AVX512BW-NEXT:    movl $0, %edx
3891; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3892; AVX512BW-NEXT:    vmovq %rdx, %xmm6
3893; AVX512BW-NEXT:    vmovq %xmm4, %rdx
3894; AVX512BW-NEXT:    vmovq %xmm5, %rsi
3895; AVX512BW-NEXT:    cmpq %rdx, %rsi
3896; AVX512BW-NEXT:    movl $0, %edx
3897; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3898; AVX512BW-NEXT:    vmovq %rdx, %xmm4
3899; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3900; AVX512BW-NEXT:    vpextrq $1, %xmm3, %rdx
3901; AVX512BW-NEXT:    vpextrq $1, %xmm1, %rsi
3902; AVX512BW-NEXT:    cmpq %rdx, %rsi
3903; AVX512BW-NEXT:    movl $0, %edx
3904; AVX512BW-NEXT:    cmovgq %rcx, %rdx
3905; AVX512BW-NEXT:    vmovq %rdx, %xmm5
3906; AVX512BW-NEXT:    vmovq %xmm3, %rdx
3907; AVX512BW-NEXT:    vmovq %xmm1, %rsi
3908; AVX512BW-NEXT:    cmpq %rdx, %rsi
3909; AVX512BW-NEXT:    cmovgq %rcx, %rax
3910; AVX512BW-NEXT:    vmovq %rax, %xmm1
3911; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
3912; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
3913; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
3914; AVX512BW-NEXT:    vpmovqd %zmm1, %ymm1
3915; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3916; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0
3917; AVX512BW-NEXT:    retq
3918  %1 = icmp sgt <16 x i64> %a0, %a1
3919  ret <16 x i1> %1
3920}
3921
3922define <32 x i1> @test_cmp_v32i32(<32 x i32> %a0, <32 x i32> %a1) nounwind {
3923; SSE2-LABEL: test_cmp_v32i32:
3924; SSE2:       # BB#0:
3925; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
3926; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
3927; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
3928; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
3929; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
3930; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
3931; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
3932; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
3933; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
3934; SSE2-NEXT:    psllw $15, %xmm2
3935; SSE2-NEXT:    psraw $15, %xmm2
3936; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
3937; SSE2-NEXT:    pand %xmm3, %xmm2
3938; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
3939; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
3940; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
3941; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3942; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
3943; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
3944; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
3945; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
3946; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3947; SSE2-NEXT:    psllw $15, %xmm0
3948; SSE2-NEXT:    psraw $15, %xmm0
3949; SSE2-NEXT:    pand %xmm3, %xmm0
3950; SSE2-NEXT:    packuswb %xmm2, %xmm0
3951; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
3952; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm7[0,2,2,3,4,5,6,7]
3953; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
3954; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3955; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
3956; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm6[0,2,2,3,4,5,6,7]
3957; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
3958; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
3959; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
3960; SSE2-NEXT:    psllw $15, %xmm2
3961; SSE2-NEXT:    psraw $15, %xmm2
3962; SSE2-NEXT:    pand %xmm3, %xmm2
3963; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
3964; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm5[0,2,2,3,4,5,6,7]
3965; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
3966; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3967; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
3968; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,2,2,3,4,5,6,7]
3969; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
3970; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
3971; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm1[0]
3972; SSE2-NEXT:    psllw $15, %xmm4
3973; SSE2-NEXT:    psraw $15, %xmm4
3974; SSE2-NEXT:    pand %xmm3, %xmm4
3975; SSE2-NEXT:    packuswb %xmm2, %xmm4
3976; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
3977; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3978; SSE2-NEXT:    andb $1, %al
3979; SSE2-NEXT:    movb %al, 2(%rdi)
3980; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
3981; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3982; SSE2-NEXT:    andb $1, %al
3983; SSE2-NEXT:    movb %al, (%rdi)
3984; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3985; SSE2-NEXT:    andb $1, %al
3986; SSE2-NEXT:    movb %al, 2(%rdi)
3987; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3988; SSE2-NEXT:    andb $1, %al
3989; SSE2-NEXT:    movb %al, (%rdi)
3990; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3991; SSE2-NEXT:    andb $1, %al
3992; SSE2-NEXT:    movb %al, 2(%rdi)
3993; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3994; SSE2-NEXT:    andb $1, %al
3995; SSE2-NEXT:    movb %al, (%rdi)
3996; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3997; SSE2-NEXT:    andb $1, %al
3998; SSE2-NEXT:    movb %al, 2(%rdi)
3999; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4000; SSE2-NEXT:    andb $1, %al
4001; SSE2-NEXT:    movb %al, (%rdi)
4002; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4003; SSE2-NEXT:    andb $1, %al
4004; SSE2-NEXT:    movb %al, 2(%rdi)
4005; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4006; SSE2-NEXT:    andb $1, %al
4007; SSE2-NEXT:    movb %al, (%rdi)
4008; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4009; SSE2-NEXT:    andb $1, %al
4010; SSE2-NEXT:    movb %al, 2(%rdi)
4011; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4012; SSE2-NEXT:    andb $1, %al
4013; SSE2-NEXT:    movb %al, (%rdi)
4014; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4015; SSE2-NEXT:    andb $1, %al
4016; SSE2-NEXT:    movb %al, 2(%rdi)
4017; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4018; SSE2-NEXT:    andb $1, %al
4019; SSE2-NEXT:    movb %al, (%rdi)
4020; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4021; SSE2-NEXT:    andb $1, %al
4022; SSE2-NEXT:    movb %al, 2(%rdi)
4023; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4024; SSE2-NEXT:    andb $1, %al
4025; SSE2-NEXT:    movb %al, (%rdi)
4026; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4027; SSE2-NEXT:    andb $1, %al
4028; SSE2-NEXT:    movb %al, 2(%rdi)
4029; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4030; SSE2-NEXT:    andb $1, %al
4031; SSE2-NEXT:    movb %al, (%rdi)
4032; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4033; SSE2-NEXT:    andb $1, %al
4034; SSE2-NEXT:    movb %al, 2(%rdi)
4035; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4036; SSE2-NEXT:    andb $1, %al
4037; SSE2-NEXT:    movb %al, (%rdi)
4038; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4039; SSE2-NEXT:    andb $1, %al
4040; SSE2-NEXT:    movb %al, 2(%rdi)
4041; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4042; SSE2-NEXT:    andb $1, %al
4043; SSE2-NEXT:    movb %al, (%rdi)
4044; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4045; SSE2-NEXT:    andb $1, %al
4046; SSE2-NEXT:    movb %al, 2(%rdi)
4047; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4048; SSE2-NEXT:    andb $1, %al
4049; SSE2-NEXT:    movb %al, (%rdi)
4050; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4051; SSE2-NEXT:    andb $1, %al
4052; SSE2-NEXT:    movb %al, 2(%rdi)
4053; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4054; SSE2-NEXT:    andb $1, %al
4055; SSE2-NEXT:    movb %al, (%rdi)
4056; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4057; SSE2-NEXT:    andb $1, %al
4058; SSE2-NEXT:    movb %al, 2(%rdi)
4059; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4060; SSE2-NEXT:    andb $1, %al
4061; SSE2-NEXT:    movb %al, (%rdi)
4062; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4063; SSE2-NEXT:    andb $1, %al
4064; SSE2-NEXT:    movb %al, 2(%rdi)
4065; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4066; SSE2-NEXT:    andb $1, %al
4067; SSE2-NEXT:    movb %al, (%rdi)
4068; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4069; SSE2-NEXT:    andb $1, %al
4070; SSE2-NEXT:    movb %al, 2(%rdi)
4071; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4072; SSE2-NEXT:    andb $1, %al
4073; SSE2-NEXT:    movb %al, (%rdi)
4074; SSE2-NEXT:    movq %rdi, %rax
4075; SSE2-NEXT:    retq
4076;
4077; SSE42-LABEL: test_cmp_v32i32:
4078; SSE42:       # BB#0:
4079; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
4080; SSE42-NEXT:    movdqa {{.*#+}} xmm8 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
4081; SSE42-NEXT:    pshufb %xmm8, %xmm3
4082; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
4083; SSE42-NEXT:    pshufb %xmm8, %xmm2
4084; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
4085; SSE42-NEXT:    psllw $15, %xmm2
4086; SSE42-NEXT:    psraw $15, %xmm2
4087; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4088; SSE42-NEXT:    pshufb %xmm3, %xmm2
4089; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
4090; SSE42-NEXT:    pshufb %xmm8, %xmm1
4091; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
4092; SSE42-NEXT:    pshufb %xmm8, %xmm0
4093; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4094; SSE42-NEXT:    psllw $15, %xmm0
4095; SSE42-NEXT:    psraw $15, %xmm0
4096; SSE42-NEXT:    pshufb %xmm3, %xmm0
4097; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
4098; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
4099; SSE42-NEXT:    pshufb %xmm8, %xmm7
4100; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
4101; SSE42-NEXT:    pshufb %xmm8, %xmm6
4102; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]
4103; SSE42-NEXT:    psllw $15, %xmm6
4104; SSE42-NEXT:    psraw $15, %xmm6
4105; SSE42-NEXT:    pshufb %xmm3, %xmm6
4106; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
4107; SSE42-NEXT:    pshufb %xmm8, %xmm5
4108; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
4109; SSE42-NEXT:    pshufb %xmm8, %xmm4
4110; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
4111; SSE42-NEXT:    psllw $15, %xmm4
4112; SSE42-NEXT:    psraw $15, %xmm4
4113; SSE42-NEXT:    pshufb %xmm3, %xmm4
4114; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
4115; SSE42-NEXT:    pextrb $15, %xmm4, %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 $13, %xmm4, %eax
4122; SSE42-NEXT:    andb $1, %al
4123; SSE42-NEXT:    movb %al, 2(%rdi)
4124; SSE42-NEXT:    pextrb $12, %xmm4, %eax
4125; SSE42-NEXT:    andb $1, %al
4126; SSE42-NEXT:    movb %al, 2(%rdi)
4127; SSE42-NEXT:    pextrb $11, %xmm4, %eax
4128; SSE42-NEXT:    andb $1, %al
4129; SSE42-NEXT:    movb %al, 2(%rdi)
4130; SSE42-NEXT:    pextrb $10, %xmm4, %eax
4131; SSE42-NEXT:    andb $1, %al
4132; SSE42-NEXT:    movb %al, 2(%rdi)
4133; SSE42-NEXT:    pextrb $9, %xmm4, %eax
4134; SSE42-NEXT:    andb $1, %al
4135; SSE42-NEXT:    movb %al, 2(%rdi)
4136; SSE42-NEXT:    pextrb $8, %xmm4, %eax
4137; SSE42-NEXT:    andb $1, %al
4138; SSE42-NEXT:    movb %al, 2(%rdi)
4139; SSE42-NEXT:    pextrb $7, %xmm4, %eax
4140; SSE42-NEXT:    andb $1, %al
4141; SSE42-NEXT:    movb %al, 2(%rdi)
4142; SSE42-NEXT:    pextrb $6, %xmm4, %eax
4143; SSE42-NEXT:    andb $1, %al
4144; SSE42-NEXT:    movb %al, 2(%rdi)
4145; SSE42-NEXT:    pextrb $5, %xmm4, %eax
4146; SSE42-NEXT:    andb $1, %al
4147; SSE42-NEXT:    movb %al, 2(%rdi)
4148; SSE42-NEXT:    pextrb $4, %xmm4, %eax
4149; SSE42-NEXT:    andb $1, %al
4150; SSE42-NEXT:    movb %al, 2(%rdi)
4151; SSE42-NEXT:    pextrb $3, %xmm4, %eax
4152; SSE42-NEXT:    andb $1, %al
4153; SSE42-NEXT:    movb %al, 2(%rdi)
4154; SSE42-NEXT:    pextrb $2, %xmm4, %eax
4155; SSE42-NEXT:    andb $1, %al
4156; SSE42-NEXT:    movb %al, 2(%rdi)
4157; SSE42-NEXT:    pextrb $1, %xmm4, %eax
4158; SSE42-NEXT:    andb $1, %al
4159; SSE42-NEXT:    movb %al, 2(%rdi)
4160; SSE42-NEXT:    pextrb $0, %xmm4, %eax
4161; SSE42-NEXT:    andb $1, %al
4162; SSE42-NEXT:    movb %al, 2(%rdi)
4163; SSE42-NEXT:    pextrb $15, %xmm0, %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 $13, %xmm0, %eax
4170; SSE42-NEXT:    andb $1, %al
4171; SSE42-NEXT:    movb %al, (%rdi)
4172; SSE42-NEXT:    pextrb $12, %xmm0, %eax
4173; SSE42-NEXT:    andb $1, %al
4174; SSE42-NEXT:    movb %al, (%rdi)
4175; SSE42-NEXT:    pextrb $11, %xmm0, %eax
4176; SSE42-NEXT:    andb $1, %al
4177; SSE42-NEXT:    movb %al, (%rdi)
4178; SSE42-NEXT:    pextrb $10, %xmm0, %eax
4179; SSE42-NEXT:    andb $1, %al
4180; SSE42-NEXT:    movb %al, (%rdi)
4181; SSE42-NEXT:    pextrb $9, %xmm0, %eax
4182; SSE42-NEXT:    andb $1, %al
4183; SSE42-NEXT:    movb %al, (%rdi)
4184; SSE42-NEXT:    pextrb $8, %xmm0, %eax
4185; SSE42-NEXT:    andb $1, %al
4186; SSE42-NEXT:    movb %al, (%rdi)
4187; SSE42-NEXT:    pextrb $7, %xmm0, %eax
4188; SSE42-NEXT:    andb $1, %al
4189; SSE42-NEXT:    movb %al, (%rdi)
4190; SSE42-NEXT:    pextrb $6, %xmm0, %eax
4191; SSE42-NEXT:    andb $1, %al
4192; SSE42-NEXT:    movb %al, (%rdi)
4193; SSE42-NEXT:    pextrb $5, %xmm0, %eax
4194; SSE42-NEXT:    andb $1, %al
4195; SSE42-NEXT:    movb %al, (%rdi)
4196; SSE42-NEXT:    pextrb $4, %xmm0, %eax
4197; SSE42-NEXT:    andb $1, %al
4198; SSE42-NEXT:    movb %al, (%rdi)
4199; SSE42-NEXT:    pextrb $3, %xmm0, %eax
4200; SSE42-NEXT:    andb $1, %al
4201; SSE42-NEXT:    movb %al, (%rdi)
4202; SSE42-NEXT:    pextrb $2, %xmm0, %eax
4203; SSE42-NEXT:    andb $1, %al
4204; SSE42-NEXT:    movb %al, (%rdi)
4205; SSE42-NEXT:    pextrb $1, %xmm0, %eax
4206; SSE42-NEXT:    andb $1, %al
4207; SSE42-NEXT:    movb %al, (%rdi)
4208; SSE42-NEXT:    pextrb $0, %xmm0, %eax
4209; SSE42-NEXT:    andb $1, %al
4210; SSE42-NEXT:    movb %al, (%rdi)
4211; SSE42-NEXT:    movq %rdi, %rax
4212; SSE42-NEXT:    retq
4213;
4214; AVX1-LABEL: test_cmp_v32i32:
4215; AVX1:       # BB#0:
4216; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm8
4217; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm9
4218; AVX1-NEXT:    vpcmpgtd %xmm8, %xmm9, %xmm8
4219; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm3, %xmm3
4220; AVX1-NEXT:    vpacksswb %xmm8, %xmm3, %xmm8
4221; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
4222; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
4223; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm3, %xmm3
4224; AVX1-NEXT:    vpcmpgtd %xmm6, %xmm2, %xmm2
4225; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
4226; AVX1-NEXT:    vpacksswb %xmm8, %xmm2, %xmm2
4227; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
4228; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
4229; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm6, %xmm3
4230; AVX1-NEXT:    vpcmpgtd %xmm5, %xmm1, %xmm1
4231; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
4232; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm3
4233; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4234; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm5, %xmm3
4235; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm0, %xmm0
4236; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
4237; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
4238; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
4239; AVX1-NEXT:    retq
4240;
4241; AVX2-LABEL: test_cmp_v32i32:
4242; AVX2:       # BB#0:
4243; AVX2-NEXT:    vpcmpgtd %ymm7, %ymm3, %ymm3
4244; AVX2-NEXT:    vpcmpgtd %ymm6, %ymm2, %ymm2
4245; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
4246; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
4247; AVX2-NEXT:    vpcmpgtd %ymm5, %ymm1, %ymm1
4248; AVX2-NEXT:    vpcmpgtd %ymm4, %ymm0, %ymm0
4249; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
4250; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
4251; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
4252; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
4253; AVX2-NEXT:    retq
4254;
4255; AVX512F-LABEL: test_cmp_v32i32:
4256; AVX512F:       # BB#0:
4257; AVX512F-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
4258; AVX512F-NEXT:    vpextrd $1, %xmm4, %ecx
4259; AVX512F-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
4260; AVX512F-NEXT:    vpextrd $1, %xmm5, %edx
4261; AVX512F-NEXT:    xorl %eax, %eax
4262; AVX512F-NEXT:    cmpl %ecx, %edx
4263; AVX512F-NEXT:    movl $-1, %ecx
4264; AVX512F-NEXT:    movl $0, %edx
4265; AVX512F-NEXT:    cmovgl %ecx, %edx
4266; AVX512F-NEXT:    vmovd %xmm4, %esi
4267; AVX512F-NEXT:    vmovd %xmm5, %edi
4268; AVX512F-NEXT:    cmpl %esi, %edi
4269; AVX512F-NEXT:    movl $0, %esi
4270; AVX512F-NEXT:    cmovgl %ecx, %esi
4271; AVX512F-NEXT:    vmovd %esi, %xmm6
4272; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4273; AVX512F-NEXT:    vpextrd $2, %xmm4, %edx
4274; AVX512F-NEXT:    vpextrd $2, %xmm5, %esi
4275; AVX512F-NEXT:    cmpl %edx, %esi
4276; AVX512F-NEXT:    movl $0, %edx
4277; AVX512F-NEXT:    cmovgl %ecx, %edx
4278; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4279; AVX512F-NEXT:    vpextrd $3, %xmm4, %edx
4280; AVX512F-NEXT:    vpextrd $3, %xmm5, %esi
4281; AVX512F-NEXT:    cmpl %edx, %esi
4282; AVX512F-NEXT:    movl $0, %edx
4283; AVX512F-NEXT:    cmovgl %ecx, %edx
4284; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4285; AVX512F-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
4286; AVX512F-NEXT:    vpextrd $1, %xmm5, %edx
4287; AVX512F-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
4288; AVX512F-NEXT:    vpextrd $1, %xmm6, %esi
4289; AVX512F-NEXT:    cmpl %edx, %esi
4290; AVX512F-NEXT:    movl $0, %edx
4291; AVX512F-NEXT:    cmovgl %ecx, %edx
4292; AVX512F-NEXT:    vmovd %xmm5, %esi
4293; AVX512F-NEXT:    vmovd %xmm6, %edi
4294; AVX512F-NEXT:    cmpl %esi, %edi
4295; AVX512F-NEXT:    movl $0, %esi
4296; AVX512F-NEXT:    cmovgl %ecx, %esi
4297; AVX512F-NEXT:    vmovd %esi, %xmm7
4298; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4299; AVX512F-NEXT:    vpextrd $2, %xmm5, %edx
4300; AVX512F-NEXT:    vpextrd $2, %xmm6, %esi
4301; AVX512F-NEXT:    cmpl %edx, %esi
4302; AVX512F-NEXT:    movl $0, %edx
4303; AVX512F-NEXT:    cmovgl %ecx, %edx
4304; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4305; AVX512F-NEXT:    vpextrd $3, %xmm5, %edx
4306; AVX512F-NEXT:    vpextrd $3, %xmm6, %esi
4307; AVX512F-NEXT:    cmpl %edx, %esi
4308; AVX512F-NEXT:    movl $0, %edx
4309; AVX512F-NEXT:    cmovgl %ecx, %edx
4310; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4311; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
4312; AVX512F-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
4313; AVX512F-NEXT:    vpextrd $1, %xmm5, %edx
4314; AVX512F-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
4315; AVX512F-NEXT:    vpextrd $1, %xmm6, %esi
4316; AVX512F-NEXT:    cmpl %edx, %esi
4317; AVX512F-NEXT:    movl $0, %edx
4318; AVX512F-NEXT:    cmovgl %ecx, %edx
4319; AVX512F-NEXT:    vmovd %xmm5, %esi
4320; AVX512F-NEXT:    vmovd %xmm6, %edi
4321; AVX512F-NEXT:    cmpl %esi, %edi
4322; AVX512F-NEXT:    movl $0, %esi
4323; AVX512F-NEXT:    cmovgl %ecx, %esi
4324; AVX512F-NEXT:    vmovd %esi, %xmm7
4325; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4326; AVX512F-NEXT:    vpextrd $2, %xmm5, %edx
4327; AVX512F-NEXT:    vpextrd $2, %xmm6, %esi
4328; AVX512F-NEXT:    cmpl %edx, %esi
4329; AVX512F-NEXT:    movl $0, %edx
4330; AVX512F-NEXT:    cmovgl %ecx, %edx
4331; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4332; AVX512F-NEXT:    vpextrd $3, %xmm5, %edx
4333; AVX512F-NEXT:    vpextrd $3, %xmm6, %esi
4334; AVX512F-NEXT:    cmpl %edx, %esi
4335; AVX512F-NEXT:    movl $0, %edx
4336; AVX512F-NEXT:    cmovgl %ecx, %edx
4337; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4338; AVX512F-NEXT:    vpextrd $1, %xmm2, %edx
4339; AVX512F-NEXT:    vpextrd $1, %xmm0, %esi
4340; AVX512F-NEXT:    cmpl %edx, %esi
4341; AVX512F-NEXT:    movl $0, %edx
4342; AVX512F-NEXT:    cmovgl %ecx, %edx
4343; AVX512F-NEXT:    vmovd %xmm2, %esi
4344; AVX512F-NEXT:    vmovd %xmm0, %edi
4345; AVX512F-NEXT:    cmpl %esi, %edi
4346; AVX512F-NEXT:    movl $0, %esi
4347; AVX512F-NEXT:    cmovgl %ecx, %esi
4348; AVX512F-NEXT:    vmovd %esi, %xmm6
4349; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4350; AVX512F-NEXT:    vpextrd $2, %xmm2, %edx
4351; AVX512F-NEXT:    vpextrd $2, %xmm0, %esi
4352; AVX512F-NEXT:    cmpl %edx, %esi
4353; AVX512F-NEXT:    movl $0, %edx
4354; AVX512F-NEXT:    cmovgl %ecx, %edx
4355; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4356; AVX512F-NEXT:    vpextrd $3, %xmm2, %edx
4357; AVX512F-NEXT:    vpextrd $3, %xmm0, %esi
4358; AVX512F-NEXT:    cmpl %edx, %esi
4359; AVX512F-NEXT:    movl $0, %edx
4360; AVX512F-NEXT:    cmovgl %ecx, %edx
4361; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm0
4362; AVX512F-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
4363; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
4364; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
4365; AVX512F-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
4366; AVX512F-NEXT:    vpextrd $1, %xmm2, %edx
4367; AVX512F-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
4368; AVX512F-NEXT:    vpextrd $1, %xmm4, %esi
4369; AVX512F-NEXT:    cmpl %edx, %esi
4370; AVX512F-NEXT:    movl $0, %edx
4371; AVX512F-NEXT:    cmovgl %ecx, %edx
4372; AVX512F-NEXT:    vmovd %xmm2, %esi
4373; AVX512F-NEXT:    vmovd %xmm4, %edi
4374; AVX512F-NEXT:    cmpl %esi, %edi
4375; AVX512F-NEXT:    movl $0, %esi
4376; AVX512F-NEXT:    cmovgl %ecx, %esi
4377; AVX512F-NEXT:    vmovd %esi, %xmm5
4378; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4379; AVX512F-NEXT:    vpextrd $2, %xmm2, %edx
4380; AVX512F-NEXT:    vpextrd $2, %xmm4, %esi
4381; AVX512F-NEXT:    cmpl %edx, %esi
4382; AVX512F-NEXT:    movl $0, %edx
4383; AVX512F-NEXT:    cmovgl %ecx, %edx
4384; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4385; AVX512F-NEXT:    vpextrd $3, %xmm2, %edx
4386; AVX512F-NEXT:    vpextrd $3, %xmm4, %esi
4387; AVX512F-NEXT:    cmpl %edx, %esi
4388; AVX512F-NEXT:    movl $0, %edx
4389; AVX512F-NEXT:    cmovgl %ecx, %edx
4390; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm2
4391; AVX512F-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
4392; AVX512F-NEXT:    vpextrd $1, %xmm4, %edx
4393; AVX512F-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
4394; AVX512F-NEXT:    vpextrd $1, %xmm5, %esi
4395; AVX512F-NEXT:    cmpl %edx, %esi
4396; AVX512F-NEXT:    movl $0, %edx
4397; AVX512F-NEXT:    cmovgl %ecx, %edx
4398; AVX512F-NEXT:    vmovd %xmm4, %esi
4399; AVX512F-NEXT:    vmovd %xmm5, %edi
4400; AVX512F-NEXT:    cmpl %esi, %edi
4401; AVX512F-NEXT:    movl $0, %esi
4402; AVX512F-NEXT:    cmovgl %ecx, %esi
4403; AVX512F-NEXT:    vmovd %esi, %xmm6
4404; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4405; AVX512F-NEXT:    vpextrd $2, %xmm4, %edx
4406; AVX512F-NEXT:    vpextrd $2, %xmm5, %esi
4407; AVX512F-NEXT:    cmpl %edx, %esi
4408; AVX512F-NEXT:    movl $0, %edx
4409; AVX512F-NEXT:    cmovgl %ecx, %edx
4410; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4411; AVX512F-NEXT:    vpextrd $3, %xmm4, %edx
4412; AVX512F-NEXT:    vpextrd $3, %xmm5, %esi
4413; AVX512F-NEXT:    cmpl %edx, %esi
4414; AVX512F-NEXT:    movl $0, %edx
4415; AVX512F-NEXT:    cmovgl %ecx, %edx
4416; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4417; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
4418; AVX512F-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
4419; AVX512F-NEXT:    vpextrd $1, %xmm4, %edx
4420; AVX512F-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
4421; AVX512F-NEXT:    vpextrd $1, %xmm5, %esi
4422; AVX512F-NEXT:    cmpl %edx, %esi
4423; AVX512F-NEXT:    movl $0, %edx
4424; AVX512F-NEXT:    cmovgl %ecx, %edx
4425; AVX512F-NEXT:    vmovd %xmm4, %esi
4426; AVX512F-NEXT:    vmovd %xmm5, %edi
4427; AVX512F-NEXT:    cmpl %esi, %edi
4428; AVX512F-NEXT:    movl $0, %esi
4429; AVX512F-NEXT:    cmovgl %ecx, %esi
4430; AVX512F-NEXT:    vmovd %esi, %xmm6
4431; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4432; AVX512F-NEXT:    vpextrd $2, %xmm4, %edx
4433; AVX512F-NEXT:    vpextrd $2, %xmm5, %esi
4434; AVX512F-NEXT:    cmpl %edx, %esi
4435; AVX512F-NEXT:    movl $0, %edx
4436; AVX512F-NEXT:    cmovgl %ecx, %edx
4437; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4438; AVX512F-NEXT:    vpextrd $3, %xmm4, %edx
4439; AVX512F-NEXT:    vpextrd $3, %xmm5, %esi
4440; AVX512F-NEXT:    cmpl %edx, %esi
4441; AVX512F-NEXT:    movl $0, %edx
4442; AVX512F-NEXT:    cmovgl %ecx, %edx
4443; AVX512F-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4444; AVX512F-NEXT:    vpextrd $1, %xmm3, %edx
4445; AVX512F-NEXT:    vpextrd $1, %xmm1, %esi
4446; AVX512F-NEXT:    cmpl %edx, %esi
4447; AVX512F-NEXT:    movl $0, %edx
4448; AVX512F-NEXT:    cmovgl %ecx, %edx
4449; AVX512F-NEXT:    vmovd %xmm3, %esi
4450; AVX512F-NEXT:    vmovd %xmm1, %edi
4451; AVX512F-NEXT:    cmpl %esi, %edi
4452; AVX512F-NEXT:    movl $0, %esi
4453; AVX512F-NEXT:    cmovgl %ecx, %esi
4454; AVX512F-NEXT:    vmovd %esi, %xmm5
4455; AVX512F-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4456; AVX512F-NEXT:    vpextrd $2, %xmm3, %edx
4457; AVX512F-NEXT:    vpextrd $2, %xmm1, %esi
4458; AVX512F-NEXT:    cmpl %edx, %esi
4459; AVX512F-NEXT:    movl $0, %edx
4460; AVX512F-NEXT:    cmovgl %ecx, %edx
4461; AVX512F-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4462; AVX512F-NEXT:    vpextrd $3, %xmm3, %edx
4463; AVX512F-NEXT:    vpextrd $3, %xmm1, %esi
4464; AVX512F-NEXT:    cmpl %edx, %esi
4465; AVX512F-NEXT:    cmovgl %ecx, %eax
4466; AVX512F-NEXT:    vpinsrd $3, %eax, %xmm5, %xmm1
4467; AVX512F-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
4468; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
4469; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
4470; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4471; AVX512F-NEXT:    retq
4472;
4473; AVX512DQ-LABEL: test_cmp_v32i32:
4474; AVX512DQ:       # BB#0:
4475; AVX512DQ-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
4476; AVX512DQ-NEXT:    vpextrd $1, %xmm4, %ecx
4477; AVX512DQ-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
4478; AVX512DQ-NEXT:    vpextrd $1, %xmm5, %edx
4479; AVX512DQ-NEXT:    xorl %eax, %eax
4480; AVX512DQ-NEXT:    cmpl %ecx, %edx
4481; AVX512DQ-NEXT:    movl $-1, %ecx
4482; AVX512DQ-NEXT:    movl $0, %edx
4483; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4484; AVX512DQ-NEXT:    vmovd %xmm4, %esi
4485; AVX512DQ-NEXT:    vmovd %xmm5, %edi
4486; AVX512DQ-NEXT:    cmpl %esi, %edi
4487; AVX512DQ-NEXT:    movl $0, %esi
4488; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4489; AVX512DQ-NEXT:    vmovd %esi, %xmm6
4490; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4491; AVX512DQ-NEXT:    vpextrd $2, %xmm4, %edx
4492; AVX512DQ-NEXT:    vpextrd $2, %xmm5, %esi
4493; AVX512DQ-NEXT:    cmpl %edx, %esi
4494; AVX512DQ-NEXT:    movl $0, %edx
4495; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4496; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4497; AVX512DQ-NEXT:    vpextrd $3, %xmm4, %edx
4498; AVX512DQ-NEXT:    vpextrd $3, %xmm5, %esi
4499; AVX512DQ-NEXT:    cmpl %edx, %esi
4500; AVX512DQ-NEXT:    movl $0, %edx
4501; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4502; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4503; AVX512DQ-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
4504; AVX512DQ-NEXT:    vpextrd $1, %xmm5, %edx
4505; AVX512DQ-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
4506; AVX512DQ-NEXT:    vpextrd $1, %xmm6, %esi
4507; AVX512DQ-NEXT:    cmpl %edx, %esi
4508; AVX512DQ-NEXT:    movl $0, %edx
4509; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4510; AVX512DQ-NEXT:    vmovd %xmm5, %esi
4511; AVX512DQ-NEXT:    vmovd %xmm6, %edi
4512; AVX512DQ-NEXT:    cmpl %esi, %edi
4513; AVX512DQ-NEXT:    movl $0, %esi
4514; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4515; AVX512DQ-NEXT:    vmovd %esi, %xmm7
4516; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4517; AVX512DQ-NEXT:    vpextrd $2, %xmm5, %edx
4518; AVX512DQ-NEXT:    vpextrd $2, %xmm6, %esi
4519; AVX512DQ-NEXT:    cmpl %edx, %esi
4520; AVX512DQ-NEXT:    movl $0, %edx
4521; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4522; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4523; AVX512DQ-NEXT:    vpextrd $3, %xmm5, %edx
4524; AVX512DQ-NEXT:    vpextrd $3, %xmm6, %esi
4525; AVX512DQ-NEXT:    cmpl %edx, %esi
4526; AVX512DQ-NEXT:    movl $0, %edx
4527; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4528; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4529; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
4530; AVX512DQ-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
4531; AVX512DQ-NEXT:    vpextrd $1, %xmm5, %edx
4532; AVX512DQ-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
4533; AVX512DQ-NEXT:    vpextrd $1, %xmm6, %esi
4534; AVX512DQ-NEXT:    cmpl %edx, %esi
4535; AVX512DQ-NEXT:    movl $0, %edx
4536; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4537; AVX512DQ-NEXT:    vmovd %xmm5, %esi
4538; AVX512DQ-NEXT:    vmovd %xmm6, %edi
4539; AVX512DQ-NEXT:    cmpl %esi, %edi
4540; AVX512DQ-NEXT:    movl $0, %esi
4541; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4542; AVX512DQ-NEXT:    vmovd %esi, %xmm7
4543; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4544; AVX512DQ-NEXT:    vpextrd $2, %xmm5, %edx
4545; AVX512DQ-NEXT:    vpextrd $2, %xmm6, %esi
4546; AVX512DQ-NEXT:    cmpl %edx, %esi
4547; AVX512DQ-NEXT:    movl $0, %edx
4548; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4549; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4550; AVX512DQ-NEXT:    vpextrd $3, %xmm5, %edx
4551; AVX512DQ-NEXT:    vpextrd $3, %xmm6, %esi
4552; AVX512DQ-NEXT:    cmpl %edx, %esi
4553; AVX512DQ-NEXT:    movl $0, %edx
4554; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4555; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4556; AVX512DQ-NEXT:    vpextrd $1, %xmm2, %edx
4557; AVX512DQ-NEXT:    vpextrd $1, %xmm0, %esi
4558; AVX512DQ-NEXT:    cmpl %edx, %esi
4559; AVX512DQ-NEXT:    movl $0, %edx
4560; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4561; AVX512DQ-NEXT:    vmovd %xmm2, %esi
4562; AVX512DQ-NEXT:    vmovd %xmm0, %edi
4563; AVX512DQ-NEXT:    cmpl %esi, %edi
4564; AVX512DQ-NEXT:    movl $0, %esi
4565; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4566; AVX512DQ-NEXT:    vmovd %esi, %xmm6
4567; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4568; AVX512DQ-NEXT:    vpextrd $2, %xmm2, %edx
4569; AVX512DQ-NEXT:    vpextrd $2, %xmm0, %esi
4570; AVX512DQ-NEXT:    cmpl %edx, %esi
4571; AVX512DQ-NEXT:    movl $0, %edx
4572; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4573; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4574; AVX512DQ-NEXT:    vpextrd $3, %xmm2, %edx
4575; AVX512DQ-NEXT:    vpextrd $3, %xmm0, %esi
4576; AVX512DQ-NEXT:    cmpl %edx, %esi
4577; AVX512DQ-NEXT:    movl $0, %edx
4578; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4579; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm0
4580; AVX512DQ-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
4581; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm4, %zmm0, %zmm0
4582; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
4583; AVX512DQ-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
4584; AVX512DQ-NEXT:    vpextrd $1, %xmm2, %edx
4585; AVX512DQ-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
4586; AVX512DQ-NEXT:    vpextrd $1, %xmm4, %esi
4587; AVX512DQ-NEXT:    cmpl %edx, %esi
4588; AVX512DQ-NEXT:    movl $0, %edx
4589; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4590; AVX512DQ-NEXT:    vmovd %xmm2, %esi
4591; AVX512DQ-NEXT:    vmovd %xmm4, %edi
4592; AVX512DQ-NEXT:    cmpl %esi, %edi
4593; AVX512DQ-NEXT:    movl $0, %esi
4594; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4595; AVX512DQ-NEXT:    vmovd %esi, %xmm5
4596; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4597; AVX512DQ-NEXT:    vpextrd $2, %xmm2, %edx
4598; AVX512DQ-NEXT:    vpextrd $2, %xmm4, %esi
4599; AVX512DQ-NEXT:    cmpl %edx, %esi
4600; AVX512DQ-NEXT:    movl $0, %edx
4601; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4602; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4603; AVX512DQ-NEXT:    vpextrd $3, %xmm2, %edx
4604; AVX512DQ-NEXT:    vpextrd $3, %xmm4, %esi
4605; AVX512DQ-NEXT:    cmpl %edx, %esi
4606; AVX512DQ-NEXT:    movl $0, %edx
4607; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4608; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm2
4609; AVX512DQ-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
4610; AVX512DQ-NEXT:    vpextrd $1, %xmm4, %edx
4611; AVX512DQ-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
4612; AVX512DQ-NEXT:    vpextrd $1, %xmm5, %esi
4613; AVX512DQ-NEXT:    cmpl %edx, %esi
4614; AVX512DQ-NEXT:    movl $0, %edx
4615; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4616; AVX512DQ-NEXT:    vmovd %xmm4, %esi
4617; AVX512DQ-NEXT:    vmovd %xmm5, %edi
4618; AVX512DQ-NEXT:    cmpl %esi, %edi
4619; AVX512DQ-NEXT:    movl $0, %esi
4620; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4621; AVX512DQ-NEXT:    vmovd %esi, %xmm6
4622; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4623; AVX512DQ-NEXT:    vpextrd $2, %xmm4, %edx
4624; AVX512DQ-NEXT:    vpextrd $2, %xmm5, %esi
4625; AVX512DQ-NEXT:    cmpl %edx, %esi
4626; AVX512DQ-NEXT:    movl $0, %edx
4627; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4628; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4629; AVX512DQ-NEXT:    vpextrd $3, %xmm4, %edx
4630; AVX512DQ-NEXT:    vpextrd $3, %xmm5, %esi
4631; AVX512DQ-NEXT:    cmpl %edx, %esi
4632; AVX512DQ-NEXT:    movl $0, %edx
4633; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4634; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4635; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
4636; AVX512DQ-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
4637; AVX512DQ-NEXT:    vpextrd $1, %xmm4, %edx
4638; AVX512DQ-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
4639; AVX512DQ-NEXT:    vpextrd $1, %xmm5, %esi
4640; AVX512DQ-NEXT:    cmpl %edx, %esi
4641; AVX512DQ-NEXT:    movl $0, %edx
4642; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4643; AVX512DQ-NEXT:    vmovd %xmm4, %esi
4644; AVX512DQ-NEXT:    vmovd %xmm5, %edi
4645; AVX512DQ-NEXT:    cmpl %esi, %edi
4646; AVX512DQ-NEXT:    movl $0, %esi
4647; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4648; AVX512DQ-NEXT:    vmovd %esi, %xmm6
4649; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4650; AVX512DQ-NEXT:    vpextrd $2, %xmm4, %edx
4651; AVX512DQ-NEXT:    vpextrd $2, %xmm5, %esi
4652; AVX512DQ-NEXT:    cmpl %edx, %esi
4653; AVX512DQ-NEXT:    movl $0, %edx
4654; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4655; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4656; AVX512DQ-NEXT:    vpextrd $3, %xmm4, %edx
4657; AVX512DQ-NEXT:    vpextrd $3, %xmm5, %esi
4658; AVX512DQ-NEXT:    cmpl %edx, %esi
4659; AVX512DQ-NEXT:    movl $0, %edx
4660; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4661; AVX512DQ-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4662; AVX512DQ-NEXT:    vpextrd $1, %xmm3, %edx
4663; AVX512DQ-NEXT:    vpextrd $1, %xmm1, %esi
4664; AVX512DQ-NEXT:    cmpl %edx, %esi
4665; AVX512DQ-NEXT:    movl $0, %edx
4666; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4667; AVX512DQ-NEXT:    vmovd %xmm3, %esi
4668; AVX512DQ-NEXT:    vmovd %xmm1, %edi
4669; AVX512DQ-NEXT:    cmpl %esi, %edi
4670; AVX512DQ-NEXT:    movl $0, %esi
4671; AVX512DQ-NEXT:    cmovgl %ecx, %esi
4672; AVX512DQ-NEXT:    vmovd %esi, %xmm5
4673; AVX512DQ-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4674; AVX512DQ-NEXT:    vpextrd $2, %xmm3, %edx
4675; AVX512DQ-NEXT:    vpextrd $2, %xmm1, %esi
4676; AVX512DQ-NEXT:    cmpl %edx, %esi
4677; AVX512DQ-NEXT:    movl $0, %edx
4678; AVX512DQ-NEXT:    cmovgl %ecx, %edx
4679; AVX512DQ-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4680; AVX512DQ-NEXT:    vpextrd $3, %xmm3, %edx
4681; AVX512DQ-NEXT:    vpextrd $3, %xmm1, %esi
4682; AVX512DQ-NEXT:    cmpl %edx, %esi
4683; AVX512DQ-NEXT:    cmovgl %ecx, %eax
4684; AVX512DQ-NEXT:    vpinsrd $3, %eax, %xmm5, %xmm1
4685; AVX512DQ-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
4686; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm2, %zmm1, %zmm1
4687; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm1
4688; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4689; AVX512DQ-NEXT:    retq
4690;
4691; AVX512BW-LABEL: test_cmp_v32i32:
4692; AVX512BW:       # BB#0:
4693; AVX512BW-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
4694; AVX512BW-NEXT:    vpextrd $1, %xmm4, %ecx
4695; AVX512BW-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
4696; AVX512BW-NEXT:    vpextrd $1, %xmm5, %edx
4697; AVX512BW-NEXT:    xorl %eax, %eax
4698; AVX512BW-NEXT:    cmpl %ecx, %edx
4699; AVX512BW-NEXT:    movl $-1, %ecx
4700; AVX512BW-NEXT:    movl $0, %edx
4701; AVX512BW-NEXT:    cmovgl %ecx, %edx
4702; AVX512BW-NEXT:    vmovd %xmm4, %esi
4703; AVX512BW-NEXT:    vmovd %xmm5, %edi
4704; AVX512BW-NEXT:    cmpl %esi, %edi
4705; AVX512BW-NEXT:    movl $0, %esi
4706; AVX512BW-NEXT:    cmovgl %ecx, %esi
4707; AVX512BW-NEXT:    vmovd %esi, %xmm6
4708; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4709; AVX512BW-NEXT:    vpextrd $2, %xmm4, %edx
4710; AVX512BW-NEXT:    vpextrd $2, %xmm5, %esi
4711; AVX512BW-NEXT:    cmpl %edx, %esi
4712; AVX512BW-NEXT:    movl $0, %edx
4713; AVX512BW-NEXT:    cmovgl %ecx, %edx
4714; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4715; AVX512BW-NEXT:    vpextrd $3, %xmm4, %edx
4716; AVX512BW-NEXT:    vpextrd $3, %xmm5, %esi
4717; AVX512BW-NEXT:    cmpl %edx, %esi
4718; AVX512BW-NEXT:    movl $0, %edx
4719; AVX512BW-NEXT:    cmovgl %ecx, %edx
4720; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4721; AVX512BW-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
4722; AVX512BW-NEXT:    vpextrd $1, %xmm5, %edx
4723; AVX512BW-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
4724; AVX512BW-NEXT:    vpextrd $1, %xmm6, %esi
4725; AVX512BW-NEXT:    cmpl %edx, %esi
4726; AVX512BW-NEXT:    movl $0, %edx
4727; AVX512BW-NEXT:    cmovgl %ecx, %edx
4728; AVX512BW-NEXT:    vmovd %xmm5, %esi
4729; AVX512BW-NEXT:    vmovd %xmm6, %edi
4730; AVX512BW-NEXT:    cmpl %esi, %edi
4731; AVX512BW-NEXT:    movl $0, %esi
4732; AVX512BW-NEXT:    cmovgl %ecx, %esi
4733; AVX512BW-NEXT:    vmovd %esi, %xmm7
4734; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4735; AVX512BW-NEXT:    vpextrd $2, %xmm5, %edx
4736; AVX512BW-NEXT:    vpextrd $2, %xmm6, %esi
4737; AVX512BW-NEXT:    cmpl %edx, %esi
4738; AVX512BW-NEXT:    movl $0, %edx
4739; AVX512BW-NEXT:    cmovgl %ecx, %edx
4740; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4741; AVX512BW-NEXT:    vpextrd $3, %xmm5, %edx
4742; AVX512BW-NEXT:    vpextrd $3, %xmm6, %esi
4743; AVX512BW-NEXT:    cmpl %edx, %esi
4744; AVX512BW-NEXT:    movl $0, %edx
4745; AVX512BW-NEXT:    cmovgl %ecx, %edx
4746; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4747; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
4748; AVX512BW-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
4749; AVX512BW-NEXT:    vpextrd $1, %xmm5, %edx
4750; AVX512BW-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
4751; AVX512BW-NEXT:    vpextrd $1, %xmm6, %esi
4752; AVX512BW-NEXT:    cmpl %edx, %esi
4753; AVX512BW-NEXT:    movl $0, %edx
4754; AVX512BW-NEXT:    cmovgl %ecx, %edx
4755; AVX512BW-NEXT:    vmovd %xmm5, %esi
4756; AVX512BW-NEXT:    vmovd %xmm6, %edi
4757; AVX512BW-NEXT:    cmpl %esi, %edi
4758; AVX512BW-NEXT:    movl $0, %esi
4759; AVX512BW-NEXT:    cmovgl %ecx, %esi
4760; AVX512BW-NEXT:    vmovd %esi, %xmm7
4761; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
4762; AVX512BW-NEXT:    vpextrd $2, %xmm5, %edx
4763; AVX512BW-NEXT:    vpextrd $2, %xmm6, %esi
4764; AVX512BW-NEXT:    cmpl %edx, %esi
4765; AVX512BW-NEXT:    movl $0, %edx
4766; AVX512BW-NEXT:    cmovgl %ecx, %edx
4767; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
4768; AVX512BW-NEXT:    vpextrd $3, %xmm5, %edx
4769; AVX512BW-NEXT:    vpextrd $3, %xmm6, %esi
4770; AVX512BW-NEXT:    cmpl %edx, %esi
4771; AVX512BW-NEXT:    movl $0, %edx
4772; AVX512BW-NEXT:    cmovgl %ecx, %edx
4773; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
4774; AVX512BW-NEXT:    vpextrd $1, %xmm2, %edx
4775; AVX512BW-NEXT:    vpextrd $1, %xmm0, %esi
4776; AVX512BW-NEXT:    cmpl %edx, %esi
4777; AVX512BW-NEXT:    movl $0, %edx
4778; AVX512BW-NEXT:    cmovgl %ecx, %edx
4779; AVX512BW-NEXT:    vmovd %xmm2, %esi
4780; AVX512BW-NEXT:    vmovd %xmm0, %edi
4781; AVX512BW-NEXT:    cmpl %esi, %edi
4782; AVX512BW-NEXT:    movl $0, %esi
4783; AVX512BW-NEXT:    cmovgl %ecx, %esi
4784; AVX512BW-NEXT:    vmovd %esi, %xmm6
4785; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4786; AVX512BW-NEXT:    vpextrd $2, %xmm2, %edx
4787; AVX512BW-NEXT:    vpextrd $2, %xmm0, %esi
4788; AVX512BW-NEXT:    cmpl %edx, %esi
4789; AVX512BW-NEXT:    movl $0, %edx
4790; AVX512BW-NEXT:    cmovgl %ecx, %edx
4791; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4792; AVX512BW-NEXT:    vpextrd $3, %xmm2, %edx
4793; AVX512BW-NEXT:    vpextrd $3, %xmm0, %esi
4794; AVX512BW-NEXT:    cmpl %edx, %esi
4795; AVX512BW-NEXT:    movl $0, %edx
4796; AVX512BW-NEXT:    cmovgl %ecx, %edx
4797; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm0
4798; AVX512BW-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
4799; AVX512BW-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
4800; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
4801; AVX512BW-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
4802; AVX512BW-NEXT:    vpextrd $1, %xmm2, %edx
4803; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
4804; AVX512BW-NEXT:    vpextrd $1, %xmm4, %esi
4805; AVX512BW-NEXT:    cmpl %edx, %esi
4806; AVX512BW-NEXT:    movl $0, %edx
4807; AVX512BW-NEXT:    cmovgl %ecx, %edx
4808; AVX512BW-NEXT:    vmovd %xmm2, %esi
4809; AVX512BW-NEXT:    vmovd %xmm4, %edi
4810; AVX512BW-NEXT:    cmpl %esi, %edi
4811; AVX512BW-NEXT:    movl $0, %esi
4812; AVX512BW-NEXT:    cmovgl %ecx, %esi
4813; AVX512BW-NEXT:    vmovd %esi, %xmm5
4814; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4815; AVX512BW-NEXT:    vpextrd $2, %xmm2, %edx
4816; AVX512BW-NEXT:    vpextrd $2, %xmm4, %esi
4817; AVX512BW-NEXT:    cmpl %edx, %esi
4818; AVX512BW-NEXT:    movl $0, %edx
4819; AVX512BW-NEXT:    cmovgl %ecx, %edx
4820; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4821; AVX512BW-NEXT:    vpextrd $3, %xmm2, %edx
4822; AVX512BW-NEXT:    vpextrd $3, %xmm4, %esi
4823; AVX512BW-NEXT:    cmpl %edx, %esi
4824; AVX512BW-NEXT:    movl $0, %edx
4825; AVX512BW-NEXT:    cmovgl %ecx, %edx
4826; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm2
4827; AVX512BW-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
4828; AVX512BW-NEXT:    vpextrd $1, %xmm4, %edx
4829; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
4830; AVX512BW-NEXT:    vpextrd $1, %xmm5, %esi
4831; AVX512BW-NEXT:    cmpl %edx, %esi
4832; AVX512BW-NEXT:    movl $0, %edx
4833; AVX512BW-NEXT:    cmovgl %ecx, %edx
4834; AVX512BW-NEXT:    vmovd %xmm4, %esi
4835; AVX512BW-NEXT:    vmovd %xmm5, %edi
4836; AVX512BW-NEXT:    cmpl %esi, %edi
4837; AVX512BW-NEXT:    movl $0, %esi
4838; AVX512BW-NEXT:    cmovgl %ecx, %esi
4839; AVX512BW-NEXT:    vmovd %esi, %xmm6
4840; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4841; AVX512BW-NEXT:    vpextrd $2, %xmm4, %edx
4842; AVX512BW-NEXT:    vpextrd $2, %xmm5, %esi
4843; AVX512BW-NEXT:    cmpl %edx, %esi
4844; AVX512BW-NEXT:    movl $0, %edx
4845; AVX512BW-NEXT:    cmovgl %ecx, %edx
4846; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4847; AVX512BW-NEXT:    vpextrd $3, %xmm4, %edx
4848; AVX512BW-NEXT:    vpextrd $3, %xmm5, %esi
4849; AVX512BW-NEXT:    cmpl %edx, %esi
4850; AVX512BW-NEXT:    movl $0, %edx
4851; AVX512BW-NEXT:    cmovgl %ecx, %edx
4852; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4853; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
4854; AVX512BW-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
4855; AVX512BW-NEXT:    vpextrd $1, %xmm4, %edx
4856; AVX512BW-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
4857; AVX512BW-NEXT:    vpextrd $1, %xmm5, %esi
4858; AVX512BW-NEXT:    cmpl %edx, %esi
4859; AVX512BW-NEXT:    movl $0, %edx
4860; AVX512BW-NEXT:    cmovgl %ecx, %edx
4861; AVX512BW-NEXT:    vmovd %xmm4, %esi
4862; AVX512BW-NEXT:    vmovd %xmm5, %edi
4863; AVX512BW-NEXT:    cmpl %esi, %edi
4864; AVX512BW-NEXT:    movl $0, %esi
4865; AVX512BW-NEXT:    cmovgl %ecx, %esi
4866; AVX512BW-NEXT:    vmovd %esi, %xmm6
4867; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
4868; AVX512BW-NEXT:    vpextrd $2, %xmm4, %edx
4869; AVX512BW-NEXT:    vpextrd $2, %xmm5, %esi
4870; AVX512BW-NEXT:    cmpl %edx, %esi
4871; AVX512BW-NEXT:    movl $0, %edx
4872; AVX512BW-NEXT:    cmovgl %ecx, %edx
4873; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
4874; AVX512BW-NEXT:    vpextrd $3, %xmm4, %edx
4875; AVX512BW-NEXT:    vpextrd $3, %xmm5, %esi
4876; AVX512BW-NEXT:    cmpl %edx, %esi
4877; AVX512BW-NEXT:    movl $0, %edx
4878; AVX512BW-NEXT:    cmovgl %ecx, %edx
4879; AVX512BW-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
4880; AVX512BW-NEXT:    vpextrd $1, %xmm3, %edx
4881; AVX512BW-NEXT:    vpextrd $1, %xmm1, %esi
4882; AVX512BW-NEXT:    cmpl %edx, %esi
4883; AVX512BW-NEXT:    movl $0, %edx
4884; AVX512BW-NEXT:    cmovgl %ecx, %edx
4885; AVX512BW-NEXT:    vmovd %xmm3, %esi
4886; AVX512BW-NEXT:    vmovd %xmm1, %edi
4887; AVX512BW-NEXT:    cmpl %esi, %edi
4888; AVX512BW-NEXT:    movl $0, %esi
4889; AVX512BW-NEXT:    cmovgl %ecx, %esi
4890; AVX512BW-NEXT:    vmovd %esi, %xmm5
4891; AVX512BW-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
4892; AVX512BW-NEXT:    vpextrd $2, %xmm3, %edx
4893; AVX512BW-NEXT:    vpextrd $2, %xmm1, %esi
4894; AVX512BW-NEXT:    cmpl %edx, %esi
4895; AVX512BW-NEXT:    movl $0, %edx
4896; AVX512BW-NEXT:    cmovgl %ecx, %edx
4897; AVX512BW-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
4898; AVX512BW-NEXT:    vpextrd $3, %xmm3, %edx
4899; AVX512BW-NEXT:    vpextrd $3, %xmm1, %esi
4900; AVX512BW-NEXT:    cmpl %edx, %esi
4901; AVX512BW-NEXT:    cmovgl %ecx, %eax
4902; AVX512BW-NEXT:    vpinsrd $3, %eax, %xmm5, %xmm1
4903; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
4904; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
4905; AVX512BW-NEXT:    vpmovdw %zmm1, %ymm1
4906; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
4907; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
4908; AVX512BW-NEXT:    retq
4909  %1 = icmp sgt <32 x i32> %a0, %a1
4910  ret <32 x i1> %1
4911}
4912
4913define <64 x i1> @test_cmp_v64i16(<64 x i16> %a0, <64 x i16> %a1) nounwind {
4914; SSE2-LABEL: test_cmp_v64i16:
4915; SSE2:       # BB#0:
4916; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
4917; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [255,255,255,255,255,255,255,255]
4918; SSE2-NEXT:    pand %xmm8, %xmm1
4919; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
4920; SSE2-NEXT:    pand %xmm8, %xmm0
4921; SSE2-NEXT:    packuswb %xmm1, %xmm0
4922; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
4923; SSE2-NEXT:    pand %xmm8, %xmm3
4924; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
4925; SSE2-NEXT:    pand %xmm8, %xmm2
4926; SSE2-NEXT:    packuswb %xmm3, %xmm2
4927; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
4928; SSE2-NEXT:    pand %xmm8, %xmm5
4929; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
4930; SSE2-NEXT:    pand %xmm8, %xmm4
4931; SSE2-NEXT:    packuswb %xmm5, %xmm4
4932; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
4933; SSE2-NEXT:    pand %xmm8, %xmm7
4934; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
4935; SSE2-NEXT:    pand %xmm8, %xmm6
4936; SSE2-NEXT:    packuswb %xmm7, %xmm6
4937; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
4938; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4939; SSE2-NEXT:    andb $1, %al
4940; SSE2-NEXT:    movb %al, 6(%rdi)
4941; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
4942; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4943; SSE2-NEXT:    andb $1, %al
4944; SSE2-NEXT:    movb %al, 4(%rdi)
4945; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
4946; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4947; SSE2-NEXT:    andb $1, %al
4948; SSE2-NEXT:    movb %al, 2(%rdi)
4949; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
4950; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4951; SSE2-NEXT:    andb $1, %al
4952; SSE2-NEXT:    movb %al, (%rdi)
4953; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4954; SSE2-NEXT:    andb $1, %al
4955; SSE2-NEXT:    movb %al, 6(%rdi)
4956; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4957; SSE2-NEXT:    andb $1, %al
4958; SSE2-NEXT:    movb %al, 4(%rdi)
4959; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4960; SSE2-NEXT:    andb $1, %al
4961; SSE2-NEXT:    movb %al, 2(%rdi)
4962; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4963; SSE2-NEXT:    andb $1, %al
4964; SSE2-NEXT:    movb %al, (%rdi)
4965; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4966; SSE2-NEXT:    andb $1, %al
4967; SSE2-NEXT:    movb %al, 6(%rdi)
4968; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4969; SSE2-NEXT:    andb $1, %al
4970; SSE2-NEXT:    movb %al, 4(%rdi)
4971; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4972; SSE2-NEXT:    andb $1, %al
4973; SSE2-NEXT:    movb %al, 2(%rdi)
4974; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4975; SSE2-NEXT:    andb $1, %al
4976; SSE2-NEXT:    movb %al, (%rdi)
4977; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4978; SSE2-NEXT:    andb $1, %al
4979; SSE2-NEXT:    movb %al, 6(%rdi)
4980; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4981; SSE2-NEXT:    andb $1, %al
4982; SSE2-NEXT:    movb %al, 4(%rdi)
4983; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4984; SSE2-NEXT:    andb $1, %al
4985; SSE2-NEXT:    movb %al, 2(%rdi)
4986; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4987; SSE2-NEXT:    andb $1, %al
4988; SSE2-NEXT:    movb %al, (%rdi)
4989; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4990; SSE2-NEXT:    andb $1, %al
4991; SSE2-NEXT:    movb %al, 6(%rdi)
4992; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4993; SSE2-NEXT:    andb $1, %al
4994; SSE2-NEXT:    movb %al, 4(%rdi)
4995; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4996; SSE2-NEXT:    andb $1, %al
4997; SSE2-NEXT:    movb %al, 2(%rdi)
4998; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4999; SSE2-NEXT:    andb $1, %al
5000; SSE2-NEXT:    movb %al, (%rdi)
5001; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5002; SSE2-NEXT:    andb $1, %al
5003; SSE2-NEXT:    movb %al, 6(%rdi)
5004; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5005; SSE2-NEXT:    andb $1, %al
5006; SSE2-NEXT:    movb %al, 4(%rdi)
5007; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5008; SSE2-NEXT:    andb $1, %al
5009; SSE2-NEXT:    movb %al, 2(%rdi)
5010; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5011; SSE2-NEXT:    andb $1, %al
5012; SSE2-NEXT:    movb %al, (%rdi)
5013; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5014; SSE2-NEXT:    andb $1, %al
5015; SSE2-NEXT:    movb %al, 6(%rdi)
5016; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5017; SSE2-NEXT:    andb $1, %al
5018; SSE2-NEXT:    movb %al, 4(%rdi)
5019; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5020; SSE2-NEXT:    andb $1, %al
5021; SSE2-NEXT:    movb %al, 2(%rdi)
5022; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5023; SSE2-NEXT:    andb $1, %al
5024; SSE2-NEXT:    movb %al, (%rdi)
5025; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5026; SSE2-NEXT:    andb $1, %al
5027; SSE2-NEXT:    movb %al, 6(%rdi)
5028; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5029; SSE2-NEXT:    andb $1, %al
5030; SSE2-NEXT:    movb %al, 4(%rdi)
5031; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5032; SSE2-NEXT:    andb $1, %al
5033; SSE2-NEXT:    movb %al, 2(%rdi)
5034; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5035; SSE2-NEXT:    andb $1, %al
5036; SSE2-NEXT:    movb %al, (%rdi)
5037; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5038; SSE2-NEXT:    andb $1, %al
5039; SSE2-NEXT:    movb %al, 6(%rdi)
5040; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5041; SSE2-NEXT:    andb $1, %al
5042; SSE2-NEXT:    movb %al, 4(%rdi)
5043; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5044; SSE2-NEXT:    andb $1, %al
5045; SSE2-NEXT:    movb %al, 2(%rdi)
5046; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5047; SSE2-NEXT:    andb $1, %al
5048; SSE2-NEXT:    movb %al, (%rdi)
5049; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5050; SSE2-NEXT:    andb $1, %al
5051; SSE2-NEXT:    movb %al, 6(%rdi)
5052; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5053; SSE2-NEXT:    andb $1, %al
5054; SSE2-NEXT:    movb %al, 4(%rdi)
5055; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5056; SSE2-NEXT:    andb $1, %al
5057; SSE2-NEXT:    movb %al, 2(%rdi)
5058; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5059; SSE2-NEXT:    andb $1, %al
5060; SSE2-NEXT:    movb %al, (%rdi)
5061; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5062; SSE2-NEXT:    andb $1, %al
5063; SSE2-NEXT:    movb %al, 6(%rdi)
5064; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5065; SSE2-NEXT:    andb $1, %al
5066; SSE2-NEXT:    movb %al, 4(%rdi)
5067; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5068; SSE2-NEXT:    andb $1, %al
5069; SSE2-NEXT:    movb %al, 2(%rdi)
5070; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5071; SSE2-NEXT:    andb $1, %al
5072; SSE2-NEXT:    movb %al, (%rdi)
5073; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5074; SSE2-NEXT:    andb $1, %al
5075; SSE2-NEXT:    movb %al, 6(%rdi)
5076; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5077; SSE2-NEXT:    andb $1, %al
5078; SSE2-NEXT:    movb %al, 4(%rdi)
5079; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5080; SSE2-NEXT:    andb $1, %al
5081; SSE2-NEXT:    movb %al, 2(%rdi)
5082; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5083; SSE2-NEXT:    andb $1, %al
5084; SSE2-NEXT:    movb %al, (%rdi)
5085; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5086; SSE2-NEXT:    andb $1, %al
5087; SSE2-NEXT:    movb %al, 6(%rdi)
5088; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5089; SSE2-NEXT:    andb $1, %al
5090; SSE2-NEXT:    movb %al, 4(%rdi)
5091; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5092; SSE2-NEXT:    andb $1, %al
5093; SSE2-NEXT:    movb %al, 2(%rdi)
5094; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5095; SSE2-NEXT:    andb $1, %al
5096; SSE2-NEXT:    movb %al, (%rdi)
5097; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5098; SSE2-NEXT:    andb $1, %al
5099; SSE2-NEXT:    movb %al, 6(%rdi)
5100; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5101; SSE2-NEXT:    andb $1, %al
5102; SSE2-NEXT:    movb %al, 4(%rdi)
5103; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5104; SSE2-NEXT:    andb $1, %al
5105; SSE2-NEXT:    movb %al, 2(%rdi)
5106; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5107; SSE2-NEXT:    andb $1, %al
5108; SSE2-NEXT:    movb %al, (%rdi)
5109; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5110; SSE2-NEXT:    andb $1, %al
5111; SSE2-NEXT:    movb %al, 6(%rdi)
5112; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5113; SSE2-NEXT:    andb $1, %al
5114; SSE2-NEXT:    movb %al, 4(%rdi)
5115; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5116; SSE2-NEXT:    andb $1, %al
5117; SSE2-NEXT:    movb %al, 2(%rdi)
5118; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5119; SSE2-NEXT:    andb $1, %al
5120; SSE2-NEXT:    movb %al, (%rdi)
5121; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5122; SSE2-NEXT:    andb $1, %al
5123; SSE2-NEXT:    movb %al, 6(%rdi)
5124; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5125; SSE2-NEXT:    andb $1, %al
5126; SSE2-NEXT:    movb %al, 4(%rdi)
5127; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5128; SSE2-NEXT:    andb $1, %al
5129; SSE2-NEXT:    movb %al, 2(%rdi)
5130; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5131; SSE2-NEXT:    andb $1, %al
5132; SSE2-NEXT:    movb %al, (%rdi)
5133; SSE2-NEXT:    movq %rdi, %rax
5134; SSE2-NEXT:    retq
5135;
5136; SSE42-LABEL: test_cmp_v64i16:
5137; SSE42:       # BB#0:
5138; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
5139; SSE42-NEXT:    movdqa {{.*#+}} xmm8 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
5140; SSE42-NEXT:    pshufb %xmm8, %xmm1
5141; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
5142; SSE42-NEXT:    pshufb %xmm8, %xmm0
5143; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
5144; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
5145; SSE42-NEXT:    pshufb %xmm8, %xmm3
5146; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
5147; SSE42-NEXT:    pshufb %xmm8, %xmm2
5148; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
5149; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
5150; SSE42-NEXT:    pshufb %xmm8, %xmm5
5151; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
5152; SSE42-NEXT:    pshufb %xmm8, %xmm4
5153; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
5154; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
5155; SSE42-NEXT:    pshufb %xmm8, %xmm7
5156; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
5157; SSE42-NEXT:    pshufb %xmm8, %xmm6
5158; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]
5159; SSE42-NEXT:    pextrb $15, %xmm6, %eax
5160; SSE42-NEXT:    andb $1, %al
5161; SSE42-NEXT:    movb %al, 6(%rdi)
5162; SSE42-NEXT:    pextrb $14, %xmm6, %eax
5163; SSE42-NEXT:    andb $1, %al
5164; SSE42-NEXT:    movb %al, 6(%rdi)
5165; SSE42-NEXT:    pextrb $13, %xmm6, %eax
5166; SSE42-NEXT:    andb $1, %al
5167; SSE42-NEXT:    movb %al, 6(%rdi)
5168; SSE42-NEXT:    pextrb $12, %xmm6, %eax
5169; SSE42-NEXT:    andb $1, %al
5170; SSE42-NEXT:    movb %al, 6(%rdi)
5171; SSE42-NEXT:    pextrb $11, %xmm6, %eax
5172; SSE42-NEXT:    andb $1, %al
5173; SSE42-NEXT:    movb %al, 6(%rdi)
5174; SSE42-NEXT:    pextrb $10, %xmm6, %eax
5175; SSE42-NEXT:    andb $1, %al
5176; SSE42-NEXT:    movb %al, 6(%rdi)
5177; SSE42-NEXT:    pextrb $9, %xmm6, %eax
5178; SSE42-NEXT:    andb $1, %al
5179; SSE42-NEXT:    movb %al, 6(%rdi)
5180; SSE42-NEXT:    pextrb $8, %xmm6, %eax
5181; SSE42-NEXT:    andb $1, %al
5182; SSE42-NEXT:    movb %al, 6(%rdi)
5183; SSE42-NEXT:    pextrb $7, %xmm6, %eax
5184; SSE42-NEXT:    andb $1, %al
5185; SSE42-NEXT:    movb %al, 6(%rdi)
5186; SSE42-NEXT:    pextrb $6, %xmm6, %eax
5187; SSE42-NEXT:    andb $1, %al
5188; SSE42-NEXT:    movb %al, 6(%rdi)
5189; SSE42-NEXT:    pextrb $5, %xmm6, %eax
5190; SSE42-NEXT:    andb $1, %al
5191; SSE42-NEXT:    movb %al, 6(%rdi)
5192; SSE42-NEXT:    pextrb $4, %xmm6, %eax
5193; SSE42-NEXT:    andb $1, %al
5194; SSE42-NEXT:    movb %al, 6(%rdi)
5195; SSE42-NEXT:    pextrb $3, %xmm6, %eax
5196; SSE42-NEXT:    andb $1, %al
5197; SSE42-NEXT:    movb %al, 6(%rdi)
5198; SSE42-NEXT:    pextrb $2, %xmm6, %eax
5199; SSE42-NEXT:    andb $1, %al
5200; SSE42-NEXT:    movb %al, 6(%rdi)
5201; SSE42-NEXT:    pextrb $1, %xmm6, %eax
5202; SSE42-NEXT:    andb $1, %al
5203; SSE42-NEXT:    movb %al, 6(%rdi)
5204; SSE42-NEXT:    pextrb $0, %xmm6, %eax
5205; SSE42-NEXT:    andb $1, %al
5206; SSE42-NEXT:    movb %al, 6(%rdi)
5207; SSE42-NEXT:    pextrb $15, %xmm4, %eax
5208; SSE42-NEXT:    andb $1, %al
5209; SSE42-NEXT:    movb %al, 4(%rdi)
5210; SSE42-NEXT:    pextrb $14, %xmm4, %eax
5211; SSE42-NEXT:    andb $1, %al
5212; SSE42-NEXT:    movb %al, 4(%rdi)
5213; SSE42-NEXT:    pextrb $13, %xmm4, %eax
5214; SSE42-NEXT:    andb $1, %al
5215; SSE42-NEXT:    movb %al, 4(%rdi)
5216; SSE42-NEXT:    pextrb $12, %xmm4, %eax
5217; SSE42-NEXT:    andb $1, %al
5218; SSE42-NEXT:    movb %al, 4(%rdi)
5219; SSE42-NEXT:    pextrb $11, %xmm4, %eax
5220; SSE42-NEXT:    andb $1, %al
5221; SSE42-NEXT:    movb %al, 4(%rdi)
5222; SSE42-NEXT:    pextrb $10, %xmm4, %eax
5223; SSE42-NEXT:    andb $1, %al
5224; SSE42-NEXT:    movb %al, 4(%rdi)
5225; SSE42-NEXT:    pextrb $9, %xmm4, %eax
5226; SSE42-NEXT:    andb $1, %al
5227; SSE42-NEXT:    movb %al, 4(%rdi)
5228; SSE42-NEXT:    pextrb $8, %xmm4, %eax
5229; SSE42-NEXT:    andb $1, %al
5230; SSE42-NEXT:    movb %al, 4(%rdi)
5231; SSE42-NEXT:    pextrb $7, %xmm4, %eax
5232; SSE42-NEXT:    andb $1, %al
5233; SSE42-NEXT:    movb %al, 4(%rdi)
5234; SSE42-NEXT:    pextrb $6, %xmm4, %eax
5235; SSE42-NEXT:    andb $1, %al
5236; SSE42-NEXT:    movb %al, 4(%rdi)
5237; SSE42-NEXT:    pextrb $5, %xmm4, %eax
5238; SSE42-NEXT:    andb $1, %al
5239; SSE42-NEXT:    movb %al, 4(%rdi)
5240; SSE42-NEXT:    pextrb $4, %xmm4, %eax
5241; SSE42-NEXT:    andb $1, %al
5242; SSE42-NEXT:    movb %al, 4(%rdi)
5243; SSE42-NEXT:    pextrb $3, %xmm4, %eax
5244; SSE42-NEXT:    andb $1, %al
5245; SSE42-NEXT:    movb %al, 4(%rdi)
5246; SSE42-NEXT:    pextrb $2, %xmm4, %eax
5247; SSE42-NEXT:    andb $1, %al
5248; SSE42-NEXT:    movb %al, 4(%rdi)
5249; SSE42-NEXT:    pextrb $1, %xmm4, %eax
5250; SSE42-NEXT:    andb $1, %al
5251; SSE42-NEXT:    movb %al, 4(%rdi)
5252; SSE42-NEXT:    pextrb $0, %xmm4, %eax
5253; SSE42-NEXT:    andb $1, %al
5254; SSE42-NEXT:    movb %al, 4(%rdi)
5255; SSE42-NEXT:    pextrb $15, %xmm2, %eax
5256; SSE42-NEXT:    andb $1, %al
5257; SSE42-NEXT:    movb %al, 2(%rdi)
5258; SSE42-NEXT:    pextrb $14, %xmm2, %eax
5259; SSE42-NEXT:    andb $1, %al
5260; SSE42-NEXT:    movb %al, 2(%rdi)
5261; SSE42-NEXT:    pextrb $13, %xmm2, %eax
5262; SSE42-NEXT:    andb $1, %al
5263; SSE42-NEXT:    movb %al, 2(%rdi)
5264; SSE42-NEXT:    pextrb $12, %xmm2, %eax
5265; SSE42-NEXT:    andb $1, %al
5266; SSE42-NEXT:    movb %al, 2(%rdi)
5267; SSE42-NEXT:    pextrb $11, %xmm2, %eax
5268; SSE42-NEXT:    andb $1, %al
5269; SSE42-NEXT:    movb %al, 2(%rdi)
5270; SSE42-NEXT:    pextrb $10, %xmm2, %eax
5271; SSE42-NEXT:    andb $1, %al
5272; SSE42-NEXT:    movb %al, 2(%rdi)
5273; SSE42-NEXT:    pextrb $9, %xmm2, %eax
5274; SSE42-NEXT:    andb $1, %al
5275; SSE42-NEXT:    movb %al, 2(%rdi)
5276; SSE42-NEXT:    pextrb $8, %xmm2, %eax
5277; SSE42-NEXT:    andb $1, %al
5278; SSE42-NEXT:    movb %al, 2(%rdi)
5279; SSE42-NEXT:    pextrb $7, %xmm2, %eax
5280; SSE42-NEXT:    andb $1, %al
5281; SSE42-NEXT:    movb %al, 2(%rdi)
5282; SSE42-NEXT:    pextrb $6, %xmm2, %eax
5283; SSE42-NEXT:    andb $1, %al
5284; SSE42-NEXT:    movb %al, 2(%rdi)
5285; SSE42-NEXT:    pextrb $5, %xmm2, %eax
5286; SSE42-NEXT:    andb $1, %al
5287; SSE42-NEXT:    movb %al, 2(%rdi)
5288; SSE42-NEXT:    pextrb $4, %xmm2, %eax
5289; SSE42-NEXT:    andb $1, %al
5290; SSE42-NEXT:    movb %al, 2(%rdi)
5291; SSE42-NEXT:    pextrb $3, %xmm2, %eax
5292; SSE42-NEXT:    andb $1, %al
5293; SSE42-NEXT:    movb %al, 2(%rdi)
5294; SSE42-NEXT:    pextrb $2, %xmm2, %eax
5295; SSE42-NEXT:    andb $1, %al
5296; SSE42-NEXT:    movb %al, 2(%rdi)
5297; SSE42-NEXT:    pextrb $1, %xmm2, %eax
5298; SSE42-NEXT:    andb $1, %al
5299; SSE42-NEXT:    movb %al, 2(%rdi)
5300; SSE42-NEXT:    pextrb $0, %xmm2, %eax
5301; SSE42-NEXT:    andb $1, %al
5302; SSE42-NEXT:    movb %al, 2(%rdi)
5303; SSE42-NEXT:    pextrb $15, %xmm0, %eax
5304; SSE42-NEXT:    andb $1, %al
5305; SSE42-NEXT:    movb %al, (%rdi)
5306; SSE42-NEXT:    pextrb $14, %xmm0, %eax
5307; SSE42-NEXT:    andb $1, %al
5308; SSE42-NEXT:    movb %al, (%rdi)
5309; SSE42-NEXT:    pextrb $13, %xmm0, %eax
5310; SSE42-NEXT:    andb $1, %al
5311; SSE42-NEXT:    movb %al, (%rdi)
5312; SSE42-NEXT:    pextrb $12, %xmm0, %eax
5313; SSE42-NEXT:    andb $1, %al
5314; SSE42-NEXT:    movb %al, (%rdi)
5315; SSE42-NEXT:    pextrb $11, %xmm0, %eax
5316; SSE42-NEXT:    andb $1, %al
5317; SSE42-NEXT:    movb %al, (%rdi)
5318; SSE42-NEXT:    pextrb $10, %xmm0, %eax
5319; SSE42-NEXT:    andb $1, %al
5320; SSE42-NEXT:    movb %al, (%rdi)
5321; SSE42-NEXT:    pextrb $9, %xmm0, %eax
5322; SSE42-NEXT:    andb $1, %al
5323; SSE42-NEXT:    movb %al, (%rdi)
5324; SSE42-NEXT:    pextrb $8, %xmm0, %eax
5325; SSE42-NEXT:    andb $1, %al
5326; SSE42-NEXT:    movb %al, (%rdi)
5327; SSE42-NEXT:    pextrb $7, %xmm0, %eax
5328; SSE42-NEXT:    andb $1, %al
5329; SSE42-NEXT:    movb %al, (%rdi)
5330; SSE42-NEXT:    pextrb $6, %xmm0, %eax
5331; SSE42-NEXT:    andb $1, %al
5332; SSE42-NEXT:    movb %al, (%rdi)
5333; SSE42-NEXT:    pextrb $5, %xmm0, %eax
5334; SSE42-NEXT:    andb $1, %al
5335; SSE42-NEXT:    movb %al, (%rdi)
5336; SSE42-NEXT:    pextrb $4, %xmm0, %eax
5337; SSE42-NEXT:    andb $1, %al
5338; SSE42-NEXT:    movb %al, (%rdi)
5339; SSE42-NEXT:    pextrb $3, %xmm0, %eax
5340; SSE42-NEXT:    andb $1, %al
5341; SSE42-NEXT:    movb %al, (%rdi)
5342; SSE42-NEXT:    pextrb $2, %xmm0, %eax
5343; SSE42-NEXT:    andb $1, %al
5344; SSE42-NEXT:    movb %al, (%rdi)
5345; SSE42-NEXT:    pextrb $1, %xmm0, %eax
5346; SSE42-NEXT:    andb $1, %al
5347; SSE42-NEXT:    movb %al, (%rdi)
5348; SSE42-NEXT:    pextrb $0, %xmm0, %eax
5349; SSE42-NEXT:    andb $1, %al
5350; SSE42-NEXT:    movb %al, (%rdi)
5351; SSE42-NEXT:    movq %rdi, %rax
5352; SSE42-NEXT:    retq
5353;
5354; AVX1-LABEL: test_cmp_v64i16:
5355; AVX1:       # BB#0:
5356; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm8
5357; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm9
5358; AVX1-NEXT:    vpcmpgtw %xmm8, %xmm9, %xmm8
5359; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm0, %xmm0
5360; AVX1-NEXT:    vpacksswb %xmm8, %xmm0, %xmm8
5361; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm4
5362; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
5363; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm0, %xmm0
5364; AVX1-NEXT:    vpcmpgtw %xmm5, %xmm1, %xmm1
5365; AVX1-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
5366; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm0
5367; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5368; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm4, %xmm0
5369; AVX1-NEXT:    vpcmpgtw %xmm6, %xmm2, %xmm2
5370; AVX1-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
5371; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm0
5372; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5373; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm4, %xmm0
5374; AVX1-NEXT:    vpcmpgtw %xmm7, %xmm3, %xmm3
5375; AVX1-NEXT:    vpacksswb %xmm0, %xmm3, %xmm3
5376; AVX1-NEXT:    vpextrb $15, %xmm3, %eax
5377; AVX1-NEXT:    andb $1, %al
5378; AVX1-NEXT:    movb %al, 4(%rdi)
5379; AVX1-NEXT:    vpextrb $14, %xmm3, %eax
5380; AVX1-NEXT:    andb $1, %al
5381; AVX1-NEXT:    movb %al, 4(%rdi)
5382; AVX1-NEXT:    vpextrb $13, %xmm3, %eax
5383; AVX1-NEXT:    andb $1, %al
5384; AVX1-NEXT:    movb %al, 4(%rdi)
5385; AVX1-NEXT:    vpextrb $12, %xmm3, %eax
5386; AVX1-NEXT:    andb $1, %al
5387; AVX1-NEXT:    movb %al, 4(%rdi)
5388; AVX1-NEXT:    vpextrb $11, %xmm3, %eax
5389; AVX1-NEXT:    andb $1, %al
5390; AVX1-NEXT:    movb %al, 4(%rdi)
5391; AVX1-NEXT:    vpextrb $10, %xmm3, %eax
5392; AVX1-NEXT:    andb $1, %al
5393; AVX1-NEXT:    movb %al, 4(%rdi)
5394; AVX1-NEXT:    vpextrb $9, %xmm3, %eax
5395; AVX1-NEXT:    andb $1, %al
5396; AVX1-NEXT:    movb %al, 4(%rdi)
5397; AVX1-NEXT:    vpextrb $8, %xmm3, %eax
5398; AVX1-NEXT:    andb $1, %al
5399; AVX1-NEXT:    movb %al, 4(%rdi)
5400; AVX1-NEXT:    vpextrb $7, %xmm3, %eax
5401; AVX1-NEXT:    andb $1, %al
5402; AVX1-NEXT:    movb %al, 4(%rdi)
5403; AVX1-NEXT:    vpextrb $6, %xmm3, %eax
5404; AVX1-NEXT:    andb $1, %al
5405; AVX1-NEXT:    movb %al, 4(%rdi)
5406; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
5407; AVX1-NEXT:    andb $1, %al
5408; AVX1-NEXT:    movb %al, 4(%rdi)
5409; AVX1-NEXT:    vpextrb $4, %xmm3, %eax
5410; AVX1-NEXT:    andb $1, %al
5411; AVX1-NEXT:    movb %al, 4(%rdi)
5412; AVX1-NEXT:    vpextrb $3, %xmm3, %eax
5413; AVX1-NEXT:    andb $1, %al
5414; AVX1-NEXT:    movb %al, 4(%rdi)
5415; AVX1-NEXT:    vpextrb $2, %xmm3, %eax
5416; AVX1-NEXT:    andb $1, %al
5417; AVX1-NEXT:    movb %al, 4(%rdi)
5418; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
5419; AVX1-NEXT:    andb $1, %al
5420; AVX1-NEXT:    movb %al, 4(%rdi)
5421; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
5422; AVX1-NEXT:    andb $1, %al
5423; AVX1-NEXT:    movb %al, 4(%rdi)
5424; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
5425; AVX1-NEXT:    andb $1, %al
5426; AVX1-NEXT:    movb %al, 4(%rdi)
5427; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
5428; AVX1-NEXT:    andb $1, %al
5429; AVX1-NEXT:    movb %al, 4(%rdi)
5430; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
5431; AVX1-NEXT:    andb $1, %al
5432; AVX1-NEXT:    movb %al, 4(%rdi)
5433; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
5434; AVX1-NEXT:    andb $1, %al
5435; AVX1-NEXT:    movb %al, 4(%rdi)
5436; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
5437; AVX1-NEXT:    andb $1, %al
5438; AVX1-NEXT:    movb %al, 4(%rdi)
5439; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
5440; AVX1-NEXT:    andb $1, %al
5441; AVX1-NEXT:    movb %al, 4(%rdi)
5442; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
5443; AVX1-NEXT:    andb $1, %al
5444; AVX1-NEXT:    movb %al, 4(%rdi)
5445; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
5446; AVX1-NEXT:    andb $1, %al
5447; AVX1-NEXT:    movb %al, 4(%rdi)
5448; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
5449; AVX1-NEXT:    andb $1, %al
5450; AVX1-NEXT:    movb %al, 4(%rdi)
5451; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
5452; AVX1-NEXT:    andb $1, %al
5453; AVX1-NEXT:    movb %al, 4(%rdi)
5454; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
5455; AVX1-NEXT:    andb $1, %al
5456; AVX1-NEXT:    movb %al, 4(%rdi)
5457; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
5458; AVX1-NEXT:    andb $1, %al
5459; AVX1-NEXT:    movb %al, 4(%rdi)
5460; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
5461; AVX1-NEXT:    andb $1, %al
5462; AVX1-NEXT:    movb %al, 4(%rdi)
5463; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
5464; AVX1-NEXT:    andb $1, %al
5465; AVX1-NEXT:    movb %al, 4(%rdi)
5466; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
5467; AVX1-NEXT:    andb $1, %al
5468; AVX1-NEXT:    movb %al, 4(%rdi)
5469; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
5470; AVX1-NEXT:    andb $1, %al
5471; AVX1-NEXT:    movb %al, 4(%rdi)
5472; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
5473; AVX1-NEXT:    andb $1, %al
5474; AVX1-NEXT:    movb %al, (%rdi)
5475; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
5476; AVX1-NEXT:    andb $1, %al
5477; AVX1-NEXT:    movb %al, (%rdi)
5478; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
5479; AVX1-NEXT:    andb $1, %al
5480; AVX1-NEXT:    movb %al, (%rdi)
5481; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
5482; AVX1-NEXT:    andb $1, %al
5483; AVX1-NEXT:    movb %al, (%rdi)
5484; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
5485; AVX1-NEXT:    andb $1, %al
5486; AVX1-NEXT:    movb %al, (%rdi)
5487; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
5488; AVX1-NEXT:    andb $1, %al
5489; AVX1-NEXT:    movb %al, (%rdi)
5490; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
5491; AVX1-NEXT:    andb $1, %al
5492; AVX1-NEXT:    movb %al, (%rdi)
5493; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
5494; AVX1-NEXT:    andb $1, %al
5495; AVX1-NEXT:    movb %al, (%rdi)
5496; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
5497; AVX1-NEXT:    andb $1, %al
5498; AVX1-NEXT:    movb %al, (%rdi)
5499; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
5500; AVX1-NEXT:    andb $1, %al
5501; AVX1-NEXT:    movb %al, (%rdi)
5502; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
5503; AVX1-NEXT:    andb $1, %al
5504; AVX1-NEXT:    movb %al, (%rdi)
5505; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
5506; AVX1-NEXT:    andb $1, %al
5507; AVX1-NEXT:    movb %al, (%rdi)
5508; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
5509; AVX1-NEXT:    andb $1, %al
5510; AVX1-NEXT:    movb %al, (%rdi)
5511; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
5512; AVX1-NEXT:    andb $1, %al
5513; AVX1-NEXT:    movb %al, (%rdi)
5514; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
5515; AVX1-NEXT:    andb $1, %al
5516; AVX1-NEXT:    movb %al, (%rdi)
5517; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
5518; AVX1-NEXT:    andb $1, %al
5519; AVX1-NEXT:    movb %al, (%rdi)
5520; AVX1-NEXT:    vpextrb $15, %xmm8, %eax
5521; AVX1-NEXT:    andb $1, %al
5522; AVX1-NEXT:    movb %al, (%rdi)
5523; AVX1-NEXT:    vpextrb $14, %xmm8, %eax
5524; AVX1-NEXT:    andb $1, %al
5525; AVX1-NEXT:    movb %al, (%rdi)
5526; AVX1-NEXT:    vpextrb $13, %xmm8, %eax
5527; AVX1-NEXT:    andb $1, %al
5528; AVX1-NEXT:    movb %al, (%rdi)
5529; AVX1-NEXT:    vpextrb $12, %xmm8, %eax
5530; AVX1-NEXT:    andb $1, %al
5531; AVX1-NEXT:    movb %al, (%rdi)
5532; AVX1-NEXT:    vpextrb $11, %xmm8, %eax
5533; AVX1-NEXT:    andb $1, %al
5534; AVX1-NEXT:    movb %al, (%rdi)
5535; AVX1-NEXT:    vpextrb $10, %xmm8, %eax
5536; AVX1-NEXT:    andb $1, %al
5537; AVX1-NEXT:    movb %al, (%rdi)
5538; AVX1-NEXT:    vpextrb $9, %xmm8, %eax
5539; AVX1-NEXT:    andb $1, %al
5540; AVX1-NEXT:    movb %al, (%rdi)
5541; AVX1-NEXT:    vpextrb $8, %xmm8, %eax
5542; AVX1-NEXT:    andb $1, %al
5543; AVX1-NEXT:    movb %al, (%rdi)
5544; AVX1-NEXT:    vpextrb $7, %xmm8, %eax
5545; AVX1-NEXT:    andb $1, %al
5546; AVX1-NEXT:    movb %al, (%rdi)
5547; AVX1-NEXT:    vpextrb $6, %xmm8, %eax
5548; AVX1-NEXT:    andb $1, %al
5549; AVX1-NEXT:    movb %al, (%rdi)
5550; AVX1-NEXT:    vpextrb $5, %xmm8, %eax
5551; AVX1-NEXT:    andb $1, %al
5552; AVX1-NEXT:    movb %al, (%rdi)
5553; AVX1-NEXT:    vpextrb $4, %xmm8, %eax
5554; AVX1-NEXT:    andb $1, %al
5555; AVX1-NEXT:    movb %al, (%rdi)
5556; AVX1-NEXT:    vpextrb $3, %xmm8, %eax
5557; AVX1-NEXT:    andb $1, %al
5558; AVX1-NEXT:    movb %al, (%rdi)
5559; AVX1-NEXT:    vpextrb $2, %xmm8, %eax
5560; AVX1-NEXT:    andb $1, %al
5561; AVX1-NEXT:    movb %al, (%rdi)
5562; AVX1-NEXT:    vpextrb $1, %xmm8, %eax
5563; AVX1-NEXT:    andb $1, %al
5564; AVX1-NEXT:    movb %al, (%rdi)
5565; AVX1-NEXT:    vpextrb $0, %xmm8, %eax
5566; AVX1-NEXT:    andb $1, %al
5567; AVX1-NEXT:    movb %al, (%rdi)
5568; AVX1-NEXT:    movq %rdi, %rax
5569; AVX1-NEXT:    vzeroupper
5570; AVX1-NEXT:    retq
5571;
5572; AVX2-LABEL: test_cmp_v64i16:
5573; AVX2:       # BB#0:
5574; AVX2-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
5575; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
5576; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm0
5577; AVX2-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
5578; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm4
5579; AVX2-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
5580; AVX2-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
5581; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm4
5582; AVX2-NEXT:    vpacksswb %xmm4, %xmm2, %xmm2
5583; AVX2-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
5584; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4
5585; AVX2-NEXT:    vpacksswb %xmm4, %xmm3, %xmm3
5586; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
5587; AVX2-NEXT:    andb $1, %al
5588; AVX2-NEXT:    movb %al, 4(%rdi)
5589; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
5590; AVX2-NEXT:    andb $1, %al
5591; AVX2-NEXT:    movb %al, 4(%rdi)
5592; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
5593; AVX2-NEXT:    andb $1, %al
5594; AVX2-NEXT:    movb %al, 4(%rdi)
5595; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
5596; AVX2-NEXT:    andb $1, %al
5597; AVX2-NEXT:    movb %al, 4(%rdi)
5598; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
5599; AVX2-NEXT:    andb $1, %al
5600; AVX2-NEXT:    movb %al, 4(%rdi)
5601; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
5602; AVX2-NEXT:    andb $1, %al
5603; AVX2-NEXT:    movb %al, 4(%rdi)
5604; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
5605; AVX2-NEXT:    andb $1, %al
5606; AVX2-NEXT:    movb %al, 4(%rdi)
5607; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
5608; AVX2-NEXT:    andb $1, %al
5609; AVX2-NEXT:    movb %al, 4(%rdi)
5610; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
5611; AVX2-NEXT:    andb $1, %al
5612; AVX2-NEXT:    movb %al, 4(%rdi)
5613; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
5614; AVX2-NEXT:    andb $1, %al
5615; AVX2-NEXT:    movb %al, 4(%rdi)
5616; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
5617; AVX2-NEXT:    andb $1, %al
5618; AVX2-NEXT:    movb %al, 4(%rdi)
5619; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
5620; AVX2-NEXT:    andb $1, %al
5621; AVX2-NEXT:    movb %al, 4(%rdi)
5622; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
5623; AVX2-NEXT:    andb $1, %al
5624; AVX2-NEXT:    movb %al, 4(%rdi)
5625; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
5626; AVX2-NEXT:    andb $1, %al
5627; AVX2-NEXT:    movb %al, 4(%rdi)
5628; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
5629; AVX2-NEXT:    andb $1, %al
5630; AVX2-NEXT:    movb %al, 4(%rdi)
5631; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
5632; AVX2-NEXT:    andb $1, %al
5633; AVX2-NEXT:    movb %al, 4(%rdi)
5634; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
5635; AVX2-NEXT:    andb $1, %al
5636; AVX2-NEXT:    movb %al, 4(%rdi)
5637; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
5638; AVX2-NEXT:    andb $1, %al
5639; AVX2-NEXT:    movb %al, 4(%rdi)
5640; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
5641; AVX2-NEXT:    andb $1, %al
5642; AVX2-NEXT:    movb %al, 4(%rdi)
5643; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
5644; AVX2-NEXT:    andb $1, %al
5645; AVX2-NEXT:    movb %al, 4(%rdi)
5646; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
5647; AVX2-NEXT:    andb $1, %al
5648; AVX2-NEXT:    movb %al, 4(%rdi)
5649; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
5650; AVX2-NEXT:    andb $1, %al
5651; AVX2-NEXT:    movb %al, 4(%rdi)
5652; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
5653; AVX2-NEXT:    andb $1, %al
5654; AVX2-NEXT:    movb %al, 4(%rdi)
5655; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
5656; AVX2-NEXT:    andb $1, %al
5657; AVX2-NEXT:    movb %al, 4(%rdi)
5658; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
5659; AVX2-NEXT:    andb $1, %al
5660; AVX2-NEXT:    movb %al, 4(%rdi)
5661; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
5662; AVX2-NEXT:    andb $1, %al
5663; AVX2-NEXT:    movb %al, 4(%rdi)
5664; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
5665; AVX2-NEXT:    andb $1, %al
5666; AVX2-NEXT:    movb %al, 4(%rdi)
5667; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
5668; AVX2-NEXT:    andb $1, %al
5669; AVX2-NEXT:    movb %al, 4(%rdi)
5670; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
5671; AVX2-NEXT:    andb $1, %al
5672; AVX2-NEXT:    movb %al, 4(%rdi)
5673; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
5674; AVX2-NEXT:    andb $1, %al
5675; AVX2-NEXT:    movb %al, 4(%rdi)
5676; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
5677; AVX2-NEXT:    andb $1, %al
5678; AVX2-NEXT:    movb %al, 4(%rdi)
5679; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
5680; AVX2-NEXT:    andb $1, %al
5681; AVX2-NEXT:    movb %al, 4(%rdi)
5682; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
5683; AVX2-NEXT:    andb $1, %al
5684; AVX2-NEXT:    movb %al, (%rdi)
5685; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
5686; AVX2-NEXT:    andb $1, %al
5687; AVX2-NEXT:    movb %al, (%rdi)
5688; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
5689; AVX2-NEXT:    andb $1, %al
5690; AVX2-NEXT:    movb %al, (%rdi)
5691; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
5692; AVX2-NEXT:    andb $1, %al
5693; AVX2-NEXT:    movb %al, (%rdi)
5694; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
5695; AVX2-NEXT:    andb $1, %al
5696; AVX2-NEXT:    movb %al, (%rdi)
5697; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
5698; AVX2-NEXT:    andb $1, %al
5699; AVX2-NEXT:    movb %al, (%rdi)
5700; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
5701; AVX2-NEXT:    andb $1, %al
5702; AVX2-NEXT:    movb %al, (%rdi)
5703; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
5704; AVX2-NEXT:    andb $1, %al
5705; AVX2-NEXT:    movb %al, (%rdi)
5706; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
5707; AVX2-NEXT:    andb $1, %al
5708; AVX2-NEXT:    movb %al, (%rdi)
5709; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
5710; AVX2-NEXT:    andb $1, %al
5711; AVX2-NEXT:    movb %al, (%rdi)
5712; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
5713; AVX2-NEXT:    andb $1, %al
5714; AVX2-NEXT:    movb %al, (%rdi)
5715; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
5716; AVX2-NEXT:    andb $1, %al
5717; AVX2-NEXT:    movb %al, (%rdi)
5718; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
5719; AVX2-NEXT:    andb $1, %al
5720; AVX2-NEXT:    movb %al, (%rdi)
5721; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
5722; AVX2-NEXT:    andb $1, %al
5723; AVX2-NEXT:    movb %al, (%rdi)
5724; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
5725; AVX2-NEXT:    andb $1, %al
5726; AVX2-NEXT:    movb %al, (%rdi)
5727; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
5728; AVX2-NEXT:    andb $1, %al
5729; AVX2-NEXT:    movb %al, (%rdi)
5730; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
5731; AVX2-NEXT:    andb $1, %al
5732; AVX2-NEXT:    movb %al, (%rdi)
5733; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
5734; AVX2-NEXT:    andb $1, %al
5735; AVX2-NEXT:    movb %al, (%rdi)
5736; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
5737; AVX2-NEXT:    andb $1, %al
5738; AVX2-NEXT:    movb %al, (%rdi)
5739; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
5740; AVX2-NEXT:    andb $1, %al
5741; AVX2-NEXT:    movb %al, (%rdi)
5742; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
5743; AVX2-NEXT:    andb $1, %al
5744; AVX2-NEXT:    movb %al, (%rdi)
5745; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
5746; AVX2-NEXT:    andb $1, %al
5747; AVX2-NEXT:    movb %al, (%rdi)
5748; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
5749; AVX2-NEXT:    andb $1, %al
5750; AVX2-NEXT:    movb %al, (%rdi)
5751; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
5752; AVX2-NEXT:    andb $1, %al
5753; AVX2-NEXT:    movb %al, (%rdi)
5754; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
5755; AVX2-NEXT:    andb $1, %al
5756; AVX2-NEXT:    movb %al, (%rdi)
5757; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
5758; AVX2-NEXT:    andb $1, %al
5759; AVX2-NEXT:    movb %al, (%rdi)
5760; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
5761; AVX2-NEXT:    andb $1, %al
5762; AVX2-NEXT:    movb %al, (%rdi)
5763; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
5764; AVX2-NEXT:    andb $1, %al
5765; AVX2-NEXT:    movb %al, (%rdi)
5766; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
5767; AVX2-NEXT:    andb $1, %al
5768; AVX2-NEXT:    movb %al, (%rdi)
5769; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
5770; AVX2-NEXT:    andb $1, %al
5771; AVX2-NEXT:    movb %al, (%rdi)
5772; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
5773; AVX2-NEXT:    andb $1, %al
5774; AVX2-NEXT:    movb %al, (%rdi)
5775; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
5776; AVX2-NEXT:    andb $1, %al
5777; AVX2-NEXT:    movb %al, (%rdi)
5778; AVX2-NEXT:    movq %rdi, %rax
5779; AVX2-NEXT:    vzeroupper
5780; AVX2-NEXT:    retq
5781;
5782; AVX512F-LABEL: test_cmp_v64i16:
5783; AVX512F:       # BB#0:
5784; AVX512F-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
5785; AVX512F-NEXT:    vpmovsxwd %ymm3, %zmm3
5786; AVX512F-NEXT:    vpslld $31, %zmm3, %zmm3
5787; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
5788; AVX512F-NEXT:    kshiftlw $14, %k0, %k1
5789; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5790; AVX512F-NEXT:    kmovw %k1, %eax
5791; AVX512F-NEXT:    kshiftlw $15, %k0, %k1
5792; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5793; AVX512F-NEXT:    kmovw %k1, %ecx
5794; AVX512F-NEXT:    vmovd %ecx, %xmm3
5795; AVX512F-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
5796; AVX512F-NEXT:    kshiftlw $13, %k0, %k1
5797; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5798; AVX512F-NEXT:    kmovw %k1, %eax
5799; AVX512F-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
5800; AVX512F-NEXT:    kshiftlw $12, %k0, %k1
5801; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5802; AVX512F-NEXT:    kmovw %k1, %eax
5803; AVX512F-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
5804; AVX512F-NEXT:    kshiftlw $11, %k0, %k1
5805; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5806; AVX512F-NEXT:    kmovw %k1, %eax
5807; AVX512F-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
5808; AVX512F-NEXT:    kshiftlw $10, %k0, %k1
5809; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5810; AVX512F-NEXT:    kmovw %k1, %eax
5811; AVX512F-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
5812; AVX512F-NEXT:    kshiftlw $9, %k0, %k1
5813; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5814; AVX512F-NEXT:    kmovw %k1, %eax
5815; AVX512F-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
5816; AVX512F-NEXT:    kshiftlw $8, %k0, %k1
5817; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5818; AVX512F-NEXT:    kmovw %k1, %eax
5819; AVX512F-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
5820; AVX512F-NEXT:    kshiftlw $7, %k0, %k1
5821; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5822; AVX512F-NEXT:    kmovw %k1, %eax
5823; AVX512F-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
5824; AVX512F-NEXT:    kshiftlw $6, %k0, %k1
5825; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5826; AVX512F-NEXT:    kmovw %k1, %eax
5827; AVX512F-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
5828; AVX512F-NEXT:    kshiftlw $5, %k0, %k1
5829; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5830; AVX512F-NEXT:    kmovw %k1, %eax
5831; AVX512F-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
5832; AVX512F-NEXT:    kshiftlw $4, %k0, %k1
5833; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5834; AVX512F-NEXT:    kmovw %k1, %eax
5835; AVX512F-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
5836; AVX512F-NEXT:    kshiftlw $3, %k0, %k1
5837; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5838; AVX512F-NEXT:    kmovw %k1, %eax
5839; AVX512F-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
5840; AVX512F-NEXT:    kshiftlw $2, %k0, %k1
5841; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5842; AVX512F-NEXT:    kmovw %k1, %eax
5843; AVX512F-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
5844; AVX512F-NEXT:    kshiftlw $1, %k0, %k1
5845; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5846; AVX512F-NEXT:    kmovw %k1, %eax
5847; AVX512F-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
5848; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
5849; AVX512F-NEXT:    kmovw %k0, %eax
5850; AVX512F-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm3
5851; AVX512F-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
5852; AVX512F-NEXT:    vpmovsxwd %ymm2, %zmm2
5853; AVX512F-NEXT:    vpslld $31, %zmm2, %zmm2
5854; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
5855; AVX512F-NEXT:    kshiftlw $14, %k0, %k1
5856; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5857; AVX512F-NEXT:    kmovw %k1, %eax
5858; AVX512F-NEXT:    kshiftlw $15, %k0, %k1
5859; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5860; AVX512F-NEXT:    kmovw %k1, %ecx
5861; AVX512F-NEXT:    vmovd %ecx, %xmm2
5862; AVX512F-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm2
5863; AVX512F-NEXT:    kshiftlw $13, %k0, %k1
5864; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5865; AVX512F-NEXT:    kmovw %k1, %eax
5866; AVX512F-NEXT:    vpinsrb $2, %eax, %xmm2, %xmm2
5867; AVX512F-NEXT:    kshiftlw $12, %k0, %k1
5868; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5869; AVX512F-NEXT:    kmovw %k1, %eax
5870; AVX512F-NEXT:    vpinsrb $3, %eax, %xmm2, %xmm2
5871; AVX512F-NEXT:    kshiftlw $11, %k0, %k1
5872; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5873; AVX512F-NEXT:    kmovw %k1, %eax
5874; AVX512F-NEXT:    vpinsrb $4, %eax, %xmm2, %xmm2
5875; AVX512F-NEXT:    kshiftlw $10, %k0, %k1
5876; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5877; AVX512F-NEXT:    kmovw %k1, %eax
5878; AVX512F-NEXT:    vpinsrb $5, %eax, %xmm2, %xmm2
5879; AVX512F-NEXT:    kshiftlw $9, %k0, %k1
5880; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5881; AVX512F-NEXT:    kmovw %k1, %eax
5882; AVX512F-NEXT:    vpinsrb $6, %eax, %xmm2, %xmm2
5883; AVX512F-NEXT:    kshiftlw $8, %k0, %k1
5884; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5885; AVX512F-NEXT:    kmovw %k1, %eax
5886; AVX512F-NEXT:    vpinsrb $7, %eax, %xmm2, %xmm2
5887; AVX512F-NEXT:    kshiftlw $7, %k0, %k1
5888; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5889; AVX512F-NEXT:    kmovw %k1, %eax
5890; AVX512F-NEXT:    vpinsrb $8, %eax, %xmm2, %xmm2
5891; AVX512F-NEXT:    kshiftlw $6, %k0, %k1
5892; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5893; AVX512F-NEXT:    kmovw %k1, %eax
5894; AVX512F-NEXT:    vpinsrb $9, %eax, %xmm2, %xmm2
5895; AVX512F-NEXT:    kshiftlw $5, %k0, %k1
5896; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5897; AVX512F-NEXT:    kmovw %k1, %eax
5898; AVX512F-NEXT:    vpinsrb $10, %eax, %xmm2, %xmm2
5899; AVX512F-NEXT:    kshiftlw $4, %k0, %k1
5900; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5901; AVX512F-NEXT:    kmovw %k1, %eax
5902; AVX512F-NEXT:    vpinsrb $11, %eax, %xmm2, %xmm2
5903; AVX512F-NEXT:    kshiftlw $3, %k0, %k1
5904; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5905; AVX512F-NEXT:    kmovw %k1, %eax
5906; AVX512F-NEXT:    vpinsrb $12, %eax, %xmm2, %xmm2
5907; AVX512F-NEXT:    kshiftlw $2, %k0, %k1
5908; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5909; AVX512F-NEXT:    kmovw %k1, %eax
5910; AVX512F-NEXT:    vpinsrb $13, %eax, %xmm2, %xmm2
5911; AVX512F-NEXT:    kshiftlw $1, %k0, %k1
5912; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5913; AVX512F-NEXT:    kmovw %k1, %eax
5914; AVX512F-NEXT:    vpinsrb $14, %eax, %xmm2, %xmm2
5915; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
5916; AVX512F-NEXT:    kmovw %k0, %eax
5917; AVX512F-NEXT:    vpinsrb $15, %eax, %xmm2, %xmm2
5918; AVX512F-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
5919; AVX512F-NEXT:    vpsllw $7, %ymm2, %ymm2
5920; 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]
5921; AVX512F-NEXT:    vpand %ymm3, %ymm2, %ymm2
5922; AVX512F-NEXT:    vpxor %ymm6, %ymm6, %ymm6
5923; AVX512F-NEXT:    vpcmpgtb %ymm2, %ymm6, %ymm2
5924; AVX512F-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
5925; AVX512F-NEXT:    vpmovsxwd %ymm1, %zmm1
5926; AVX512F-NEXT:    vpslld $31, %zmm1, %zmm1
5927; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
5928; AVX512F-NEXT:    kshiftlw $14, %k0, %k1
5929; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5930; AVX512F-NEXT:    kmovw %k1, %eax
5931; AVX512F-NEXT:    kshiftlw $15, %k0, %k1
5932; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5933; AVX512F-NEXT:    kmovw %k1, %ecx
5934; AVX512F-NEXT:    vmovd %ecx, %xmm1
5935; AVX512F-NEXT:    vpinsrb $1, %eax, %xmm1, %xmm1
5936; AVX512F-NEXT:    kshiftlw $13, %k0, %k1
5937; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5938; AVX512F-NEXT:    kmovw %k1, %eax
5939; AVX512F-NEXT:    vpinsrb $2, %eax, %xmm1, %xmm1
5940; AVX512F-NEXT:    kshiftlw $12, %k0, %k1
5941; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5942; AVX512F-NEXT:    kmovw %k1, %eax
5943; AVX512F-NEXT:    vpinsrb $3, %eax, %xmm1, %xmm1
5944; AVX512F-NEXT:    kshiftlw $11, %k0, %k1
5945; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5946; AVX512F-NEXT:    kmovw %k1, %eax
5947; AVX512F-NEXT:    vpinsrb $4, %eax, %xmm1, %xmm1
5948; AVX512F-NEXT:    kshiftlw $10, %k0, %k1
5949; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5950; AVX512F-NEXT:    kmovw %k1, %eax
5951; AVX512F-NEXT:    vpinsrb $5, %eax, %xmm1, %xmm1
5952; AVX512F-NEXT:    kshiftlw $9, %k0, %k1
5953; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5954; AVX512F-NEXT:    kmovw %k1, %eax
5955; AVX512F-NEXT:    vpinsrb $6, %eax, %xmm1, %xmm1
5956; AVX512F-NEXT:    kshiftlw $8, %k0, %k1
5957; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5958; AVX512F-NEXT:    kmovw %k1, %eax
5959; AVX512F-NEXT:    vpinsrb $7, %eax, %xmm1, %xmm1
5960; AVX512F-NEXT:    kshiftlw $7, %k0, %k1
5961; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5962; AVX512F-NEXT:    kmovw %k1, %eax
5963; AVX512F-NEXT:    vpinsrb $8, %eax, %xmm1, %xmm1
5964; AVX512F-NEXT:    kshiftlw $6, %k0, %k1
5965; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5966; AVX512F-NEXT:    kmovw %k1, %eax
5967; AVX512F-NEXT:    vpinsrb $9, %eax, %xmm1, %xmm1
5968; AVX512F-NEXT:    kshiftlw $5, %k0, %k1
5969; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5970; AVX512F-NEXT:    kmovw %k1, %eax
5971; AVX512F-NEXT:    vpinsrb $10, %eax, %xmm1, %xmm1
5972; AVX512F-NEXT:    kshiftlw $4, %k0, %k1
5973; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5974; AVX512F-NEXT:    kmovw %k1, %eax
5975; AVX512F-NEXT:    vpinsrb $11, %eax, %xmm1, %xmm1
5976; AVX512F-NEXT:    kshiftlw $3, %k0, %k1
5977; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5978; AVX512F-NEXT:    kmovw %k1, %eax
5979; AVX512F-NEXT:    vpinsrb $12, %eax, %xmm1, %xmm1
5980; AVX512F-NEXT:    kshiftlw $2, %k0, %k1
5981; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5982; AVX512F-NEXT:    kmovw %k1, %eax
5983; AVX512F-NEXT:    vpinsrb $13, %eax, %xmm1, %xmm1
5984; AVX512F-NEXT:    kshiftlw $1, %k0, %k1
5985; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5986; AVX512F-NEXT:    kmovw %k1, %eax
5987; AVX512F-NEXT:    vpinsrb $14, %eax, %xmm1, %xmm1
5988; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
5989; AVX512F-NEXT:    kmovw %k0, %eax
5990; AVX512F-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm1
5991; AVX512F-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
5992; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
5993; AVX512F-NEXT:    vpslld $31, %zmm0, %zmm0
5994; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
5995; AVX512F-NEXT:    kshiftlw $14, %k0, %k1
5996; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
5997; AVX512F-NEXT:    kmovw %k1, %eax
5998; AVX512F-NEXT:    kshiftlw $15, %k0, %k1
5999; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6000; AVX512F-NEXT:    kmovw %k1, %ecx
6001; AVX512F-NEXT:    vmovd %ecx, %xmm0
6002; AVX512F-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0
6003; AVX512F-NEXT:    kshiftlw $13, %k0, %k1
6004; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6005; AVX512F-NEXT:    kmovw %k1, %eax
6006; AVX512F-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0
6007; AVX512F-NEXT:    kshiftlw $12, %k0, %k1
6008; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6009; AVX512F-NEXT:    kmovw %k1, %eax
6010; AVX512F-NEXT:    vpinsrb $3, %eax, %xmm0, %xmm0
6011; AVX512F-NEXT:    kshiftlw $11, %k0, %k1
6012; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6013; AVX512F-NEXT:    kmovw %k1, %eax
6014; AVX512F-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0
6015; AVX512F-NEXT:    kshiftlw $10, %k0, %k1
6016; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6017; AVX512F-NEXT:    kmovw %k1, %eax
6018; AVX512F-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0
6019; AVX512F-NEXT:    kshiftlw $9, %k0, %k1
6020; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6021; AVX512F-NEXT:    kmovw %k1, %eax
6022; AVX512F-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0
6023; AVX512F-NEXT:    kshiftlw $8, %k0, %k1
6024; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6025; AVX512F-NEXT:    kmovw %k1, %eax
6026; AVX512F-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0
6027; AVX512F-NEXT:    kshiftlw $7, %k0, %k1
6028; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6029; AVX512F-NEXT:    kmovw %k1, %eax
6030; AVX512F-NEXT:    vpinsrb $8, %eax, %xmm0, %xmm0
6031; AVX512F-NEXT:    kshiftlw $6, %k0, %k1
6032; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6033; AVX512F-NEXT:    kmovw %k1, %eax
6034; AVX512F-NEXT:    vpinsrb $9, %eax, %xmm0, %xmm0
6035; AVX512F-NEXT:    kshiftlw $5, %k0, %k1
6036; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6037; AVX512F-NEXT:    kmovw %k1, %eax
6038; AVX512F-NEXT:    vpinsrb $10, %eax, %xmm0, %xmm0
6039; AVX512F-NEXT:    kshiftlw $4, %k0, %k1
6040; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6041; AVX512F-NEXT:    kmovw %k1, %eax
6042; AVX512F-NEXT:    vpinsrb $11, %eax, %xmm0, %xmm0
6043; AVX512F-NEXT:    kshiftlw $3, %k0, %k1
6044; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6045; AVX512F-NEXT:    kmovw %k1, %eax
6046; AVX512F-NEXT:    vpinsrb $12, %eax, %xmm0, %xmm0
6047; AVX512F-NEXT:    kshiftlw $2, %k0, %k1
6048; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6049; AVX512F-NEXT:    kmovw %k1, %eax
6050; AVX512F-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0
6051; AVX512F-NEXT:    kshiftlw $1, %k0, %k1
6052; AVX512F-NEXT:    kshiftrw $15, %k1, %k1
6053; AVX512F-NEXT:    kmovw %k1, %eax
6054; AVX512F-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0
6055; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
6056; AVX512F-NEXT:    kmovw %k0, %eax
6057; AVX512F-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0
6058; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
6059; AVX512F-NEXT:    vpsllw $7, %ymm0, %ymm0
6060; AVX512F-NEXT:    vpand %ymm3, %ymm0, %ymm0
6061; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm6, %ymm0
6062; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1
6063; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm3
6064; AVX512F-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
6065; AVX512F-NEXT:    # kill: %XMM2<def> %XMM2<kill> %YMM2<kill>
6066; AVX512F-NEXT:    retq
6067;
6068; AVX512DQ-LABEL: test_cmp_v64i16:
6069; AVX512DQ:       # BB#0:
6070; AVX512DQ-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
6071; AVX512DQ-NEXT:    vpmovsxwd %ymm3, %zmm3
6072; AVX512DQ-NEXT:    vpslld $31, %zmm3, %zmm3
6073; AVX512DQ-NEXT:    vptestmd %zmm3, %zmm3, %k0
6074; AVX512DQ-NEXT:    kshiftlw $14, %k0, %k1
6075; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6076; AVX512DQ-NEXT:    kmovw %k1, %eax
6077; AVX512DQ-NEXT:    kshiftlw $15, %k0, %k1
6078; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6079; AVX512DQ-NEXT:    kmovw %k1, %ecx
6080; AVX512DQ-NEXT:    vmovd %ecx, %xmm3
6081; AVX512DQ-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
6082; AVX512DQ-NEXT:    kshiftlw $13, %k0, %k1
6083; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6084; AVX512DQ-NEXT:    kmovw %k1, %eax
6085; AVX512DQ-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
6086; AVX512DQ-NEXT:    kshiftlw $12, %k0, %k1
6087; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6088; AVX512DQ-NEXT:    kmovw %k1, %eax
6089; AVX512DQ-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
6090; AVX512DQ-NEXT:    kshiftlw $11, %k0, %k1
6091; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6092; AVX512DQ-NEXT:    kmovw %k1, %eax
6093; AVX512DQ-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
6094; AVX512DQ-NEXT:    kshiftlw $10, %k0, %k1
6095; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6096; AVX512DQ-NEXT:    kmovw %k1, %eax
6097; AVX512DQ-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
6098; AVX512DQ-NEXT:    kshiftlw $9, %k0, %k1
6099; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6100; AVX512DQ-NEXT:    kmovw %k1, %eax
6101; AVX512DQ-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
6102; AVX512DQ-NEXT:    kshiftlw $8, %k0, %k1
6103; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6104; AVX512DQ-NEXT:    kmovw %k1, %eax
6105; AVX512DQ-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
6106; AVX512DQ-NEXT:    kshiftlw $7, %k0, %k1
6107; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6108; AVX512DQ-NEXT:    kmovw %k1, %eax
6109; AVX512DQ-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
6110; AVX512DQ-NEXT:    kshiftlw $6, %k0, %k1
6111; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6112; AVX512DQ-NEXT:    kmovw %k1, %eax
6113; AVX512DQ-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
6114; AVX512DQ-NEXT:    kshiftlw $5, %k0, %k1
6115; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6116; AVX512DQ-NEXT:    kmovw %k1, %eax
6117; AVX512DQ-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
6118; AVX512DQ-NEXT:    kshiftlw $4, %k0, %k1
6119; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6120; AVX512DQ-NEXT:    kmovw %k1, %eax
6121; AVX512DQ-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
6122; AVX512DQ-NEXT:    kshiftlw $3, %k0, %k1
6123; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6124; AVX512DQ-NEXT:    kmovw %k1, %eax
6125; AVX512DQ-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
6126; AVX512DQ-NEXT:    kshiftlw $2, %k0, %k1
6127; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6128; AVX512DQ-NEXT:    kmovw %k1, %eax
6129; AVX512DQ-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
6130; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k1
6131; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6132; AVX512DQ-NEXT:    kmovw %k1, %eax
6133; AVX512DQ-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
6134; AVX512DQ-NEXT:    kshiftrw $15, %k0, %k0
6135; AVX512DQ-NEXT:    kmovw %k0, %eax
6136; AVX512DQ-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm3
6137; AVX512DQ-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
6138; AVX512DQ-NEXT:    vpmovsxwd %ymm2, %zmm2
6139; AVX512DQ-NEXT:    vpslld $31, %zmm2, %zmm2
6140; AVX512DQ-NEXT:    vptestmd %zmm2, %zmm2, %k0
6141; AVX512DQ-NEXT:    kshiftlw $14, %k0, %k1
6142; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6143; AVX512DQ-NEXT:    kmovw %k1, %eax
6144; AVX512DQ-NEXT:    kshiftlw $15, %k0, %k1
6145; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6146; AVX512DQ-NEXT:    kmovw %k1, %ecx
6147; AVX512DQ-NEXT:    vmovd %ecx, %xmm2
6148; AVX512DQ-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm2
6149; AVX512DQ-NEXT:    kshiftlw $13, %k0, %k1
6150; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6151; AVX512DQ-NEXT:    kmovw %k1, %eax
6152; AVX512DQ-NEXT:    vpinsrb $2, %eax, %xmm2, %xmm2
6153; AVX512DQ-NEXT:    kshiftlw $12, %k0, %k1
6154; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6155; AVX512DQ-NEXT:    kmovw %k1, %eax
6156; AVX512DQ-NEXT:    vpinsrb $3, %eax, %xmm2, %xmm2
6157; AVX512DQ-NEXT:    kshiftlw $11, %k0, %k1
6158; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6159; AVX512DQ-NEXT:    kmovw %k1, %eax
6160; AVX512DQ-NEXT:    vpinsrb $4, %eax, %xmm2, %xmm2
6161; AVX512DQ-NEXT:    kshiftlw $10, %k0, %k1
6162; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6163; AVX512DQ-NEXT:    kmovw %k1, %eax
6164; AVX512DQ-NEXT:    vpinsrb $5, %eax, %xmm2, %xmm2
6165; AVX512DQ-NEXT:    kshiftlw $9, %k0, %k1
6166; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6167; AVX512DQ-NEXT:    kmovw %k1, %eax
6168; AVX512DQ-NEXT:    vpinsrb $6, %eax, %xmm2, %xmm2
6169; AVX512DQ-NEXT:    kshiftlw $8, %k0, %k1
6170; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6171; AVX512DQ-NEXT:    kmovw %k1, %eax
6172; AVX512DQ-NEXT:    vpinsrb $7, %eax, %xmm2, %xmm2
6173; AVX512DQ-NEXT:    kshiftlw $7, %k0, %k1
6174; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6175; AVX512DQ-NEXT:    kmovw %k1, %eax
6176; AVX512DQ-NEXT:    vpinsrb $8, %eax, %xmm2, %xmm2
6177; AVX512DQ-NEXT:    kshiftlw $6, %k0, %k1
6178; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6179; AVX512DQ-NEXT:    kmovw %k1, %eax
6180; AVX512DQ-NEXT:    vpinsrb $9, %eax, %xmm2, %xmm2
6181; AVX512DQ-NEXT:    kshiftlw $5, %k0, %k1
6182; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6183; AVX512DQ-NEXT:    kmovw %k1, %eax
6184; AVX512DQ-NEXT:    vpinsrb $10, %eax, %xmm2, %xmm2
6185; AVX512DQ-NEXT:    kshiftlw $4, %k0, %k1
6186; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6187; AVX512DQ-NEXT:    kmovw %k1, %eax
6188; AVX512DQ-NEXT:    vpinsrb $11, %eax, %xmm2, %xmm2
6189; AVX512DQ-NEXT:    kshiftlw $3, %k0, %k1
6190; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6191; AVX512DQ-NEXT:    kmovw %k1, %eax
6192; AVX512DQ-NEXT:    vpinsrb $12, %eax, %xmm2, %xmm2
6193; AVX512DQ-NEXT:    kshiftlw $2, %k0, %k1
6194; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6195; AVX512DQ-NEXT:    kmovw %k1, %eax
6196; AVX512DQ-NEXT:    vpinsrb $13, %eax, %xmm2, %xmm2
6197; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k1
6198; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6199; AVX512DQ-NEXT:    kmovw %k1, %eax
6200; AVX512DQ-NEXT:    vpinsrb $14, %eax, %xmm2, %xmm2
6201; AVX512DQ-NEXT:    kshiftrw $15, %k0, %k0
6202; AVX512DQ-NEXT:    kmovw %k0, %eax
6203; AVX512DQ-NEXT:    vpinsrb $15, %eax, %xmm2, %xmm2
6204; AVX512DQ-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
6205; AVX512DQ-NEXT:    vpsllw $7, %ymm2, %ymm2
6206; 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]
6207; AVX512DQ-NEXT:    vpand %ymm3, %ymm2, %ymm2
6208; AVX512DQ-NEXT:    vpxor %ymm6, %ymm6, %ymm6
6209; AVX512DQ-NEXT:    vpcmpgtb %ymm2, %ymm6, %ymm2
6210; AVX512DQ-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
6211; AVX512DQ-NEXT:    vpmovsxwd %ymm1, %zmm1
6212; AVX512DQ-NEXT:    vpslld $31, %zmm1, %zmm1
6213; AVX512DQ-NEXT:    vptestmd %zmm1, %zmm1, %k0
6214; AVX512DQ-NEXT:    kshiftlw $14, %k0, %k1
6215; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6216; AVX512DQ-NEXT:    kmovw %k1, %eax
6217; AVX512DQ-NEXT:    kshiftlw $15, %k0, %k1
6218; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6219; AVX512DQ-NEXT:    kmovw %k1, %ecx
6220; AVX512DQ-NEXT:    vmovd %ecx, %xmm1
6221; AVX512DQ-NEXT:    vpinsrb $1, %eax, %xmm1, %xmm1
6222; AVX512DQ-NEXT:    kshiftlw $13, %k0, %k1
6223; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6224; AVX512DQ-NEXT:    kmovw %k1, %eax
6225; AVX512DQ-NEXT:    vpinsrb $2, %eax, %xmm1, %xmm1
6226; AVX512DQ-NEXT:    kshiftlw $12, %k0, %k1
6227; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6228; AVX512DQ-NEXT:    kmovw %k1, %eax
6229; AVX512DQ-NEXT:    vpinsrb $3, %eax, %xmm1, %xmm1
6230; AVX512DQ-NEXT:    kshiftlw $11, %k0, %k1
6231; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6232; AVX512DQ-NEXT:    kmovw %k1, %eax
6233; AVX512DQ-NEXT:    vpinsrb $4, %eax, %xmm1, %xmm1
6234; AVX512DQ-NEXT:    kshiftlw $10, %k0, %k1
6235; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6236; AVX512DQ-NEXT:    kmovw %k1, %eax
6237; AVX512DQ-NEXT:    vpinsrb $5, %eax, %xmm1, %xmm1
6238; AVX512DQ-NEXT:    kshiftlw $9, %k0, %k1
6239; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6240; AVX512DQ-NEXT:    kmovw %k1, %eax
6241; AVX512DQ-NEXT:    vpinsrb $6, %eax, %xmm1, %xmm1
6242; AVX512DQ-NEXT:    kshiftlw $8, %k0, %k1
6243; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6244; AVX512DQ-NEXT:    kmovw %k1, %eax
6245; AVX512DQ-NEXT:    vpinsrb $7, %eax, %xmm1, %xmm1
6246; AVX512DQ-NEXT:    kshiftlw $7, %k0, %k1
6247; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6248; AVX512DQ-NEXT:    kmovw %k1, %eax
6249; AVX512DQ-NEXT:    vpinsrb $8, %eax, %xmm1, %xmm1
6250; AVX512DQ-NEXT:    kshiftlw $6, %k0, %k1
6251; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6252; AVX512DQ-NEXT:    kmovw %k1, %eax
6253; AVX512DQ-NEXT:    vpinsrb $9, %eax, %xmm1, %xmm1
6254; AVX512DQ-NEXT:    kshiftlw $5, %k0, %k1
6255; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6256; AVX512DQ-NEXT:    kmovw %k1, %eax
6257; AVX512DQ-NEXT:    vpinsrb $10, %eax, %xmm1, %xmm1
6258; AVX512DQ-NEXT:    kshiftlw $4, %k0, %k1
6259; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6260; AVX512DQ-NEXT:    kmovw %k1, %eax
6261; AVX512DQ-NEXT:    vpinsrb $11, %eax, %xmm1, %xmm1
6262; AVX512DQ-NEXT:    kshiftlw $3, %k0, %k1
6263; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6264; AVX512DQ-NEXT:    kmovw %k1, %eax
6265; AVX512DQ-NEXT:    vpinsrb $12, %eax, %xmm1, %xmm1
6266; AVX512DQ-NEXT:    kshiftlw $2, %k0, %k1
6267; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6268; AVX512DQ-NEXT:    kmovw %k1, %eax
6269; AVX512DQ-NEXT:    vpinsrb $13, %eax, %xmm1, %xmm1
6270; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k1
6271; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6272; AVX512DQ-NEXT:    kmovw %k1, %eax
6273; AVX512DQ-NEXT:    vpinsrb $14, %eax, %xmm1, %xmm1
6274; AVX512DQ-NEXT:    kshiftrw $15, %k0, %k0
6275; AVX512DQ-NEXT:    kmovw %k0, %eax
6276; AVX512DQ-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm1
6277; AVX512DQ-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
6278; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm0
6279; AVX512DQ-NEXT:    vpslld $31, %zmm0, %zmm0
6280; AVX512DQ-NEXT:    vptestmd %zmm0, %zmm0, %k0
6281; AVX512DQ-NEXT:    kshiftlw $14, %k0, %k1
6282; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6283; AVX512DQ-NEXT:    kmovw %k1, %eax
6284; AVX512DQ-NEXT:    kshiftlw $15, %k0, %k1
6285; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6286; AVX512DQ-NEXT:    kmovw %k1, %ecx
6287; AVX512DQ-NEXT:    vmovd %ecx, %xmm0
6288; AVX512DQ-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0
6289; AVX512DQ-NEXT:    kshiftlw $13, %k0, %k1
6290; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6291; AVX512DQ-NEXT:    kmovw %k1, %eax
6292; AVX512DQ-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0
6293; AVX512DQ-NEXT:    kshiftlw $12, %k0, %k1
6294; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6295; AVX512DQ-NEXT:    kmovw %k1, %eax
6296; AVX512DQ-NEXT:    vpinsrb $3, %eax, %xmm0, %xmm0
6297; AVX512DQ-NEXT:    kshiftlw $11, %k0, %k1
6298; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6299; AVX512DQ-NEXT:    kmovw %k1, %eax
6300; AVX512DQ-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0
6301; AVX512DQ-NEXT:    kshiftlw $10, %k0, %k1
6302; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6303; AVX512DQ-NEXT:    kmovw %k1, %eax
6304; AVX512DQ-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0
6305; AVX512DQ-NEXT:    kshiftlw $9, %k0, %k1
6306; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6307; AVX512DQ-NEXT:    kmovw %k1, %eax
6308; AVX512DQ-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0
6309; AVX512DQ-NEXT:    kshiftlw $8, %k0, %k1
6310; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6311; AVX512DQ-NEXT:    kmovw %k1, %eax
6312; AVX512DQ-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0
6313; AVX512DQ-NEXT:    kshiftlw $7, %k0, %k1
6314; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6315; AVX512DQ-NEXT:    kmovw %k1, %eax
6316; AVX512DQ-NEXT:    vpinsrb $8, %eax, %xmm0, %xmm0
6317; AVX512DQ-NEXT:    kshiftlw $6, %k0, %k1
6318; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6319; AVX512DQ-NEXT:    kmovw %k1, %eax
6320; AVX512DQ-NEXT:    vpinsrb $9, %eax, %xmm0, %xmm0
6321; AVX512DQ-NEXT:    kshiftlw $5, %k0, %k1
6322; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6323; AVX512DQ-NEXT:    kmovw %k1, %eax
6324; AVX512DQ-NEXT:    vpinsrb $10, %eax, %xmm0, %xmm0
6325; AVX512DQ-NEXT:    kshiftlw $4, %k0, %k1
6326; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6327; AVX512DQ-NEXT:    kmovw %k1, %eax
6328; AVX512DQ-NEXT:    vpinsrb $11, %eax, %xmm0, %xmm0
6329; AVX512DQ-NEXT:    kshiftlw $3, %k0, %k1
6330; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6331; AVX512DQ-NEXT:    kmovw %k1, %eax
6332; AVX512DQ-NEXT:    vpinsrb $12, %eax, %xmm0, %xmm0
6333; AVX512DQ-NEXT:    kshiftlw $2, %k0, %k1
6334; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6335; AVX512DQ-NEXT:    kmovw %k1, %eax
6336; AVX512DQ-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0
6337; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k1
6338; AVX512DQ-NEXT:    kshiftrw $15, %k1, %k1
6339; AVX512DQ-NEXT:    kmovw %k1, %eax
6340; AVX512DQ-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0
6341; AVX512DQ-NEXT:    kshiftrw $15, %k0, %k0
6342; AVX512DQ-NEXT:    kmovw %k0, %eax
6343; AVX512DQ-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0
6344; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
6345; AVX512DQ-NEXT:    vpsllw $7, %ymm0, %ymm0
6346; AVX512DQ-NEXT:    vpand %ymm3, %ymm0, %ymm0
6347; AVX512DQ-NEXT:    vpcmpgtb %ymm0, %ymm6, %ymm0
6348; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm1
6349; AVX512DQ-NEXT:    vextracti128 $1, %ymm2, %xmm3
6350; AVX512DQ-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
6351; AVX512DQ-NEXT:    # kill: %XMM2<def> %XMM2<kill> %YMM2<kill>
6352; AVX512DQ-NEXT:    retq
6353;
6354; AVX512BW-LABEL: test_cmp_v64i16:
6355; AVX512BW:       # BB#0:
6356; AVX512BW-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
6357; AVX512BW-NEXT:    vpextrw $1, %xmm4, %ecx
6358; AVX512BW-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
6359; AVX512BW-NEXT:    vpextrw $1, %xmm5, %edx
6360; AVX512BW-NEXT:    xorl %eax, %eax
6361; AVX512BW-NEXT:    cmpw %cx, %dx
6362; AVX512BW-NEXT:    movw $-1, %cx
6363; AVX512BW-NEXT:    movl $0, %edx
6364; AVX512BW-NEXT:    cmovgw %cx, %dx
6365; AVX512BW-NEXT:    vmovd %xmm4, %esi
6366; AVX512BW-NEXT:    vmovd %xmm5, %edi
6367; AVX512BW-NEXT:    cmpw %si, %di
6368; AVX512BW-NEXT:    movl $0, %esi
6369; AVX512BW-NEXT:    cmovgw %cx, %si
6370; AVX512BW-NEXT:    vmovd %esi, %xmm6
6371; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm6, %xmm6
6372; AVX512BW-NEXT:    vpextrw $2, %xmm4, %edx
6373; AVX512BW-NEXT:    vpextrw $2, %xmm5, %esi
6374; AVX512BW-NEXT:    cmpw %dx, %si
6375; AVX512BW-NEXT:    movl $0, %edx
6376; AVX512BW-NEXT:    cmovgw %cx, %dx
6377; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm6, %xmm6
6378; AVX512BW-NEXT:    vpextrw $3, %xmm4, %edx
6379; AVX512BW-NEXT:    vpextrw $3, %xmm5, %esi
6380; AVX512BW-NEXT:    cmpw %dx, %si
6381; AVX512BW-NEXT:    movl $0, %edx
6382; AVX512BW-NEXT:    cmovgw %cx, %dx
6383; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm6, %xmm6
6384; AVX512BW-NEXT:    vpextrw $4, %xmm4, %edx
6385; AVX512BW-NEXT:    vpextrw $4, %xmm5, %esi
6386; AVX512BW-NEXT:    cmpw %dx, %si
6387; AVX512BW-NEXT:    movl $0, %edx
6388; AVX512BW-NEXT:    cmovgw %cx, %dx
6389; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm6, %xmm6
6390; AVX512BW-NEXT:    vpextrw $5, %xmm4, %edx
6391; AVX512BW-NEXT:    vpextrw $5, %xmm5, %esi
6392; AVX512BW-NEXT:    cmpw %dx, %si
6393; AVX512BW-NEXT:    movl $0, %edx
6394; AVX512BW-NEXT:    cmovgw %cx, %dx
6395; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm6, %xmm6
6396; AVX512BW-NEXT:    vpextrw $6, %xmm4, %edx
6397; AVX512BW-NEXT:    vpextrw $6, %xmm5, %esi
6398; AVX512BW-NEXT:    cmpw %dx, %si
6399; AVX512BW-NEXT:    movl $0, %edx
6400; AVX512BW-NEXT:    cmovgw %cx, %dx
6401; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm6, %xmm6
6402; AVX512BW-NEXT:    vpextrw $7, %xmm4, %edx
6403; AVX512BW-NEXT:    vpextrw $7, %xmm5, %esi
6404; AVX512BW-NEXT:    cmpw %dx, %si
6405; AVX512BW-NEXT:    movl $0, %edx
6406; AVX512BW-NEXT:    cmovgw %cx, %dx
6407; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm6, %xmm4
6408; AVX512BW-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
6409; AVX512BW-NEXT:    vpextrw $1, %xmm5, %edx
6410; AVX512BW-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
6411; AVX512BW-NEXT:    vpextrw $1, %xmm6, %esi
6412; AVX512BW-NEXT:    cmpw %dx, %si
6413; AVX512BW-NEXT:    movl $0, %edx
6414; AVX512BW-NEXT:    cmovgw %cx, %dx
6415; AVX512BW-NEXT:    vmovd %xmm5, %esi
6416; AVX512BW-NEXT:    vmovd %xmm6, %edi
6417; AVX512BW-NEXT:    cmpw %si, %di
6418; AVX512BW-NEXT:    movl $0, %esi
6419; AVX512BW-NEXT:    cmovgw %cx, %si
6420; AVX512BW-NEXT:    vmovd %esi, %xmm7
6421; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm7, %xmm7
6422; AVX512BW-NEXT:    vpextrw $2, %xmm5, %edx
6423; AVX512BW-NEXT:    vpextrw $2, %xmm6, %esi
6424; AVX512BW-NEXT:    cmpw %dx, %si
6425; AVX512BW-NEXT:    movl $0, %edx
6426; AVX512BW-NEXT:    cmovgw %cx, %dx
6427; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm7, %xmm7
6428; AVX512BW-NEXT:    vpextrw $3, %xmm5, %edx
6429; AVX512BW-NEXT:    vpextrw $3, %xmm6, %esi
6430; AVX512BW-NEXT:    cmpw %dx, %si
6431; AVX512BW-NEXT:    movl $0, %edx
6432; AVX512BW-NEXT:    cmovgw %cx, %dx
6433; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm7, %xmm7
6434; AVX512BW-NEXT:    vpextrw $4, %xmm5, %edx
6435; AVX512BW-NEXT:    vpextrw $4, %xmm6, %esi
6436; AVX512BW-NEXT:    cmpw %dx, %si
6437; AVX512BW-NEXT:    movl $0, %edx
6438; AVX512BW-NEXT:    cmovgw %cx, %dx
6439; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm7, %xmm7
6440; AVX512BW-NEXT:    vpextrw $5, %xmm5, %edx
6441; AVX512BW-NEXT:    vpextrw $5, %xmm6, %esi
6442; AVX512BW-NEXT:    cmpw %dx, %si
6443; AVX512BW-NEXT:    movl $0, %edx
6444; AVX512BW-NEXT:    cmovgw %cx, %dx
6445; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm7, %xmm7
6446; AVX512BW-NEXT:    vpextrw $6, %xmm5, %edx
6447; AVX512BW-NEXT:    vpextrw $6, %xmm6, %esi
6448; AVX512BW-NEXT:    cmpw %dx, %si
6449; AVX512BW-NEXT:    movl $0, %edx
6450; AVX512BW-NEXT:    cmovgw %cx, %dx
6451; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm7, %xmm7
6452; AVX512BW-NEXT:    vpextrw $7, %xmm5, %edx
6453; AVX512BW-NEXT:    vpextrw $7, %xmm6, %esi
6454; AVX512BW-NEXT:    cmpw %dx, %si
6455; AVX512BW-NEXT:    movl $0, %edx
6456; AVX512BW-NEXT:    cmovgw %cx, %dx
6457; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm7, %xmm5
6458; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
6459; AVX512BW-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
6460; AVX512BW-NEXT:    vpextrw $1, %xmm5, %edx
6461; AVX512BW-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
6462; AVX512BW-NEXT:    vpextrw $1, %xmm6, %esi
6463; AVX512BW-NEXT:    cmpw %dx, %si
6464; AVX512BW-NEXT:    movl $0, %edx
6465; AVX512BW-NEXT:    cmovgw %cx, %dx
6466; AVX512BW-NEXT:    vmovd %xmm5, %esi
6467; AVX512BW-NEXT:    vmovd %xmm6, %edi
6468; AVX512BW-NEXT:    cmpw %si, %di
6469; AVX512BW-NEXT:    movl $0, %esi
6470; AVX512BW-NEXT:    cmovgw %cx, %si
6471; AVX512BW-NEXT:    vmovd %esi, %xmm7
6472; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm7, %xmm7
6473; AVX512BW-NEXT:    vpextrw $2, %xmm5, %edx
6474; AVX512BW-NEXT:    vpextrw $2, %xmm6, %esi
6475; AVX512BW-NEXT:    cmpw %dx, %si
6476; AVX512BW-NEXT:    movl $0, %edx
6477; AVX512BW-NEXT:    cmovgw %cx, %dx
6478; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm7, %xmm7
6479; AVX512BW-NEXT:    vpextrw $3, %xmm5, %edx
6480; AVX512BW-NEXT:    vpextrw $3, %xmm6, %esi
6481; AVX512BW-NEXT:    cmpw %dx, %si
6482; AVX512BW-NEXT:    movl $0, %edx
6483; AVX512BW-NEXT:    cmovgw %cx, %dx
6484; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm7, %xmm7
6485; AVX512BW-NEXT:    vpextrw $4, %xmm5, %edx
6486; AVX512BW-NEXT:    vpextrw $4, %xmm6, %esi
6487; AVX512BW-NEXT:    cmpw %dx, %si
6488; AVX512BW-NEXT:    movl $0, %edx
6489; AVX512BW-NEXT:    cmovgw %cx, %dx
6490; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm7, %xmm7
6491; AVX512BW-NEXT:    vpextrw $5, %xmm5, %edx
6492; AVX512BW-NEXT:    vpextrw $5, %xmm6, %esi
6493; AVX512BW-NEXT:    cmpw %dx, %si
6494; AVX512BW-NEXT:    movl $0, %edx
6495; AVX512BW-NEXT:    cmovgw %cx, %dx
6496; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm7, %xmm7
6497; AVX512BW-NEXT:    vpextrw $6, %xmm5, %edx
6498; AVX512BW-NEXT:    vpextrw $6, %xmm6, %esi
6499; AVX512BW-NEXT:    cmpw %dx, %si
6500; AVX512BW-NEXT:    movl $0, %edx
6501; AVX512BW-NEXT:    cmovgw %cx, %dx
6502; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm7, %xmm7
6503; AVX512BW-NEXT:    vpextrw $7, %xmm5, %edx
6504; AVX512BW-NEXT:    vpextrw $7, %xmm6, %esi
6505; AVX512BW-NEXT:    cmpw %dx, %si
6506; AVX512BW-NEXT:    movl $0, %edx
6507; AVX512BW-NEXT:    cmovgw %cx, %dx
6508; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm7, %xmm5
6509; AVX512BW-NEXT:    vpextrw $1, %xmm2, %edx
6510; AVX512BW-NEXT:    vpextrw $1, %xmm0, %esi
6511; AVX512BW-NEXT:    cmpw %dx, %si
6512; AVX512BW-NEXT:    movl $0, %edx
6513; AVX512BW-NEXT:    cmovgw %cx, %dx
6514; AVX512BW-NEXT:    vmovd %xmm2, %esi
6515; AVX512BW-NEXT:    vmovd %xmm0, %edi
6516; AVX512BW-NEXT:    cmpw %si, %di
6517; AVX512BW-NEXT:    movl $0, %esi
6518; AVX512BW-NEXT:    cmovgw %cx, %si
6519; AVX512BW-NEXT:    vmovd %esi, %xmm6
6520; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm6, %xmm6
6521; AVX512BW-NEXT:    vpextrw $2, %xmm2, %edx
6522; AVX512BW-NEXT:    vpextrw $2, %xmm0, %esi
6523; AVX512BW-NEXT:    cmpw %dx, %si
6524; AVX512BW-NEXT:    movl $0, %edx
6525; AVX512BW-NEXT:    cmovgw %cx, %dx
6526; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm6, %xmm6
6527; AVX512BW-NEXT:    vpextrw $3, %xmm2, %edx
6528; AVX512BW-NEXT:    vpextrw $3, %xmm0, %esi
6529; AVX512BW-NEXT:    cmpw %dx, %si
6530; AVX512BW-NEXT:    movl $0, %edx
6531; AVX512BW-NEXT:    cmovgw %cx, %dx
6532; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm6, %xmm6
6533; AVX512BW-NEXT:    vpextrw $4, %xmm2, %edx
6534; AVX512BW-NEXT:    vpextrw $4, %xmm0, %esi
6535; AVX512BW-NEXT:    cmpw %dx, %si
6536; AVX512BW-NEXT:    movl $0, %edx
6537; AVX512BW-NEXT:    cmovgw %cx, %dx
6538; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm6, %xmm6
6539; AVX512BW-NEXT:    vpextrw $5, %xmm2, %edx
6540; AVX512BW-NEXT:    vpextrw $5, %xmm0, %esi
6541; AVX512BW-NEXT:    cmpw %dx, %si
6542; AVX512BW-NEXT:    movl $0, %edx
6543; AVX512BW-NEXT:    cmovgw %cx, %dx
6544; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm6, %xmm6
6545; AVX512BW-NEXT:    vpextrw $6, %xmm2, %edx
6546; AVX512BW-NEXT:    vpextrw $6, %xmm0, %esi
6547; AVX512BW-NEXT:    cmpw %dx, %si
6548; AVX512BW-NEXT:    movl $0, %edx
6549; AVX512BW-NEXT:    cmovgw %cx, %dx
6550; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm6, %xmm6
6551; AVX512BW-NEXT:    vpextrw $7, %xmm2, %edx
6552; AVX512BW-NEXT:    vpextrw $7, %xmm0, %esi
6553; AVX512BW-NEXT:    cmpw %dx, %si
6554; AVX512BW-NEXT:    movl $0, %edx
6555; AVX512BW-NEXT:    cmovgw %cx, %dx
6556; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm6, %xmm0
6557; AVX512BW-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
6558; AVX512BW-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
6559; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
6560; AVX512BW-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
6561; AVX512BW-NEXT:    vpextrw $1, %xmm2, %edx
6562; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
6563; AVX512BW-NEXT:    vpextrw $1, %xmm4, %esi
6564; AVX512BW-NEXT:    cmpw %dx, %si
6565; AVX512BW-NEXT:    movl $0, %edx
6566; AVX512BW-NEXT:    cmovgw %cx, %dx
6567; AVX512BW-NEXT:    vmovd %xmm2, %esi
6568; AVX512BW-NEXT:    vmovd %xmm4, %edi
6569; AVX512BW-NEXT:    cmpw %si, %di
6570; AVX512BW-NEXT:    movl $0, %esi
6571; AVX512BW-NEXT:    cmovgw %cx, %si
6572; AVX512BW-NEXT:    vmovd %esi, %xmm5
6573; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm5, %xmm5
6574; AVX512BW-NEXT:    vpextrw $2, %xmm2, %edx
6575; AVX512BW-NEXT:    vpextrw $2, %xmm4, %esi
6576; AVX512BW-NEXT:    cmpw %dx, %si
6577; AVX512BW-NEXT:    movl $0, %edx
6578; AVX512BW-NEXT:    cmovgw %cx, %dx
6579; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm5, %xmm5
6580; AVX512BW-NEXT:    vpextrw $3, %xmm2, %edx
6581; AVX512BW-NEXT:    vpextrw $3, %xmm4, %esi
6582; AVX512BW-NEXT:    cmpw %dx, %si
6583; AVX512BW-NEXT:    movl $0, %edx
6584; AVX512BW-NEXT:    cmovgw %cx, %dx
6585; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm5, %xmm5
6586; AVX512BW-NEXT:    vpextrw $4, %xmm2, %edx
6587; AVX512BW-NEXT:    vpextrw $4, %xmm4, %esi
6588; AVX512BW-NEXT:    cmpw %dx, %si
6589; AVX512BW-NEXT:    movl $0, %edx
6590; AVX512BW-NEXT:    cmovgw %cx, %dx
6591; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm5, %xmm5
6592; AVX512BW-NEXT:    vpextrw $5, %xmm2, %edx
6593; AVX512BW-NEXT:    vpextrw $5, %xmm4, %esi
6594; AVX512BW-NEXT:    cmpw %dx, %si
6595; AVX512BW-NEXT:    movl $0, %edx
6596; AVX512BW-NEXT:    cmovgw %cx, %dx
6597; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm5, %xmm5
6598; AVX512BW-NEXT:    vpextrw $6, %xmm2, %edx
6599; AVX512BW-NEXT:    vpextrw $6, %xmm4, %esi
6600; AVX512BW-NEXT:    cmpw %dx, %si
6601; AVX512BW-NEXT:    movl $0, %edx
6602; AVX512BW-NEXT:    cmovgw %cx, %dx
6603; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm5, %xmm5
6604; AVX512BW-NEXT:    vpextrw $7, %xmm2, %edx
6605; AVX512BW-NEXT:    vpextrw $7, %xmm4, %esi
6606; AVX512BW-NEXT:    cmpw %dx, %si
6607; AVX512BW-NEXT:    movl $0, %edx
6608; AVX512BW-NEXT:    cmovgw %cx, %dx
6609; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm5, %xmm2
6610; AVX512BW-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
6611; AVX512BW-NEXT:    vpextrw $1, %xmm4, %edx
6612; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
6613; AVX512BW-NEXT:    vpextrw $1, %xmm5, %esi
6614; AVX512BW-NEXT:    cmpw %dx, %si
6615; AVX512BW-NEXT:    movl $0, %edx
6616; AVX512BW-NEXT:    cmovgw %cx, %dx
6617; AVX512BW-NEXT:    vmovd %xmm4, %esi
6618; AVX512BW-NEXT:    vmovd %xmm5, %edi
6619; AVX512BW-NEXT:    cmpw %si, %di
6620; AVX512BW-NEXT:    movl $0, %esi
6621; AVX512BW-NEXT:    cmovgw %cx, %si
6622; AVX512BW-NEXT:    vmovd %esi, %xmm6
6623; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm6, %xmm6
6624; AVX512BW-NEXT:    vpextrw $2, %xmm4, %edx
6625; AVX512BW-NEXT:    vpextrw $2, %xmm5, %esi
6626; AVX512BW-NEXT:    cmpw %dx, %si
6627; AVX512BW-NEXT:    movl $0, %edx
6628; AVX512BW-NEXT:    cmovgw %cx, %dx
6629; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm6, %xmm6
6630; AVX512BW-NEXT:    vpextrw $3, %xmm4, %edx
6631; AVX512BW-NEXT:    vpextrw $3, %xmm5, %esi
6632; AVX512BW-NEXT:    cmpw %dx, %si
6633; AVX512BW-NEXT:    movl $0, %edx
6634; AVX512BW-NEXT:    cmovgw %cx, %dx
6635; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm6, %xmm6
6636; AVX512BW-NEXT:    vpextrw $4, %xmm4, %edx
6637; AVX512BW-NEXT:    vpextrw $4, %xmm5, %esi
6638; AVX512BW-NEXT:    cmpw %dx, %si
6639; AVX512BW-NEXT:    movl $0, %edx
6640; AVX512BW-NEXT:    cmovgw %cx, %dx
6641; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm6, %xmm6
6642; AVX512BW-NEXT:    vpextrw $5, %xmm4, %edx
6643; AVX512BW-NEXT:    vpextrw $5, %xmm5, %esi
6644; AVX512BW-NEXT:    cmpw %dx, %si
6645; AVX512BW-NEXT:    movl $0, %edx
6646; AVX512BW-NEXT:    cmovgw %cx, %dx
6647; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm6, %xmm6
6648; AVX512BW-NEXT:    vpextrw $6, %xmm4, %edx
6649; AVX512BW-NEXT:    vpextrw $6, %xmm5, %esi
6650; AVX512BW-NEXT:    cmpw %dx, %si
6651; AVX512BW-NEXT:    movl $0, %edx
6652; AVX512BW-NEXT:    cmovgw %cx, %dx
6653; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm6, %xmm6
6654; AVX512BW-NEXT:    vpextrw $7, %xmm4, %edx
6655; AVX512BW-NEXT:    vpextrw $7, %xmm5, %esi
6656; AVX512BW-NEXT:    cmpw %dx, %si
6657; AVX512BW-NEXT:    movl $0, %edx
6658; AVX512BW-NEXT:    cmovgw %cx, %dx
6659; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm6, %xmm4
6660; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
6661; AVX512BW-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
6662; AVX512BW-NEXT:    vpextrw $1, %xmm4, %edx
6663; AVX512BW-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
6664; AVX512BW-NEXT:    vpextrw $1, %xmm5, %esi
6665; AVX512BW-NEXT:    cmpw %dx, %si
6666; AVX512BW-NEXT:    movl $0, %edx
6667; AVX512BW-NEXT:    cmovgw %cx, %dx
6668; AVX512BW-NEXT:    vmovd %xmm4, %esi
6669; AVX512BW-NEXT:    vmovd %xmm5, %edi
6670; AVX512BW-NEXT:    cmpw %si, %di
6671; AVX512BW-NEXT:    movl $0, %esi
6672; AVX512BW-NEXT:    cmovgw %cx, %si
6673; AVX512BW-NEXT:    vmovd %esi, %xmm6
6674; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm6, %xmm6
6675; AVX512BW-NEXT:    vpextrw $2, %xmm4, %edx
6676; AVX512BW-NEXT:    vpextrw $2, %xmm5, %esi
6677; AVX512BW-NEXT:    cmpw %dx, %si
6678; AVX512BW-NEXT:    movl $0, %edx
6679; AVX512BW-NEXT:    cmovgw %cx, %dx
6680; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm6, %xmm6
6681; AVX512BW-NEXT:    vpextrw $3, %xmm4, %edx
6682; AVX512BW-NEXT:    vpextrw $3, %xmm5, %esi
6683; AVX512BW-NEXT:    cmpw %dx, %si
6684; AVX512BW-NEXT:    movl $0, %edx
6685; AVX512BW-NEXT:    cmovgw %cx, %dx
6686; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm6, %xmm6
6687; AVX512BW-NEXT:    vpextrw $4, %xmm4, %edx
6688; AVX512BW-NEXT:    vpextrw $4, %xmm5, %esi
6689; AVX512BW-NEXT:    cmpw %dx, %si
6690; AVX512BW-NEXT:    movl $0, %edx
6691; AVX512BW-NEXT:    cmovgw %cx, %dx
6692; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm6, %xmm6
6693; AVX512BW-NEXT:    vpextrw $5, %xmm4, %edx
6694; AVX512BW-NEXT:    vpextrw $5, %xmm5, %esi
6695; AVX512BW-NEXT:    cmpw %dx, %si
6696; AVX512BW-NEXT:    movl $0, %edx
6697; AVX512BW-NEXT:    cmovgw %cx, %dx
6698; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm6, %xmm6
6699; AVX512BW-NEXT:    vpextrw $6, %xmm4, %edx
6700; AVX512BW-NEXT:    vpextrw $6, %xmm5, %esi
6701; AVX512BW-NEXT:    cmpw %dx, %si
6702; AVX512BW-NEXT:    movl $0, %edx
6703; AVX512BW-NEXT:    cmovgw %cx, %dx
6704; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm6, %xmm6
6705; AVX512BW-NEXT:    vpextrw $7, %xmm4, %edx
6706; AVX512BW-NEXT:    vpextrw $7, %xmm5, %esi
6707; AVX512BW-NEXT:    cmpw %dx, %si
6708; AVX512BW-NEXT:    movl $0, %edx
6709; AVX512BW-NEXT:    cmovgw %cx, %dx
6710; AVX512BW-NEXT:    vpinsrw $7, %edx, %xmm6, %xmm4
6711; AVX512BW-NEXT:    vpextrw $1, %xmm3, %edx
6712; AVX512BW-NEXT:    vpextrw $1, %xmm1, %esi
6713; AVX512BW-NEXT:    cmpw %dx, %si
6714; AVX512BW-NEXT:    movl $0, %edx
6715; AVX512BW-NEXT:    cmovgw %cx, %dx
6716; AVX512BW-NEXT:    vmovd %xmm3, %esi
6717; AVX512BW-NEXT:    vmovd %xmm1, %edi
6718; AVX512BW-NEXT:    cmpw %si, %di
6719; AVX512BW-NEXT:    movl $0, %esi
6720; AVX512BW-NEXT:    cmovgw %cx, %si
6721; AVX512BW-NEXT:    vmovd %esi, %xmm5
6722; AVX512BW-NEXT:    vpinsrw $1, %edx, %xmm5, %xmm5
6723; AVX512BW-NEXT:    vpextrw $2, %xmm3, %edx
6724; AVX512BW-NEXT:    vpextrw $2, %xmm1, %esi
6725; AVX512BW-NEXT:    cmpw %dx, %si
6726; AVX512BW-NEXT:    movl $0, %edx
6727; AVX512BW-NEXT:    cmovgw %cx, %dx
6728; AVX512BW-NEXT:    vpinsrw $2, %edx, %xmm5, %xmm5
6729; AVX512BW-NEXT:    vpextrw $3, %xmm3, %edx
6730; AVX512BW-NEXT:    vpextrw $3, %xmm1, %esi
6731; AVX512BW-NEXT:    cmpw %dx, %si
6732; AVX512BW-NEXT:    movl $0, %edx
6733; AVX512BW-NEXT:    cmovgw %cx, %dx
6734; AVX512BW-NEXT:    vpinsrw $3, %edx, %xmm5, %xmm5
6735; AVX512BW-NEXT:    vpextrw $4, %xmm3, %edx
6736; AVX512BW-NEXT:    vpextrw $4, %xmm1, %esi
6737; AVX512BW-NEXT:    cmpw %dx, %si
6738; AVX512BW-NEXT:    movl $0, %edx
6739; AVX512BW-NEXT:    cmovgw %cx, %dx
6740; AVX512BW-NEXT:    vpinsrw $4, %edx, %xmm5, %xmm5
6741; AVX512BW-NEXT:    vpextrw $5, %xmm3, %edx
6742; AVX512BW-NEXT:    vpextrw $5, %xmm1, %esi
6743; AVX512BW-NEXT:    cmpw %dx, %si
6744; AVX512BW-NEXT:    movl $0, %edx
6745; AVX512BW-NEXT:    cmovgw %cx, %dx
6746; AVX512BW-NEXT:    vpinsrw $5, %edx, %xmm5, %xmm5
6747; AVX512BW-NEXT:    vpextrw $6, %xmm3, %edx
6748; AVX512BW-NEXT:    vpextrw $6, %xmm1, %esi
6749; AVX512BW-NEXT:    cmpw %dx, %si
6750; AVX512BW-NEXT:    movl $0, %edx
6751; AVX512BW-NEXT:    cmovgw %cx, %dx
6752; AVX512BW-NEXT:    vpinsrw $6, %edx, %xmm5, %xmm5
6753; AVX512BW-NEXT:    vpextrw $7, %xmm3, %edx
6754; AVX512BW-NEXT:    vpextrw $7, %xmm1, %esi
6755; AVX512BW-NEXT:    cmpw %dx, %si
6756; AVX512BW-NEXT:    cmovgw %cx, %ax
6757; AVX512BW-NEXT:    vpinsrw $7, %eax, %xmm5, %xmm1
6758; AVX512BW-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
6759; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
6760; AVX512BW-NEXT:    vpmovwb %zmm1, %ymm1
6761; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
6762; AVX512BW-NEXT:    retq
6763  %1 = icmp sgt <64 x i16> %a0, %a1
6764  ret <64 x i1> %1
6765}
6766
6767define <128 x i1> @test_cmp_v128i8(<128 x i8> %a0, <128 x i8> %a1) nounwind {
6768; SSE2-LABEL: test_cmp_v128i8:
6769; SSE2:       # BB#0:
6770; SSE2-NEXT:    pushq %rax
6771; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
6772; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
6773; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
6774; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
6775; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
6776; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
6777; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
6778; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
6779; SSE2-NEXT:    movdqa %xmm7, -{{[0-9]+}}(%rsp)
6780; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6781; SSE2-NEXT:    andb $1, %al
6782; SSE2-NEXT:    movb %al, 14(%rdi)
6783; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
6784; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6785; SSE2-NEXT:    andb $1, %al
6786; SSE2-NEXT:    movb %al, 12(%rdi)
6787; SSE2-NEXT:    movdqa %xmm5, -{{[0-9]+}}(%rsp)
6788; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6789; SSE2-NEXT:    andb $1, %al
6790; SSE2-NEXT:    movb %al, 10(%rdi)
6791; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
6792; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6793; SSE2-NEXT:    andb $1, %al
6794; SSE2-NEXT:    movb %al, 8(%rdi)
6795; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
6796; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6797; SSE2-NEXT:    andb $1, %al
6798; SSE2-NEXT:    movb %al, 6(%rdi)
6799; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
6800; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6801; SSE2-NEXT:    andb $1, %al
6802; SSE2-NEXT:    movb %al, 4(%rdi)
6803; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
6804; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6805; SSE2-NEXT:    andb $1, %al
6806; SSE2-NEXT:    movb %al, 2(%rdi)
6807; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
6808; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6809; SSE2-NEXT:    andb $1, %al
6810; SSE2-NEXT:    movb %al, (%rdi)
6811; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6812; SSE2-NEXT:    andb $1, %al
6813; SSE2-NEXT:    movb %al, 14(%rdi)
6814; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6815; SSE2-NEXT:    andb $1, %al
6816; SSE2-NEXT:    movb %al, 12(%rdi)
6817; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6818; SSE2-NEXT:    andb $1, %al
6819; SSE2-NEXT:    movb %al, 10(%rdi)
6820; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6821; SSE2-NEXT:    andb $1, %al
6822; SSE2-NEXT:    movb %al, 8(%rdi)
6823; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6824; SSE2-NEXT:    andb $1, %al
6825; SSE2-NEXT:    movb %al, 6(%rdi)
6826; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6827; SSE2-NEXT:    andb $1, %al
6828; SSE2-NEXT:    movb %al, 4(%rdi)
6829; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6830; SSE2-NEXT:    andb $1, %al
6831; SSE2-NEXT:    movb %al, 2(%rdi)
6832; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6833; SSE2-NEXT:    andb $1, %al
6834; SSE2-NEXT:    movb %al, (%rdi)
6835; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6836; SSE2-NEXT:    andb $1, %al
6837; SSE2-NEXT:    movb %al, 14(%rdi)
6838; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6839; SSE2-NEXT:    andb $1, %al
6840; SSE2-NEXT:    movb %al, 12(%rdi)
6841; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6842; SSE2-NEXT:    andb $1, %al
6843; SSE2-NEXT:    movb %al, 10(%rdi)
6844; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6845; SSE2-NEXT:    andb $1, %al
6846; SSE2-NEXT:    movb %al, 8(%rdi)
6847; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6848; SSE2-NEXT:    andb $1, %al
6849; SSE2-NEXT:    movb %al, 6(%rdi)
6850; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6851; SSE2-NEXT:    andb $1, %al
6852; SSE2-NEXT:    movb %al, 4(%rdi)
6853; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6854; SSE2-NEXT:    andb $1, %al
6855; SSE2-NEXT:    movb %al, 2(%rdi)
6856; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6857; SSE2-NEXT:    andb $1, %al
6858; SSE2-NEXT:    movb %al, (%rdi)
6859; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6860; SSE2-NEXT:    andb $1, %al
6861; SSE2-NEXT:    movb %al, 14(%rdi)
6862; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6863; SSE2-NEXT:    andb $1, %al
6864; SSE2-NEXT:    movb %al, 12(%rdi)
6865; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6866; SSE2-NEXT:    andb $1, %al
6867; SSE2-NEXT:    movb %al, 10(%rdi)
6868; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6869; SSE2-NEXT:    andb $1, %al
6870; SSE2-NEXT:    movb %al, 8(%rdi)
6871; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6872; SSE2-NEXT:    andb $1, %al
6873; SSE2-NEXT:    movb %al, 6(%rdi)
6874; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6875; SSE2-NEXT:    andb $1, %al
6876; SSE2-NEXT:    movb %al, 4(%rdi)
6877; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6878; SSE2-NEXT:    andb $1, %al
6879; SSE2-NEXT:    movb %al, 2(%rdi)
6880; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6881; SSE2-NEXT:    andb $1, %al
6882; SSE2-NEXT:    movb %al, (%rdi)
6883; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6884; SSE2-NEXT:    andb $1, %al
6885; SSE2-NEXT:    movb %al, 14(%rdi)
6886; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6887; SSE2-NEXT:    andb $1, %al
6888; SSE2-NEXT:    movb %al, 12(%rdi)
6889; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6890; SSE2-NEXT:    andb $1, %al
6891; SSE2-NEXT:    movb %al, 10(%rdi)
6892; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6893; SSE2-NEXT:    andb $1, %al
6894; SSE2-NEXT:    movb %al, 8(%rdi)
6895; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6896; SSE2-NEXT:    andb $1, %al
6897; SSE2-NEXT:    movb %al, 6(%rdi)
6898; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6899; SSE2-NEXT:    andb $1, %al
6900; SSE2-NEXT:    movb %al, 4(%rdi)
6901; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6902; SSE2-NEXT:    andb $1, %al
6903; SSE2-NEXT:    movb %al, 2(%rdi)
6904; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6905; SSE2-NEXT:    andb $1, %al
6906; SSE2-NEXT:    movb %al, (%rdi)
6907; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6908; SSE2-NEXT:    andb $1, %al
6909; SSE2-NEXT:    movb %al, 14(%rdi)
6910; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6911; SSE2-NEXT:    andb $1, %al
6912; SSE2-NEXT:    movb %al, 12(%rdi)
6913; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6914; SSE2-NEXT:    andb $1, %al
6915; SSE2-NEXT:    movb %al, 10(%rdi)
6916; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6917; SSE2-NEXT:    andb $1, %al
6918; SSE2-NEXT:    movb %al, 8(%rdi)
6919; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6920; SSE2-NEXT:    andb $1, %al
6921; SSE2-NEXT:    movb %al, 6(%rdi)
6922; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6923; SSE2-NEXT:    andb $1, %al
6924; SSE2-NEXT:    movb %al, 4(%rdi)
6925; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6926; SSE2-NEXT:    andb $1, %al
6927; SSE2-NEXT:    movb %al, 2(%rdi)
6928; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6929; SSE2-NEXT:    andb $1, %al
6930; SSE2-NEXT:    movb %al, (%rdi)
6931; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6932; SSE2-NEXT:    andb $1, %al
6933; SSE2-NEXT:    movb %al, 14(%rdi)
6934; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6935; SSE2-NEXT:    andb $1, %al
6936; SSE2-NEXT:    movb %al, 12(%rdi)
6937; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6938; SSE2-NEXT:    andb $1, %al
6939; SSE2-NEXT:    movb %al, 10(%rdi)
6940; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6941; SSE2-NEXT:    andb $1, %al
6942; SSE2-NEXT:    movb %al, 8(%rdi)
6943; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6944; SSE2-NEXT:    andb $1, %al
6945; SSE2-NEXT:    movb %al, 6(%rdi)
6946; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6947; SSE2-NEXT:    andb $1, %al
6948; SSE2-NEXT:    movb %al, 4(%rdi)
6949; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6950; SSE2-NEXT:    andb $1, %al
6951; SSE2-NEXT:    movb %al, 2(%rdi)
6952; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6953; SSE2-NEXT:    andb $1, %al
6954; SSE2-NEXT:    movb %al, (%rdi)
6955; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6956; SSE2-NEXT:    andb $1, %al
6957; SSE2-NEXT:    movb %al, 14(%rdi)
6958; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6959; SSE2-NEXT:    andb $1, %al
6960; SSE2-NEXT:    movb %al, 12(%rdi)
6961; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6962; SSE2-NEXT:    andb $1, %al
6963; SSE2-NEXT:    movb %al, 10(%rdi)
6964; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6965; SSE2-NEXT:    andb $1, %al
6966; SSE2-NEXT:    movb %al, 8(%rdi)
6967; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6968; SSE2-NEXT:    andb $1, %al
6969; SSE2-NEXT:    movb %al, 6(%rdi)
6970; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6971; SSE2-NEXT:    andb $1, %al
6972; SSE2-NEXT:    movb %al, 4(%rdi)
6973; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6974; SSE2-NEXT:    andb $1, %al
6975; SSE2-NEXT:    movb %al, 2(%rdi)
6976; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6977; SSE2-NEXT:    andb $1, %al
6978; SSE2-NEXT:    movb %al, (%rdi)
6979; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6980; SSE2-NEXT:    andb $1, %al
6981; SSE2-NEXT:    movb %al, 14(%rdi)
6982; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6983; SSE2-NEXT:    andb $1, %al
6984; SSE2-NEXT:    movb %al, 12(%rdi)
6985; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6986; SSE2-NEXT:    andb $1, %al
6987; SSE2-NEXT:    movb %al, 10(%rdi)
6988; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6989; SSE2-NEXT:    andb $1, %al
6990; SSE2-NEXT:    movb %al, 8(%rdi)
6991; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6992; SSE2-NEXT:    andb $1, %al
6993; SSE2-NEXT:    movb %al, 6(%rdi)
6994; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6995; SSE2-NEXT:    andb $1, %al
6996; SSE2-NEXT:    movb %al, 4(%rdi)
6997; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6998; SSE2-NEXT:    andb $1, %al
6999; SSE2-NEXT:    movb %al, 2(%rdi)
7000; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7001; SSE2-NEXT:    andb $1, %al
7002; SSE2-NEXT:    movb %al, (%rdi)
7003; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7004; SSE2-NEXT:    andb $1, %al
7005; SSE2-NEXT:    movb %al, 14(%rdi)
7006; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7007; SSE2-NEXT:    andb $1, %al
7008; SSE2-NEXT:    movb %al, 12(%rdi)
7009; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7010; SSE2-NEXT:    andb $1, %al
7011; SSE2-NEXT:    movb %al, 10(%rdi)
7012; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7013; SSE2-NEXT:    andb $1, %al
7014; SSE2-NEXT:    movb %al, 8(%rdi)
7015; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7016; SSE2-NEXT:    andb $1, %al
7017; SSE2-NEXT:    movb %al, 6(%rdi)
7018; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7019; SSE2-NEXT:    andb $1, %al
7020; SSE2-NEXT:    movb %al, 4(%rdi)
7021; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7022; SSE2-NEXT:    andb $1, %al
7023; SSE2-NEXT:    movb %al, 2(%rdi)
7024; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7025; SSE2-NEXT:    andb $1, %al
7026; SSE2-NEXT:    movb %al, (%rdi)
7027; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7028; SSE2-NEXT:    andb $1, %al
7029; SSE2-NEXT:    movb %al, 14(%rdi)
7030; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7031; SSE2-NEXT:    andb $1, %al
7032; SSE2-NEXT:    movb %al, 12(%rdi)
7033; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7034; SSE2-NEXT:    andb $1, %al
7035; SSE2-NEXT:    movb %al, 10(%rdi)
7036; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7037; SSE2-NEXT:    andb $1, %al
7038; SSE2-NEXT:    movb %al, 8(%rdi)
7039; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7040; SSE2-NEXT:    andb $1, %al
7041; SSE2-NEXT:    movb %al, 6(%rdi)
7042; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7043; SSE2-NEXT:    andb $1, %al
7044; SSE2-NEXT:    movb %al, 4(%rdi)
7045; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7046; SSE2-NEXT:    andb $1, %al
7047; SSE2-NEXT:    movb %al, 2(%rdi)
7048; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7049; SSE2-NEXT:    andb $1, %al
7050; SSE2-NEXT:    movb %al, (%rdi)
7051; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7052; SSE2-NEXT:    andb $1, %al
7053; SSE2-NEXT:    movb %al, 14(%rdi)
7054; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7055; SSE2-NEXT:    andb $1, %al
7056; SSE2-NEXT:    movb %al, 12(%rdi)
7057; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7058; SSE2-NEXT:    andb $1, %al
7059; SSE2-NEXT:    movb %al, 10(%rdi)
7060; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7061; SSE2-NEXT:    andb $1, %al
7062; SSE2-NEXT:    movb %al, 8(%rdi)
7063; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7064; SSE2-NEXT:    andb $1, %al
7065; SSE2-NEXT:    movb %al, 6(%rdi)
7066; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7067; SSE2-NEXT:    andb $1, %al
7068; SSE2-NEXT:    movb %al, 4(%rdi)
7069; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7070; SSE2-NEXT:    andb $1, %al
7071; SSE2-NEXT:    movb %al, 2(%rdi)
7072; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7073; SSE2-NEXT:    andb $1, %al
7074; SSE2-NEXT:    movb %al, (%rdi)
7075; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7076; SSE2-NEXT:    andb $1, %al
7077; SSE2-NEXT:    movb %al, 14(%rdi)
7078; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7079; SSE2-NEXT:    andb $1, %al
7080; SSE2-NEXT:    movb %al, 12(%rdi)
7081; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7082; SSE2-NEXT:    andb $1, %al
7083; SSE2-NEXT:    movb %al, 10(%rdi)
7084; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7085; SSE2-NEXT:    andb $1, %al
7086; SSE2-NEXT:    movb %al, 8(%rdi)
7087; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7088; SSE2-NEXT:    andb $1, %al
7089; SSE2-NEXT:    movb %al, 6(%rdi)
7090; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7091; SSE2-NEXT:    andb $1, %al
7092; SSE2-NEXT:    movb %al, 4(%rdi)
7093; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7094; SSE2-NEXT:    andb $1, %al
7095; SSE2-NEXT:    movb %al, 2(%rdi)
7096; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7097; SSE2-NEXT:    andb $1, %al
7098; SSE2-NEXT:    movb %al, (%rdi)
7099; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7100; SSE2-NEXT:    andb $1, %al
7101; SSE2-NEXT:    movb %al, 14(%rdi)
7102; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7103; SSE2-NEXT:    andb $1, %al
7104; SSE2-NEXT:    movb %al, 12(%rdi)
7105; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7106; SSE2-NEXT:    andb $1, %al
7107; SSE2-NEXT:    movb %al, 10(%rdi)
7108; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7109; SSE2-NEXT:    andb $1, %al
7110; SSE2-NEXT:    movb %al, 8(%rdi)
7111; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7112; SSE2-NEXT:    andb $1, %al
7113; SSE2-NEXT:    movb %al, 6(%rdi)
7114; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7115; SSE2-NEXT:    andb $1, %al
7116; SSE2-NEXT:    movb %al, 4(%rdi)
7117; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7118; SSE2-NEXT:    andb $1, %al
7119; SSE2-NEXT:    movb %al, 2(%rdi)
7120; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7121; SSE2-NEXT:    andb $1, %al
7122; SSE2-NEXT:    movb %al, (%rdi)
7123; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7124; SSE2-NEXT:    andb $1, %al
7125; SSE2-NEXT:    movb %al, 14(%rdi)
7126; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7127; SSE2-NEXT:    andb $1, %al
7128; SSE2-NEXT:    movb %al, 12(%rdi)
7129; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7130; SSE2-NEXT:    andb $1, %al
7131; SSE2-NEXT:    movb %al, 10(%rdi)
7132; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7133; SSE2-NEXT:    andb $1, %al
7134; SSE2-NEXT:    movb %al, 8(%rdi)
7135; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7136; SSE2-NEXT:    andb $1, %al
7137; SSE2-NEXT:    movb %al, 6(%rdi)
7138; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7139; SSE2-NEXT:    andb $1, %al
7140; SSE2-NEXT:    movb %al, 4(%rdi)
7141; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7142; SSE2-NEXT:    andb $1, %al
7143; SSE2-NEXT:    movb %al, 2(%rdi)
7144; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7145; SSE2-NEXT:    andb $1, %al
7146; SSE2-NEXT:    movb %al, (%rdi)
7147; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7148; SSE2-NEXT:    andb $1, %al
7149; SSE2-NEXT:    movb %al, 14(%rdi)
7150; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7151; SSE2-NEXT:    andb $1, %al
7152; SSE2-NEXT:    movb %al, 12(%rdi)
7153; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7154; SSE2-NEXT:    andb $1, %al
7155; SSE2-NEXT:    movb %al, 10(%rdi)
7156; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7157; SSE2-NEXT:    andb $1, %al
7158; SSE2-NEXT:    movb %al, 8(%rdi)
7159; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7160; SSE2-NEXT:    andb $1, %al
7161; SSE2-NEXT:    movb %al, 6(%rdi)
7162; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7163; SSE2-NEXT:    andb $1, %al
7164; SSE2-NEXT:    movb %al, 4(%rdi)
7165; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7166; SSE2-NEXT:    andb $1, %al
7167; SSE2-NEXT:    movb %al, 2(%rdi)
7168; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7169; SSE2-NEXT:    andb $1, %al
7170; SSE2-NEXT:    movb %al, (%rdi)
7171; SSE2-NEXT:    movq %rdi, %rax
7172; SSE2-NEXT:    popq %rcx
7173; SSE2-NEXT:    retq
7174;
7175; SSE42-LABEL: test_cmp_v128i8:
7176; SSE42:       # BB#0:
7177; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
7178; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
7179; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
7180; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
7181; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
7182; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
7183; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
7184; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
7185; SSE42-NEXT:    pextrb $15, %xmm7, %eax
7186; SSE42-NEXT:    andb $1, %al
7187; SSE42-NEXT:    movb %al, 14(%rdi)
7188; SSE42-NEXT:    pextrb $14, %xmm7, %eax
7189; SSE42-NEXT:    andb $1, %al
7190; SSE42-NEXT:    movb %al, 14(%rdi)
7191; SSE42-NEXT:    pextrb $13, %xmm7, %eax
7192; SSE42-NEXT:    andb $1, %al
7193; SSE42-NEXT:    movb %al, 14(%rdi)
7194; SSE42-NEXT:    pextrb $12, %xmm7, %eax
7195; SSE42-NEXT:    andb $1, %al
7196; SSE42-NEXT:    movb %al, 14(%rdi)
7197; SSE42-NEXT:    pextrb $11, %xmm7, %eax
7198; SSE42-NEXT:    andb $1, %al
7199; SSE42-NEXT:    movb %al, 14(%rdi)
7200; SSE42-NEXT:    pextrb $10, %xmm7, %eax
7201; SSE42-NEXT:    andb $1, %al
7202; SSE42-NEXT:    movb %al, 14(%rdi)
7203; SSE42-NEXT:    pextrb $9, %xmm7, %eax
7204; SSE42-NEXT:    andb $1, %al
7205; SSE42-NEXT:    movb %al, 14(%rdi)
7206; SSE42-NEXT:    pextrb $8, %xmm7, %eax
7207; SSE42-NEXT:    andb $1, %al
7208; SSE42-NEXT:    movb %al, 14(%rdi)
7209; SSE42-NEXT:    pextrb $7, %xmm7, %eax
7210; SSE42-NEXT:    andb $1, %al
7211; SSE42-NEXT:    movb %al, 14(%rdi)
7212; SSE42-NEXT:    pextrb $6, %xmm7, %eax
7213; SSE42-NEXT:    andb $1, %al
7214; SSE42-NEXT:    movb %al, 14(%rdi)
7215; SSE42-NEXT:    pextrb $5, %xmm7, %eax
7216; SSE42-NEXT:    andb $1, %al
7217; SSE42-NEXT:    movb %al, 14(%rdi)
7218; SSE42-NEXT:    pextrb $4, %xmm7, %eax
7219; SSE42-NEXT:    andb $1, %al
7220; SSE42-NEXT:    movb %al, 14(%rdi)
7221; SSE42-NEXT:    pextrb $3, %xmm7, %eax
7222; SSE42-NEXT:    andb $1, %al
7223; SSE42-NEXT:    movb %al, 14(%rdi)
7224; SSE42-NEXT:    pextrb $2, %xmm7, %eax
7225; SSE42-NEXT:    andb $1, %al
7226; SSE42-NEXT:    movb %al, 14(%rdi)
7227; SSE42-NEXT:    pextrb $1, %xmm7, %eax
7228; SSE42-NEXT:    andb $1, %al
7229; SSE42-NEXT:    movb %al, 14(%rdi)
7230; SSE42-NEXT:    pextrb $0, %xmm7, %eax
7231; SSE42-NEXT:    andb $1, %al
7232; SSE42-NEXT:    movb %al, 14(%rdi)
7233; SSE42-NEXT:    pextrb $15, %xmm6, %eax
7234; SSE42-NEXT:    andb $1, %al
7235; SSE42-NEXT:    movb %al, 12(%rdi)
7236; SSE42-NEXT:    pextrb $14, %xmm6, %eax
7237; SSE42-NEXT:    andb $1, %al
7238; SSE42-NEXT:    movb %al, 12(%rdi)
7239; SSE42-NEXT:    pextrb $13, %xmm6, %eax
7240; SSE42-NEXT:    andb $1, %al
7241; SSE42-NEXT:    movb %al, 12(%rdi)
7242; SSE42-NEXT:    pextrb $12, %xmm6, %eax
7243; SSE42-NEXT:    andb $1, %al
7244; SSE42-NEXT:    movb %al, 12(%rdi)
7245; SSE42-NEXT:    pextrb $11, %xmm6, %eax
7246; SSE42-NEXT:    andb $1, %al
7247; SSE42-NEXT:    movb %al, 12(%rdi)
7248; SSE42-NEXT:    pextrb $10, %xmm6, %eax
7249; SSE42-NEXT:    andb $1, %al
7250; SSE42-NEXT:    movb %al, 12(%rdi)
7251; SSE42-NEXT:    pextrb $9, %xmm6, %eax
7252; SSE42-NEXT:    andb $1, %al
7253; SSE42-NEXT:    movb %al, 12(%rdi)
7254; SSE42-NEXT:    pextrb $8, %xmm6, %eax
7255; SSE42-NEXT:    andb $1, %al
7256; SSE42-NEXT:    movb %al, 12(%rdi)
7257; SSE42-NEXT:    pextrb $7, %xmm6, %eax
7258; SSE42-NEXT:    andb $1, %al
7259; SSE42-NEXT:    movb %al, 12(%rdi)
7260; SSE42-NEXT:    pextrb $6, %xmm6, %eax
7261; SSE42-NEXT:    andb $1, %al
7262; SSE42-NEXT:    movb %al, 12(%rdi)
7263; SSE42-NEXT:    pextrb $5, %xmm6, %eax
7264; SSE42-NEXT:    andb $1, %al
7265; SSE42-NEXT:    movb %al, 12(%rdi)
7266; SSE42-NEXT:    pextrb $4, %xmm6, %eax
7267; SSE42-NEXT:    andb $1, %al
7268; SSE42-NEXT:    movb %al, 12(%rdi)
7269; SSE42-NEXT:    pextrb $3, %xmm6, %eax
7270; SSE42-NEXT:    andb $1, %al
7271; SSE42-NEXT:    movb %al, 12(%rdi)
7272; SSE42-NEXT:    pextrb $2, %xmm6, %eax
7273; SSE42-NEXT:    andb $1, %al
7274; SSE42-NEXT:    movb %al, 12(%rdi)
7275; SSE42-NEXT:    pextrb $1, %xmm6, %eax
7276; SSE42-NEXT:    andb $1, %al
7277; SSE42-NEXT:    movb %al, 12(%rdi)
7278; SSE42-NEXT:    pextrb $0, %xmm6, %eax
7279; SSE42-NEXT:    andb $1, %al
7280; SSE42-NEXT:    movb %al, 12(%rdi)
7281; SSE42-NEXT:    pextrb $15, %xmm5, %eax
7282; SSE42-NEXT:    andb $1, %al
7283; SSE42-NEXT:    movb %al, 10(%rdi)
7284; SSE42-NEXT:    pextrb $14, %xmm5, %eax
7285; SSE42-NEXT:    andb $1, %al
7286; SSE42-NEXT:    movb %al, 10(%rdi)
7287; SSE42-NEXT:    pextrb $13, %xmm5, %eax
7288; SSE42-NEXT:    andb $1, %al
7289; SSE42-NEXT:    movb %al, 10(%rdi)
7290; SSE42-NEXT:    pextrb $12, %xmm5, %eax
7291; SSE42-NEXT:    andb $1, %al
7292; SSE42-NEXT:    movb %al, 10(%rdi)
7293; SSE42-NEXT:    pextrb $11, %xmm5, %eax
7294; SSE42-NEXT:    andb $1, %al
7295; SSE42-NEXT:    movb %al, 10(%rdi)
7296; SSE42-NEXT:    pextrb $10, %xmm5, %eax
7297; SSE42-NEXT:    andb $1, %al
7298; SSE42-NEXT:    movb %al, 10(%rdi)
7299; SSE42-NEXT:    pextrb $9, %xmm5, %eax
7300; SSE42-NEXT:    andb $1, %al
7301; SSE42-NEXT:    movb %al, 10(%rdi)
7302; SSE42-NEXT:    pextrb $8, %xmm5, %eax
7303; SSE42-NEXT:    andb $1, %al
7304; SSE42-NEXT:    movb %al, 10(%rdi)
7305; SSE42-NEXT:    pextrb $7, %xmm5, %eax
7306; SSE42-NEXT:    andb $1, %al
7307; SSE42-NEXT:    movb %al, 10(%rdi)
7308; SSE42-NEXT:    pextrb $6, %xmm5, %eax
7309; SSE42-NEXT:    andb $1, %al
7310; SSE42-NEXT:    movb %al, 10(%rdi)
7311; SSE42-NEXT:    pextrb $5, %xmm5, %eax
7312; SSE42-NEXT:    andb $1, %al
7313; SSE42-NEXT:    movb %al, 10(%rdi)
7314; SSE42-NEXT:    pextrb $4, %xmm5, %eax
7315; SSE42-NEXT:    andb $1, %al
7316; SSE42-NEXT:    movb %al, 10(%rdi)
7317; SSE42-NEXT:    pextrb $3, %xmm5, %eax
7318; SSE42-NEXT:    andb $1, %al
7319; SSE42-NEXT:    movb %al, 10(%rdi)
7320; SSE42-NEXT:    pextrb $2, %xmm5, %eax
7321; SSE42-NEXT:    andb $1, %al
7322; SSE42-NEXT:    movb %al, 10(%rdi)
7323; SSE42-NEXT:    pextrb $1, %xmm5, %eax
7324; SSE42-NEXT:    andb $1, %al
7325; SSE42-NEXT:    movb %al, 10(%rdi)
7326; SSE42-NEXT:    pextrb $0, %xmm5, %eax
7327; SSE42-NEXT:    andb $1, %al
7328; SSE42-NEXT:    movb %al, 10(%rdi)
7329; SSE42-NEXT:    pextrb $15, %xmm4, %eax
7330; SSE42-NEXT:    andb $1, %al
7331; SSE42-NEXT:    movb %al, 8(%rdi)
7332; SSE42-NEXT:    pextrb $14, %xmm4, %eax
7333; SSE42-NEXT:    andb $1, %al
7334; SSE42-NEXT:    movb %al, 8(%rdi)
7335; SSE42-NEXT:    pextrb $13, %xmm4, %eax
7336; SSE42-NEXT:    andb $1, %al
7337; SSE42-NEXT:    movb %al, 8(%rdi)
7338; SSE42-NEXT:    pextrb $12, %xmm4, %eax
7339; SSE42-NEXT:    andb $1, %al
7340; SSE42-NEXT:    movb %al, 8(%rdi)
7341; SSE42-NEXT:    pextrb $11, %xmm4, %eax
7342; SSE42-NEXT:    andb $1, %al
7343; SSE42-NEXT:    movb %al, 8(%rdi)
7344; SSE42-NEXT:    pextrb $10, %xmm4, %eax
7345; SSE42-NEXT:    andb $1, %al
7346; SSE42-NEXT:    movb %al, 8(%rdi)
7347; SSE42-NEXT:    pextrb $9, %xmm4, %eax
7348; SSE42-NEXT:    andb $1, %al
7349; SSE42-NEXT:    movb %al, 8(%rdi)
7350; SSE42-NEXT:    pextrb $8, %xmm4, %eax
7351; SSE42-NEXT:    andb $1, %al
7352; SSE42-NEXT:    movb %al, 8(%rdi)
7353; SSE42-NEXT:    pextrb $7, %xmm4, %eax
7354; SSE42-NEXT:    andb $1, %al
7355; SSE42-NEXT:    movb %al, 8(%rdi)
7356; SSE42-NEXT:    pextrb $6, %xmm4, %eax
7357; SSE42-NEXT:    andb $1, %al
7358; SSE42-NEXT:    movb %al, 8(%rdi)
7359; SSE42-NEXT:    pextrb $5, %xmm4, %eax
7360; SSE42-NEXT:    andb $1, %al
7361; SSE42-NEXT:    movb %al, 8(%rdi)
7362; SSE42-NEXT:    pextrb $4, %xmm4, %eax
7363; SSE42-NEXT:    andb $1, %al
7364; SSE42-NEXT:    movb %al, 8(%rdi)
7365; SSE42-NEXT:    pextrb $3, %xmm4, %eax
7366; SSE42-NEXT:    andb $1, %al
7367; SSE42-NEXT:    movb %al, 8(%rdi)
7368; SSE42-NEXT:    pextrb $2, %xmm4, %eax
7369; SSE42-NEXT:    andb $1, %al
7370; SSE42-NEXT:    movb %al, 8(%rdi)
7371; SSE42-NEXT:    pextrb $1, %xmm4, %eax
7372; SSE42-NEXT:    andb $1, %al
7373; SSE42-NEXT:    movb %al, 8(%rdi)
7374; SSE42-NEXT:    pextrb $0, %xmm4, %eax
7375; SSE42-NEXT:    andb $1, %al
7376; SSE42-NEXT:    movb %al, 8(%rdi)
7377; SSE42-NEXT:    pextrb $15, %xmm3, %eax
7378; SSE42-NEXT:    andb $1, %al
7379; SSE42-NEXT:    movb %al, 6(%rdi)
7380; SSE42-NEXT:    pextrb $14, %xmm3, %eax
7381; SSE42-NEXT:    andb $1, %al
7382; SSE42-NEXT:    movb %al, 6(%rdi)
7383; SSE42-NEXT:    pextrb $13, %xmm3, %eax
7384; SSE42-NEXT:    andb $1, %al
7385; SSE42-NEXT:    movb %al, 6(%rdi)
7386; SSE42-NEXT:    pextrb $12, %xmm3, %eax
7387; SSE42-NEXT:    andb $1, %al
7388; SSE42-NEXT:    movb %al, 6(%rdi)
7389; SSE42-NEXT:    pextrb $11, %xmm3, %eax
7390; SSE42-NEXT:    andb $1, %al
7391; SSE42-NEXT:    movb %al, 6(%rdi)
7392; SSE42-NEXT:    pextrb $10, %xmm3, %eax
7393; SSE42-NEXT:    andb $1, %al
7394; SSE42-NEXT:    movb %al, 6(%rdi)
7395; SSE42-NEXT:    pextrb $9, %xmm3, %eax
7396; SSE42-NEXT:    andb $1, %al
7397; SSE42-NEXT:    movb %al, 6(%rdi)
7398; SSE42-NEXT:    pextrb $8, %xmm3, %eax
7399; SSE42-NEXT:    andb $1, %al
7400; SSE42-NEXT:    movb %al, 6(%rdi)
7401; SSE42-NEXT:    pextrb $7, %xmm3, %eax
7402; SSE42-NEXT:    andb $1, %al
7403; SSE42-NEXT:    movb %al, 6(%rdi)
7404; SSE42-NEXT:    pextrb $6, %xmm3, %eax
7405; SSE42-NEXT:    andb $1, %al
7406; SSE42-NEXT:    movb %al, 6(%rdi)
7407; SSE42-NEXT:    pextrb $5, %xmm3, %eax
7408; SSE42-NEXT:    andb $1, %al
7409; SSE42-NEXT:    movb %al, 6(%rdi)
7410; SSE42-NEXT:    pextrb $4, %xmm3, %eax
7411; SSE42-NEXT:    andb $1, %al
7412; SSE42-NEXT:    movb %al, 6(%rdi)
7413; SSE42-NEXT:    pextrb $3, %xmm3, %eax
7414; SSE42-NEXT:    andb $1, %al
7415; SSE42-NEXT:    movb %al, 6(%rdi)
7416; SSE42-NEXT:    pextrb $2, %xmm3, %eax
7417; SSE42-NEXT:    andb $1, %al
7418; SSE42-NEXT:    movb %al, 6(%rdi)
7419; SSE42-NEXT:    pextrb $1, %xmm3, %eax
7420; SSE42-NEXT:    andb $1, %al
7421; SSE42-NEXT:    movb %al, 6(%rdi)
7422; SSE42-NEXT:    pextrb $0, %xmm3, %eax
7423; SSE42-NEXT:    andb $1, %al
7424; SSE42-NEXT:    movb %al, 6(%rdi)
7425; SSE42-NEXT:    pextrb $15, %xmm2, %eax
7426; SSE42-NEXT:    andb $1, %al
7427; SSE42-NEXT:    movb %al, 4(%rdi)
7428; SSE42-NEXT:    pextrb $14, %xmm2, %eax
7429; SSE42-NEXT:    andb $1, %al
7430; SSE42-NEXT:    movb %al, 4(%rdi)
7431; SSE42-NEXT:    pextrb $13, %xmm2, %eax
7432; SSE42-NEXT:    andb $1, %al
7433; SSE42-NEXT:    movb %al, 4(%rdi)
7434; SSE42-NEXT:    pextrb $12, %xmm2, %eax
7435; SSE42-NEXT:    andb $1, %al
7436; SSE42-NEXT:    movb %al, 4(%rdi)
7437; SSE42-NEXT:    pextrb $11, %xmm2, %eax
7438; SSE42-NEXT:    andb $1, %al
7439; SSE42-NEXT:    movb %al, 4(%rdi)
7440; SSE42-NEXT:    pextrb $10, %xmm2, %eax
7441; SSE42-NEXT:    andb $1, %al
7442; SSE42-NEXT:    movb %al, 4(%rdi)
7443; SSE42-NEXT:    pextrb $9, %xmm2, %eax
7444; SSE42-NEXT:    andb $1, %al
7445; SSE42-NEXT:    movb %al, 4(%rdi)
7446; SSE42-NEXT:    pextrb $8, %xmm2, %eax
7447; SSE42-NEXT:    andb $1, %al
7448; SSE42-NEXT:    movb %al, 4(%rdi)
7449; SSE42-NEXT:    pextrb $7, %xmm2, %eax
7450; SSE42-NEXT:    andb $1, %al
7451; SSE42-NEXT:    movb %al, 4(%rdi)
7452; SSE42-NEXT:    pextrb $6, %xmm2, %eax
7453; SSE42-NEXT:    andb $1, %al
7454; SSE42-NEXT:    movb %al, 4(%rdi)
7455; SSE42-NEXT:    pextrb $5, %xmm2, %eax
7456; SSE42-NEXT:    andb $1, %al
7457; SSE42-NEXT:    movb %al, 4(%rdi)
7458; SSE42-NEXT:    pextrb $4, %xmm2, %eax
7459; SSE42-NEXT:    andb $1, %al
7460; SSE42-NEXT:    movb %al, 4(%rdi)
7461; SSE42-NEXT:    pextrb $3, %xmm2, %eax
7462; SSE42-NEXT:    andb $1, %al
7463; SSE42-NEXT:    movb %al, 4(%rdi)
7464; SSE42-NEXT:    pextrb $2, %xmm2, %eax
7465; SSE42-NEXT:    andb $1, %al
7466; SSE42-NEXT:    movb %al, 4(%rdi)
7467; SSE42-NEXT:    pextrb $1, %xmm2, %eax
7468; SSE42-NEXT:    andb $1, %al
7469; SSE42-NEXT:    movb %al, 4(%rdi)
7470; SSE42-NEXT:    pextrb $0, %xmm2, %eax
7471; SSE42-NEXT:    andb $1, %al
7472; SSE42-NEXT:    movb %al, 4(%rdi)
7473; SSE42-NEXT:    pextrb $15, %xmm1, %eax
7474; SSE42-NEXT:    andb $1, %al
7475; SSE42-NEXT:    movb %al, 2(%rdi)
7476; SSE42-NEXT:    pextrb $14, %xmm1, %eax
7477; SSE42-NEXT:    andb $1, %al
7478; SSE42-NEXT:    movb %al, 2(%rdi)
7479; SSE42-NEXT:    pextrb $13, %xmm1, %eax
7480; SSE42-NEXT:    andb $1, %al
7481; SSE42-NEXT:    movb %al, 2(%rdi)
7482; SSE42-NEXT:    pextrb $12, %xmm1, %eax
7483; SSE42-NEXT:    andb $1, %al
7484; SSE42-NEXT:    movb %al, 2(%rdi)
7485; SSE42-NEXT:    pextrb $11, %xmm1, %eax
7486; SSE42-NEXT:    andb $1, %al
7487; SSE42-NEXT:    movb %al, 2(%rdi)
7488; SSE42-NEXT:    pextrb $10, %xmm1, %eax
7489; SSE42-NEXT:    andb $1, %al
7490; SSE42-NEXT:    movb %al, 2(%rdi)
7491; SSE42-NEXT:    pextrb $9, %xmm1, %eax
7492; SSE42-NEXT:    andb $1, %al
7493; SSE42-NEXT:    movb %al, 2(%rdi)
7494; SSE42-NEXT:    pextrb $8, %xmm1, %eax
7495; SSE42-NEXT:    andb $1, %al
7496; SSE42-NEXT:    movb %al, 2(%rdi)
7497; SSE42-NEXT:    pextrb $7, %xmm1, %eax
7498; SSE42-NEXT:    andb $1, %al
7499; SSE42-NEXT:    movb %al, 2(%rdi)
7500; SSE42-NEXT:    pextrb $6, %xmm1, %eax
7501; SSE42-NEXT:    andb $1, %al
7502; SSE42-NEXT:    movb %al, 2(%rdi)
7503; SSE42-NEXT:    pextrb $5, %xmm1, %eax
7504; SSE42-NEXT:    andb $1, %al
7505; SSE42-NEXT:    movb %al, 2(%rdi)
7506; SSE42-NEXT:    pextrb $4, %xmm1, %eax
7507; SSE42-NEXT:    andb $1, %al
7508; SSE42-NEXT:    movb %al, 2(%rdi)
7509; SSE42-NEXT:    pextrb $3, %xmm1, %eax
7510; SSE42-NEXT:    andb $1, %al
7511; SSE42-NEXT:    movb %al, 2(%rdi)
7512; SSE42-NEXT:    pextrb $2, %xmm1, %eax
7513; SSE42-NEXT:    andb $1, %al
7514; SSE42-NEXT:    movb %al, 2(%rdi)
7515; SSE42-NEXT:    pextrb $1, %xmm1, %eax
7516; SSE42-NEXT:    andb $1, %al
7517; SSE42-NEXT:    movb %al, 2(%rdi)
7518; SSE42-NEXT:    pextrb $0, %xmm1, %eax
7519; SSE42-NEXT:    andb $1, %al
7520; SSE42-NEXT:    movb %al, 2(%rdi)
7521; SSE42-NEXT:    pextrb $15, %xmm0, %eax
7522; SSE42-NEXT:    andb $1, %al
7523; SSE42-NEXT:    movb %al, (%rdi)
7524; SSE42-NEXT:    pextrb $14, %xmm0, %eax
7525; SSE42-NEXT:    andb $1, %al
7526; SSE42-NEXT:    movb %al, (%rdi)
7527; SSE42-NEXT:    pextrb $13, %xmm0, %eax
7528; SSE42-NEXT:    andb $1, %al
7529; SSE42-NEXT:    movb %al, (%rdi)
7530; SSE42-NEXT:    pextrb $12, %xmm0, %eax
7531; SSE42-NEXT:    andb $1, %al
7532; SSE42-NEXT:    movb %al, (%rdi)
7533; SSE42-NEXT:    pextrb $11, %xmm0, %eax
7534; SSE42-NEXT:    andb $1, %al
7535; SSE42-NEXT:    movb %al, (%rdi)
7536; SSE42-NEXT:    pextrb $10, %xmm0, %eax
7537; SSE42-NEXT:    andb $1, %al
7538; SSE42-NEXT:    movb %al, (%rdi)
7539; SSE42-NEXT:    pextrb $9, %xmm0, %eax
7540; SSE42-NEXT:    andb $1, %al
7541; SSE42-NEXT:    movb %al, (%rdi)
7542; SSE42-NEXT:    pextrb $8, %xmm0, %eax
7543; SSE42-NEXT:    andb $1, %al
7544; SSE42-NEXT:    movb %al, (%rdi)
7545; SSE42-NEXT:    pextrb $7, %xmm0, %eax
7546; SSE42-NEXT:    andb $1, %al
7547; SSE42-NEXT:    movb %al, (%rdi)
7548; SSE42-NEXT:    pextrb $6, %xmm0, %eax
7549; SSE42-NEXT:    andb $1, %al
7550; SSE42-NEXT:    movb %al, (%rdi)
7551; SSE42-NEXT:    pextrb $5, %xmm0, %eax
7552; SSE42-NEXT:    andb $1, %al
7553; SSE42-NEXT:    movb %al, (%rdi)
7554; SSE42-NEXT:    pextrb $4, %xmm0, %eax
7555; SSE42-NEXT:    andb $1, %al
7556; SSE42-NEXT:    movb %al, (%rdi)
7557; SSE42-NEXT:    pextrb $3, %xmm0, %eax
7558; SSE42-NEXT:    andb $1, %al
7559; SSE42-NEXT:    movb %al, (%rdi)
7560; SSE42-NEXT:    pextrb $2, %xmm0, %eax
7561; SSE42-NEXT:    andb $1, %al
7562; SSE42-NEXT:    movb %al, (%rdi)
7563; SSE42-NEXT:    pextrb $1, %xmm0, %eax
7564; SSE42-NEXT:    andb $1, %al
7565; SSE42-NEXT:    movb %al, (%rdi)
7566; SSE42-NEXT:    pextrb $0, %xmm0, %eax
7567; SSE42-NEXT:    andb $1, %al
7568; SSE42-NEXT:    movb %al, (%rdi)
7569; SSE42-NEXT:    movq %rdi, %rax
7570; SSE42-NEXT:    retq
7571;
7572; AVX1-LABEL: test_cmp_v128i8:
7573; AVX1:       # BB#0:
7574; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm8
7575; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm4
7576; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7577; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm0
7578; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm4
7579; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm5
7580; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
7581; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm1
7582; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm5
7583; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm6
7584; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
7585; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm2
7586; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm6
7587; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm7
7588; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
7589; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm3
7590; AVX1-NEXT:    vpextrb $15, %xmm3, %eax
7591; AVX1-NEXT:    andb $1, %al
7592; AVX1-NEXT:    movb %al, 12(%rdi)
7593; AVX1-NEXT:    vpextrb $14, %xmm3, %eax
7594; AVX1-NEXT:    andb $1, %al
7595; AVX1-NEXT:    movb %al, 12(%rdi)
7596; AVX1-NEXT:    vpextrb $13, %xmm3, %eax
7597; AVX1-NEXT:    andb $1, %al
7598; AVX1-NEXT:    movb %al, 12(%rdi)
7599; AVX1-NEXT:    vpextrb $12, %xmm3, %eax
7600; AVX1-NEXT:    andb $1, %al
7601; AVX1-NEXT:    movb %al, 12(%rdi)
7602; AVX1-NEXT:    vpextrb $11, %xmm3, %eax
7603; AVX1-NEXT:    andb $1, %al
7604; AVX1-NEXT:    movb %al, 12(%rdi)
7605; AVX1-NEXT:    vpextrb $10, %xmm3, %eax
7606; AVX1-NEXT:    andb $1, %al
7607; AVX1-NEXT:    movb %al, 12(%rdi)
7608; AVX1-NEXT:    vpextrb $9, %xmm3, %eax
7609; AVX1-NEXT:    andb $1, %al
7610; AVX1-NEXT:    movb %al, 12(%rdi)
7611; AVX1-NEXT:    vpextrb $8, %xmm3, %eax
7612; AVX1-NEXT:    andb $1, %al
7613; AVX1-NEXT:    movb %al, 12(%rdi)
7614; AVX1-NEXT:    vpextrb $7, %xmm3, %eax
7615; AVX1-NEXT:    andb $1, %al
7616; AVX1-NEXT:    movb %al, 12(%rdi)
7617; AVX1-NEXT:    vpextrb $6, %xmm3, %eax
7618; AVX1-NEXT:    andb $1, %al
7619; AVX1-NEXT:    movb %al, 12(%rdi)
7620; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
7621; AVX1-NEXT:    andb $1, %al
7622; AVX1-NEXT:    movb %al, 12(%rdi)
7623; AVX1-NEXT:    vpextrb $4, %xmm3, %eax
7624; AVX1-NEXT:    andb $1, %al
7625; AVX1-NEXT:    movb %al, 12(%rdi)
7626; AVX1-NEXT:    vpextrb $3, %xmm3, %eax
7627; AVX1-NEXT:    andb $1, %al
7628; AVX1-NEXT:    movb %al, 12(%rdi)
7629; AVX1-NEXT:    vpextrb $2, %xmm3, %eax
7630; AVX1-NEXT:    andb $1, %al
7631; AVX1-NEXT:    movb %al, 12(%rdi)
7632; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
7633; AVX1-NEXT:    andb $1, %al
7634; AVX1-NEXT:    movb %al, 12(%rdi)
7635; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
7636; AVX1-NEXT:    andb $1, %al
7637; AVX1-NEXT:    movb %al, 12(%rdi)
7638; AVX1-NEXT:    vpextrb $15, %xmm6, %eax
7639; AVX1-NEXT:    andb $1, %al
7640; AVX1-NEXT:    movb %al, 12(%rdi)
7641; AVX1-NEXT:    vpextrb $14, %xmm6, %eax
7642; AVX1-NEXT:    andb $1, %al
7643; AVX1-NEXT:    movb %al, 12(%rdi)
7644; AVX1-NEXT:    vpextrb $13, %xmm6, %eax
7645; AVX1-NEXT:    andb $1, %al
7646; AVX1-NEXT:    movb %al, 12(%rdi)
7647; AVX1-NEXT:    vpextrb $12, %xmm6, %eax
7648; AVX1-NEXT:    andb $1, %al
7649; AVX1-NEXT:    movb %al, 12(%rdi)
7650; AVX1-NEXT:    vpextrb $11, %xmm6, %eax
7651; AVX1-NEXT:    andb $1, %al
7652; AVX1-NEXT:    movb %al, 12(%rdi)
7653; AVX1-NEXT:    vpextrb $10, %xmm6, %eax
7654; AVX1-NEXT:    andb $1, %al
7655; AVX1-NEXT:    movb %al, 12(%rdi)
7656; AVX1-NEXT:    vpextrb $9, %xmm6, %eax
7657; AVX1-NEXT:    andb $1, %al
7658; AVX1-NEXT:    movb %al, 12(%rdi)
7659; AVX1-NEXT:    vpextrb $8, %xmm6, %eax
7660; AVX1-NEXT:    andb $1, %al
7661; AVX1-NEXT:    movb %al, 12(%rdi)
7662; AVX1-NEXT:    vpextrb $7, %xmm6, %eax
7663; AVX1-NEXT:    andb $1, %al
7664; AVX1-NEXT:    movb %al, 12(%rdi)
7665; AVX1-NEXT:    vpextrb $6, %xmm6, %eax
7666; AVX1-NEXT:    andb $1, %al
7667; AVX1-NEXT:    movb %al, 12(%rdi)
7668; AVX1-NEXT:    vpextrb $5, %xmm6, %eax
7669; AVX1-NEXT:    andb $1, %al
7670; AVX1-NEXT:    movb %al, 12(%rdi)
7671; AVX1-NEXT:    vpextrb $4, %xmm6, %eax
7672; AVX1-NEXT:    andb $1, %al
7673; AVX1-NEXT:    movb %al, 12(%rdi)
7674; AVX1-NEXT:    vpextrb $3, %xmm6, %eax
7675; AVX1-NEXT:    andb $1, %al
7676; AVX1-NEXT:    movb %al, 12(%rdi)
7677; AVX1-NEXT:    vpextrb $2, %xmm6, %eax
7678; AVX1-NEXT:    andb $1, %al
7679; AVX1-NEXT:    movb %al, 12(%rdi)
7680; AVX1-NEXT:    vpextrb $1, %xmm6, %eax
7681; AVX1-NEXT:    andb $1, %al
7682; AVX1-NEXT:    movb %al, 12(%rdi)
7683; AVX1-NEXT:    vpextrb $0, %xmm6, %eax
7684; AVX1-NEXT:    andb $1, %al
7685; AVX1-NEXT:    movb %al, 12(%rdi)
7686; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
7687; AVX1-NEXT:    andb $1, %al
7688; AVX1-NEXT:    movb %al, 8(%rdi)
7689; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
7690; AVX1-NEXT:    andb $1, %al
7691; AVX1-NEXT:    movb %al, 8(%rdi)
7692; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
7693; AVX1-NEXT:    andb $1, %al
7694; AVX1-NEXT:    movb %al, 8(%rdi)
7695; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
7696; AVX1-NEXT:    andb $1, %al
7697; AVX1-NEXT:    movb %al, 8(%rdi)
7698; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
7699; AVX1-NEXT:    andb $1, %al
7700; AVX1-NEXT:    movb %al, 8(%rdi)
7701; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
7702; AVX1-NEXT:    andb $1, %al
7703; AVX1-NEXT:    movb %al, 8(%rdi)
7704; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
7705; AVX1-NEXT:    andb $1, %al
7706; AVX1-NEXT:    movb %al, 8(%rdi)
7707; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
7708; AVX1-NEXT:    andb $1, %al
7709; AVX1-NEXT:    movb %al, 8(%rdi)
7710; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
7711; AVX1-NEXT:    andb $1, %al
7712; AVX1-NEXT:    movb %al, 8(%rdi)
7713; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
7714; AVX1-NEXT:    andb $1, %al
7715; AVX1-NEXT:    movb %al, 8(%rdi)
7716; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
7717; AVX1-NEXT:    andb $1, %al
7718; AVX1-NEXT:    movb %al, 8(%rdi)
7719; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
7720; AVX1-NEXT:    andb $1, %al
7721; AVX1-NEXT:    movb %al, 8(%rdi)
7722; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
7723; AVX1-NEXT:    andb $1, %al
7724; AVX1-NEXT:    movb %al, 8(%rdi)
7725; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
7726; AVX1-NEXT:    andb $1, %al
7727; AVX1-NEXT:    movb %al, 8(%rdi)
7728; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
7729; AVX1-NEXT:    andb $1, %al
7730; AVX1-NEXT:    movb %al, 8(%rdi)
7731; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
7732; AVX1-NEXT:    andb $1, %al
7733; AVX1-NEXT:    movb %al, 8(%rdi)
7734; AVX1-NEXT:    vpextrb $15, %xmm5, %eax
7735; AVX1-NEXT:    andb $1, %al
7736; AVX1-NEXT:    movb %al, 8(%rdi)
7737; AVX1-NEXT:    vpextrb $14, %xmm5, %eax
7738; AVX1-NEXT:    andb $1, %al
7739; AVX1-NEXT:    movb %al, 8(%rdi)
7740; AVX1-NEXT:    vpextrb $13, %xmm5, %eax
7741; AVX1-NEXT:    andb $1, %al
7742; AVX1-NEXT:    movb %al, 8(%rdi)
7743; AVX1-NEXT:    vpextrb $12, %xmm5, %eax
7744; AVX1-NEXT:    andb $1, %al
7745; AVX1-NEXT:    movb %al, 8(%rdi)
7746; AVX1-NEXT:    vpextrb $11, %xmm5, %eax
7747; AVX1-NEXT:    andb $1, %al
7748; AVX1-NEXT:    movb %al, 8(%rdi)
7749; AVX1-NEXT:    vpextrb $10, %xmm5, %eax
7750; AVX1-NEXT:    andb $1, %al
7751; AVX1-NEXT:    movb %al, 8(%rdi)
7752; AVX1-NEXT:    vpextrb $9, %xmm5, %eax
7753; AVX1-NEXT:    andb $1, %al
7754; AVX1-NEXT:    movb %al, 8(%rdi)
7755; AVX1-NEXT:    vpextrb $8, %xmm5, %eax
7756; AVX1-NEXT:    andb $1, %al
7757; AVX1-NEXT:    movb %al, 8(%rdi)
7758; AVX1-NEXT:    vpextrb $7, %xmm5, %eax
7759; AVX1-NEXT:    andb $1, %al
7760; AVX1-NEXT:    movb %al, 8(%rdi)
7761; AVX1-NEXT:    vpextrb $6, %xmm5, %eax
7762; AVX1-NEXT:    andb $1, %al
7763; AVX1-NEXT:    movb %al, 8(%rdi)
7764; AVX1-NEXT:    vpextrb $5, %xmm5, %eax
7765; AVX1-NEXT:    andb $1, %al
7766; AVX1-NEXT:    movb %al, 8(%rdi)
7767; AVX1-NEXT:    vpextrb $4, %xmm5, %eax
7768; AVX1-NEXT:    andb $1, %al
7769; AVX1-NEXT:    movb %al, 8(%rdi)
7770; AVX1-NEXT:    vpextrb $3, %xmm5, %eax
7771; AVX1-NEXT:    andb $1, %al
7772; AVX1-NEXT:    movb %al, 8(%rdi)
7773; AVX1-NEXT:    vpextrb $2, %xmm5, %eax
7774; AVX1-NEXT:    andb $1, %al
7775; AVX1-NEXT:    movb %al, 8(%rdi)
7776; AVX1-NEXT:    vpextrb $1, %xmm5, %eax
7777; AVX1-NEXT:    andb $1, %al
7778; AVX1-NEXT:    movb %al, 8(%rdi)
7779; AVX1-NEXT:    vpextrb $0, %xmm5, %eax
7780; AVX1-NEXT:    andb $1, %al
7781; AVX1-NEXT:    movb %al, 8(%rdi)
7782; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
7783; AVX1-NEXT:    andb $1, %al
7784; AVX1-NEXT:    movb %al, 4(%rdi)
7785; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
7786; AVX1-NEXT:    andb $1, %al
7787; AVX1-NEXT:    movb %al, 4(%rdi)
7788; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
7789; AVX1-NEXT:    andb $1, %al
7790; AVX1-NEXT:    movb %al, 4(%rdi)
7791; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
7792; AVX1-NEXT:    andb $1, %al
7793; AVX1-NEXT:    movb %al, 4(%rdi)
7794; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
7795; AVX1-NEXT:    andb $1, %al
7796; AVX1-NEXT:    movb %al, 4(%rdi)
7797; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
7798; AVX1-NEXT:    andb $1, %al
7799; AVX1-NEXT:    movb %al, 4(%rdi)
7800; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
7801; AVX1-NEXT:    andb $1, %al
7802; AVX1-NEXT:    movb %al, 4(%rdi)
7803; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
7804; AVX1-NEXT:    andb $1, %al
7805; AVX1-NEXT:    movb %al, 4(%rdi)
7806; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
7807; AVX1-NEXT:    andb $1, %al
7808; AVX1-NEXT:    movb %al, 4(%rdi)
7809; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
7810; AVX1-NEXT:    andb $1, %al
7811; AVX1-NEXT:    movb %al, 4(%rdi)
7812; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
7813; AVX1-NEXT:    andb $1, %al
7814; AVX1-NEXT:    movb %al, 4(%rdi)
7815; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
7816; AVX1-NEXT:    andb $1, %al
7817; AVX1-NEXT:    movb %al, 4(%rdi)
7818; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
7819; AVX1-NEXT:    andb $1, %al
7820; AVX1-NEXT:    movb %al, 4(%rdi)
7821; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
7822; AVX1-NEXT:    andb $1, %al
7823; AVX1-NEXT:    movb %al, 4(%rdi)
7824; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
7825; AVX1-NEXT:    andb $1, %al
7826; AVX1-NEXT:    movb %al, 4(%rdi)
7827; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
7828; AVX1-NEXT:    andb $1, %al
7829; AVX1-NEXT:    movb %al, 4(%rdi)
7830; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
7831; AVX1-NEXT:    andb $1, %al
7832; AVX1-NEXT:    movb %al, 4(%rdi)
7833; AVX1-NEXT:    vpextrb $14, %xmm4, %eax
7834; AVX1-NEXT:    andb $1, %al
7835; AVX1-NEXT:    movb %al, 4(%rdi)
7836; AVX1-NEXT:    vpextrb $13, %xmm4, %eax
7837; AVX1-NEXT:    andb $1, %al
7838; AVX1-NEXT:    movb %al, 4(%rdi)
7839; AVX1-NEXT:    vpextrb $12, %xmm4, %eax
7840; AVX1-NEXT:    andb $1, %al
7841; AVX1-NEXT:    movb %al, 4(%rdi)
7842; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
7843; AVX1-NEXT:    andb $1, %al
7844; AVX1-NEXT:    movb %al, 4(%rdi)
7845; AVX1-NEXT:    vpextrb $10, %xmm4, %eax
7846; AVX1-NEXT:    andb $1, %al
7847; AVX1-NEXT:    movb %al, 4(%rdi)
7848; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
7849; AVX1-NEXT:    andb $1, %al
7850; AVX1-NEXT:    movb %al, 4(%rdi)
7851; AVX1-NEXT:    vpextrb $8, %xmm4, %eax
7852; AVX1-NEXT:    andb $1, %al
7853; AVX1-NEXT:    movb %al, 4(%rdi)
7854; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
7855; AVX1-NEXT:    andb $1, %al
7856; AVX1-NEXT:    movb %al, 4(%rdi)
7857; AVX1-NEXT:    vpextrb $6, %xmm4, %eax
7858; AVX1-NEXT:    andb $1, %al
7859; AVX1-NEXT:    movb %al, 4(%rdi)
7860; AVX1-NEXT:    vpextrb $5, %xmm4, %eax
7861; AVX1-NEXT:    andb $1, %al
7862; AVX1-NEXT:    movb %al, 4(%rdi)
7863; AVX1-NEXT:    vpextrb $4, %xmm4, %eax
7864; AVX1-NEXT:    andb $1, %al
7865; AVX1-NEXT:    movb %al, 4(%rdi)
7866; AVX1-NEXT:    vpextrb $3, %xmm4, %eax
7867; AVX1-NEXT:    andb $1, %al
7868; AVX1-NEXT:    movb %al, 4(%rdi)
7869; AVX1-NEXT:    vpextrb $2, %xmm4, %eax
7870; AVX1-NEXT:    andb $1, %al
7871; AVX1-NEXT:    movb %al, 4(%rdi)
7872; AVX1-NEXT:    vpextrb $1, %xmm4, %eax
7873; AVX1-NEXT:    andb $1, %al
7874; AVX1-NEXT:    movb %al, 4(%rdi)
7875; AVX1-NEXT:    vpextrb $0, %xmm4, %eax
7876; AVX1-NEXT:    andb $1, %al
7877; AVX1-NEXT:    movb %al, 4(%rdi)
7878; AVX1-NEXT:    vpextrb $15, %xmm0, %eax
7879; AVX1-NEXT:    andb $1, %al
7880; AVX1-NEXT:    movb %al, (%rdi)
7881; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
7882; AVX1-NEXT:    andb $1, %al
7883; AVX1-NEXT:    movb %al, (%rdi)
7884; AVX1-NEXT:    vpextrb $13, %xmm0, %eax
7885; AVX1-NEXT:    andb $1, %al
7886; AVX1-NEXT:    movb %al, (%rdi)
7887; AVX1-NEXT:    vpextrb $12, %xmm0, %eax
7888; AVX1-NEXT:    andb $1, %al
7889; AVX1-NEXT:    movb %al, (%rdi)
7890; AVX1-NEXT:    vpextrb $11, %xmm0, %eax
7891; AVX1-NEXT:    andb $1, %al
7892; AVX1-NEXT:    movb %al, (%rdi)
7893; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
7894; AVX1-NEXT:    andb $1, %al
7895; AVX1-NEXT:    movb %al, (%rdi)
7896; AVX1-NEXT:    vpextrb $9, %xmm0, %eax
7897; AVX1-NEXT:    andb $1, %al
7898; AVX1-NEXT:    movb %al, (%rdi)
7899; AVX1-NEXT:    vpextrb $8, %xmm0, %eax
7900; AVX1-NEXT:    andb $1, %al
7901; AVX1-NEXT:    movb %al, (%rdi)
7902; AVX1-NEXT:    vpextrb $7, %xmm0, %eax
7903; AVX1-NEXT:    andb $1, %al
7904; AVX1-NEXT:    movb %al, (%rdi)
7905; AVX1-NEXT:    vpextrb $6, %xmm0, %eax
7906; AVX1-NEXT:    andb $1, %al
7907; AVX1-NEXT:    movb %al, (%rdi)
7908; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
7909; AVX1-NEXT:    andb $1, %al
7910; AVX1-NEXT:    movb %al, (%rdi)
7911; AVX1-NEXT:    vpextrb $4, %xmm0, %eax
7912; AVX1-NEXT:    andb $1, %al
7913; AVX1-NEXT:    movb %al, (%rdi)
7914; AVX1-NEXT:    vpextrb $3, %xmm0, %eax
7915; AVX1-NEXT:    andb $1, %al
7916; AVX1-NEXT:    movb %al, (%rdi)
7917; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
7918; AVX1-NEXT:    andb $1, %al
7919; AVX1-NEXT:    movb %al, (%rdi)
7920; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
7921; AVX1-NEXT:    andb $1, %al
7922; AVX1-NEXT:    movb %al, (%rdi)
7923; AVX1-NEXT:    vpextrb $0, %xmm0, %eax
7924; AVX1-NEXT:    andb $1, %al
7925; AVX1-NEXT:    movb %al, (%rdi)
7926; AVX1-NEXT:    vpextrb $15, %xmm8, %eax
7927; AVX1-NEXT:    andb $1, %al
7928; AVX1-NEXT:    movb %al, (%rdi)
7929; AVX1-NEXT:    vpextrb $14, %xmm8, %eax
7930; AVX1-NEXT:    andb $1, %al
7931; AVX1-NEXT:    movb %al, (%rdi)
7932; AVX1-NEXT:    vpextrb $13, %xmm8, %eax
7933; AVX1-NEXT:    andb $1, %al
7934; AVX1-NEXT:    movb %al, (%rdi)
7935; AVX1-NEXT:    vpextrb $12, %xmm8, %eax
7936; AVX1-NEXT:    andb $1, %al
7937; AVX1-NEXT:    movb %al, (%rdi)
7938; AVX1-NEXT:    vpextrb $11, %xmm8, %eax
7939; AVX1-NEXT:    andb $1, %al
7940; AVX1-NEXT:    movb %al, (%rdi)
7941; AVX1-NEXT:    vpextrb $10, %xmm8, %eax
7942; AVX1-NEXT:    andb $1, %al
7943; AVX1-NEXT:    movb %al, (%rdi)
7944; AVX1-NEXT:    vpextrb $9, %xmm8, %eax
7945; AVX1-NEXT:    andb $1, %al
7946; AVX1-NEXT:    movb %al, (%rdi)
7947; AVX1-NEXT:    vpextrb $8, %xmm8, %eax
7948; AVX1-NEXT:    andb $1, %al
7949; AVX1-NEXT:    movb %al, (%rdi)
7950; AVX1-NEXT:    vpextrb $7, %xmm8, %eax
7951; AVX1-NEXT:    andb $1, %al
7952; AVX1-NEXT:    movb %al, (%rdi)
7953; AVX1-NEXT:    vpextrb $6, %xmm8, %eax
7954; AVX1-NEXT:    andb $1, %al
7955; AVX1-NEXT:    movb %al, (%rdi)
7956; AVX1-NEXT:    vpextrb $5, %xmm8, %eax
7957; AVX1-NEXT:    andb $1, %al
7958; AVX1-NEXT:    movb %al, (%rdi)
7959; AVX1-NEXT:    vpextrb $4, %xmm8, %eax
7960; AVX1-NEXT:    andb $1, %al
7961; AVX1-NEXT:    movb %al, (%rdi)
7962; AVX1-NEXT:    vpextrb $3, %xmm8, %eax
7963; AVX1-NEXT:    andb $1, %al
7964; AVX1-NEXT:    movb %al, (%rdi)
7965; AVX1-NEXT:    vpextrb $2, %xmm8, %eax
7966; AVX1-NEXT:    andb $1, %al
7967; AVX1-NEXT:    movb %al, (%rdi)
7968; AVX1-NEXT:    vpextrb $1, %xmm8, %eax
7969; AVX1-NEXT:    andb $1, %al
7970; AVX1-NEXT:    movb %al, (%rdi)
7971; AVX1-NEXT:    vpextrb $0, %xmm8, %eax
7972; AVX1-NEXT:    andb $1, %al
7973; AVX1-NEXT:    movb %al, (%rdi)
7974; AVX1-NEXT:    movq %rdi, %rax
7975; AVX1-NEXT:    vzeroupper
7976; AVX1-NEXT:    retq
7977;
7978; AVX2-LABEL: test_cmp_v128i8:
7979; AVX2:       # BB#0:
7980; AVX2-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
7981; AVX2-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
7982; AVX2-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
7983; AVX2-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
7984; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4
7985; AVX2-NEXT:    vpextrb $15, %xmm4, %eax
7986; AVX2-NEXT:    andb $1, %al
7987; AVX2-NEXT:    movb %al, 12(%rdi)
7988; AVX2-NEXT:    vpextrb $14, %xmm4, %eax
7989; AVX2-NEXT:    andb $1, %al
7990; AVX2-NEXT:    movb %al, 12(%rdi)
7991; AVX2-NEXT:    vpextrb $13, %xmm4, %eax
7992; AVX2-NEXT:    andb $1, %al
7993; AVX2-NEXT:    movb %al, 12(%rdi)
7994; AVX2-NEXT:    vpextrb $12, %xmm4, %eax
7995; AVX2-NEXT:    andb $1, %al
7996; AVX2-NEXT:    movb %al, 12(%rdi)
7997; AVX2-NEXT:    vpextrb $11, %xmm4, %eax
7998; AVX2-NEXT:    andb $1, %al
7999; AVX2-NEXT:    movb %al, 12(%rdi)
8000; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
8001; AVX2-NEXT:    andb $1, %al
8002; AVX2-NEXT:    movb %al, 12(%rdi)
8003; AVX2-NEXT:    vpextrb $9, %xmm4, %eax
8004; AVX2-NEXT:    andb $1, %al
8005; AVX2-NEXT:    movb %al, 12(%rdi)
8006; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
8007; AVX2-NEXT:    andb $1, %al
8008; AVX2-NEXT:    movb %al, 12(%rdi)
8009; AVX2-NEXT:    vpextrb $7, %xmm4, %eax
8010; AVX2-NEXT:    andb $1, %al
8011; AVX2-NEXT:    movb %al, 12(%rdi)
8012; AVX2-NEXT:    vpextrb $6, %xmm4, %eax
8013; AVX2-NEXT:    andb $1, %al
8014; AVX2-NEXT:    movb %al, 12(%rdi)
8015; AVX2-NEXT:    vpextrb $5, %xmm4, %eax
8016; AVX2-NEXT:    andb $1, %al
8017; AVX2-NEXT:    movb %al, 12(%rdi)
8018; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
8019; AVX2-NEXT:    andb $1, %al
8020; AVX2-NEXT:    movb %al, 12(%rdi)
8021; AVX2-NEXT:    vpextrb $3, %xmm4, %eax
8022; AVX2-NEXT:    andb $1, %al
8023; AVX2-NEXT:    movb %al, 12(%rdi)
8024; AVX2-NEXT:    vpextrb $2, %xmm4, %eax
8025; AVX2-NEXT:    andb $1, %al
8026; AVX2-NEXT:    movb %al, 12(%rdi)
8027; AVX2-NEXT:    vpextrb $1, %xmm4, %eax
8028; AVX2-NEXT:    andb $1, %al
8029; AVX2-NEXT:    movb %al, 12(%rdi)
8030; AVX2-NEXT:    vpextrb $0, %xmm4, %eax
8031; AVX2-NEXT:    andb $1, %al
8032; AVX2-NEXT:    movb %al, 12(%rdi)
8033; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
8034; AVX2-NEXT:    andb $1, %al
8035; AVX2-NEXT:    movb %al, 12(%rdi)
8036; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
8037; AVX2-NEXT:    andb $1, %al
8038; AVX2-NEXT:    movb %al, 12(%rdi)
8039; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
8040; AVX2-NEXT:    andb $1, %al
8041; AVX2-NEXT:    movb %al, 12(%rdi)
8042; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
8043; AVX2-NEXT:    andb $1, %al
8044; AVX2-NEXT:    movb %al, 12(%rdi)
8045; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
8046; AVX2-NEXT:    andb $1, %al
8047; AVX2-NEXT:    movb %al, 12(%rdi)
8048; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
8049; AVX2-NEXT:    andb $1, %al
8050; AVX2-NEXT:    movb %al, 12(%rdi)
8051; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
8052; AVX2-NEXT:    andb $1, %al
8053; AVX2-NEXT:    movb %al, 12(%rdi)
8054; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
8055; AVX2-NEXT:    andb $1, %al
8056; AVX2-NEXT:    movb %al, 12(%rdi)
8057; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
8058; AVX2-NEXT:    andb $1, %al
8059; AVX2-NEXT:    movb %al, 12(%rdi)
8060; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
8061; AVX2-NEXT:    andb $1, %al
8062; AVX2-NEXT:    movb %al, 12(%rdi)
8063; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
8064; AVX2-NEXT:    andb $1, %al
8065; AVX2-NEXT:    movb %al, 12(%rdi)
8066; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
8067; AVX2-NEXT:    andb $1, %al
8068; AVX2-NEXT:    movb %al, 12(%rdi)
8069; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
8070; AVX2-NEXT:    andb $1, %al
8071; AVX2-NEXT:    movb %al, 12(%rdi)
8072; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
8073; AVX2-NEXT:    andb $1, %al
8074; AVX2-NEXT:    movb %al, 12(%rdi)
8075; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
8076; AVX2-NEXT:    andb $1, %al
8077; AVX2-NEXT:    movb %al, 12(%rdi)
8078; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
8079; AVX2-NEXT:    andb $1, %al
8080; AVX2-NEXT:    movb %al, 12(%rdi)
8081; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3
8082; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
8083; AVX2-NEXT:    andb $1, %al
8084; AVX2-NEXT:    movb %al, 8(%rdi)
8085; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
8086; AVX2-NEXT:    andb $1, %al
8087; AVX2-NEXT:    movb %al, 8(%rdi)
8088; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
8089; AVX2-NEXT:    andb $1, %al
8090; AVX2-NEXT:    movb %al, 8(%rdi)
8091; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
8092; AVX2-NEXT:    andb $1, %al
8093; AVX2-NEXT:    movb %al, 8(%rdi)
8094; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
8095; AVX2-NEXT:    andb $1, %al
8096; AVX2-NEXT:    movb %al, 8(%rdi)
8097; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
8098; AVX2-NEXT:    andb $1, %al
8099; AVX2-NEXT:    movb %al, 8(%rdi)
8100; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
8101; AVX2-NEXT:    andb $1, %al
8102; AVX2-NEXT:    movb %al, 8(%rdi)
8103; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
8104; AVX2-NEXT:    andb $1, %al
8105; AVX2-NEXT:    movb %al, 8(%rdi)
8106; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
8107; AVX2-NEXT:    andb $1, %al
8108; AVX2-NEXT:    movb %al, 8(%rdi)
8109; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
8110; AVX2-NEXT:    andb $1, %al
8111; AVX2-NEXT:    movb %al, 8(%rdi)
8112; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
8113; AVX2-NEXT:    andb $1, %al
8114; AVX2-NEXT:    movb %al, 8(%rdi)
8115; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
8116; AVX2-NEXT:    andb $1, %al
8117; AVX2-NEXT:    movb %al, 8(%rdi)
8118; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
8119; AVX2-NEXT:    andb $1, %al
8120; AVX2-NEXT:    movb %al, 8(%rdi)
8121; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
8122; AVX2-NEXT:    andb $1, %al
8123; AVX2-NEXT:    movb %al, 8(%rdi)
8124; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
8125; AVX2-NEXT:    andb $1, %al
8126; AVX2-NEXT:    movb %al, 8(%rdi)
8127; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
8128; AVX2-NEXT:    andb $1, %al
8129; AVX2-NEXT:    movb %al, 8(%rdi)
8130; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
8131; AVX2-NEXT:    andb $1, %al
8132; AVX2-NEXT:    movb %al, 8(%rdi)
8133; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
8134; AVX2-NEXT:    andb $1, %al
8135; AVX2-NEXT:    movb %al, 8(%rdi)
8136; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
8137; AVX2-NEXT:    andb $1, %al
8138; AVX2-NEXT:    movb %al, 8(%rdi)
8139; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
8140; AVX2-NEXT:    andb $1, %al
8141; AVX2-NEXT:    movb %al, 8(%rdi)
8142; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
8143; AVX2-NEXT:    andb $1, %al
8144; AVX2-NEXT:    movb %al, 8(%rdi)
8145; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
8146; AVX2-NEXT:    andb $1, %al
8147; AVX2-NEXT:    movb %al, 8(%rdi)
8148; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
8149; AVX2-NEXT:    andb $1, %al
8150; AVX2-NEXT:    movb %al, 8(%rdi)
8151; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
8152; AVX2-NEXT:    andb $1, %al
8153; AVX2-NEXT:    movb %al, 8(%rdi)
8154; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
8155; AVX2-NEXT:    andb $1, %al
8156; AVX2-NEXT:    movb %al, 8(%rdi)
8157; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
8158; AVX2-NEXT:    andb $1, %al
8159; AVX2-NEXT:    movb %al, 8(%rdi)
8160; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
8161; AVX2-NEXT:    andb $1, %al
8162; AVX2-NEXT:    movb %al, 8(%rdi)
8163; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
8164; AVX2-NEXT:    andb $1, %al
8165; AVX2-NEXT:    movb %al, 8(%rdi)
8166; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
8167; AVX2-NEXT:    andb $1, %al
8168; AVX2-NEXT:    movb %al, 8(%rdi)
8169; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
8170; AVX2-NEXT:    andb $1, %al
8171; AVX2-NEXT:    movb %al, 8(%rdi)
8172; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
8173; AVX2-NEXT:    andb $1, %al
8174; AVX2-NEXT:    movb %al, 8(%rdi)
8175; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
8176; AVX2-NEXT:    andb $1, %al
8177; AVX2-NEXT:    movb %al, 8(%rdi)
8178; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
8179; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
8180; AVX2-NEXT:    andb $1, %al
8181; AVX2-NEXT:    movb %al, 4(%rdi)
8182; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
8183; AVX2-NEXT:    andb $1, %al
8184; AVX2-NEXT:    movb %al, 4(%rdi)
8185; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
8186; AVX2-NEXT:    andb $1, %al
8187; AVX2-NEXT:    movb %al, 4(%rdi)
8188; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
8189; AVX2-NEXT:    andb $1, %al
8190; AVX2-NEXT:    movb %al, 4(%rdi)
8191; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
8192; AVX2-NEXT:    andb $1, %al
8193; AVX2-NEXT:    movb %al, 4(%rdi)
8194; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
8195; AVX2-NEXT:    andb $1, %al
8196; AVX2-NEXT:    movb %al, 4(%rdi)
8197; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
8198; AVX2-NEXT:    andb $1, %al
8199; AVX2-NEXT:    movb %al, 4(%rdi)
8200; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
8201; AVX2-NEXT:    andb $1, %al
8202; AVX2-NEXT:    movb %al, 4(%rdi)
8203; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
8204; AVX2-NEXT:    andb $1, %al
8205; AVX2-NEXT:    movb %al, 4(%rdi)
8206; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
8207; AVX2-NEXT:    andb $1, %al
8208; AVX2-NEXT:    movb %al, 4(%rdi)
8209; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
8210; AVX2-NEXT:    andb $1, %al
8211; AVX2-NEXT:    movb %al, 4(%rdi)
8212; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
8213; AVX2-NEXT:    andb $1, %al
8214; AVX2-NEXT:    movb %al, 4(%rdi)
8215; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
8216; AVX2-NEXT:    andb $1, %al
8217; AVX2-NEXT:    movb %al, 4(%rdi)
8218; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
8219; AVX2-NEXT:    andb $1, %al
8220; AVX2-NEXT:    movb %al, 4(%rdi)
8221; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
8222; AVX2-NEXT:    andb $1, %al
8223; AVX2-NEXT:    movb %al, 4(%rdi)
8224; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
8225; AVX2-NEXT:    andb $1, %al
8226; AVX2-NEXT:    movb %al, 4(%rdi)
8227; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
8228; AVX2-NEXT:    andb $1, %al
8229; AVX2-NEXT:    movb %al, 4(%rdi)
8230; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
8231; AVX2-NEXT:    andb $1, %al
8232; AVX2-NEXT:    movb %al, 4(%rdi)
8233; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
8234; AVX2-NEXT:    andb $1, %al
8235; AVX2-NEXT:    movb %al, 4(%rdi)
8236; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
8237; AVX2-NEXT:    andb $1, %al
8238; AVX2-NEXT:    movb %al, 4(%rdi)
8239; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
8240; AVX2-NEXT:    andb $1, %al
8241; AVX2-NEXT:    movb %al, 4(%rdi)
8242; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
8243; AVX2-NEXT:    andb $1, %al
8244; AVX2-NEXT:    movb %al, 4(%rdi)
8245; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
8246; AVX2-NEXT:    andb $1, %al
8247; AVX2-NEXT:    movb %al, 4(%rdi)
8248; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
8249; AVX2-NEXT:    andb $1, %al
8250; AVX2-NEXT:    movb %al, 4(%rdi)
8251; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
8252; AVX2-NEXT:    andb $1, %al
8253; AVX2-NEXT:    movb %al, 4(%rdi)
8254; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
8255; AVX2-NEXT:    andb $1, %al
8256; AVX2-NEXT:    movb %al, 4(%rdi)
8257; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
8258; AVX2-NEXT:    andb $1, %al
8259; AVX2-NEXT:    movb %al, 4(%rdi)
8260; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
8261; AVX2-NEXT:    andb $1, %al
8262; AVX2-NEXT:    movb %al, 4(%rdi)
8263; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
8264; AVX2-NEXT:    andb $1, %al
8265; AVX2-NEXT:    movb %al, 4(%rdi)
8266; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
8267; AVX2-NEXT:    andb $1, %al
8268; AVX2-NEXT:    movb %al, 4(%rdi)
8269; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
8270; AVX2-NEXT:    andb $1, %al
8271; AVX2-NEXT:    movb %al, 4(%rdi)
8272; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
8273; AVX2-NEXT:    andb $1, %al
8274; AVX2-NEXT:    movb %al, 4(%rdi)
8275; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
8276; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
8277; AVX2-NEXT:    andb $1, %al
8278; AVX2-NEXT:    movb %al, (%rdi)
8279; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
8280; AVX2-NEXT:    andb $1, %al
8281; AVX2-NEXT:    movb %al, (%rdi)
8282; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
8283; AVX2-NEXT:    andb $1, %al
8284; AVX2-NEXT:    movb %al, (%rdi)
8285; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
8286; AVX2-NEXT:    andb $1, %al
8287; AVX2-NEXT:    movb %al, (%rdi)
8288; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
8289; AVX2-NEXT:    andb $1, %al
8290; AVX2-NEXT:    movb %al, (%rdi)
8291; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
8292; AVX2-NEXT:    andb $1, %al
8293; AVX2-NEXT:    movb %al, (%rdi)
8294; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
8295; AVX2-NEXT:    andb $1, %al
8296; AVX2-NEXT:    movb %al, (%rdi)
8297; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
8298; AVX2-NEXT:    andb $1, %al
8299; AVX2-NEXT:    movb %al, (%rdi)
8300; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
8301; AVX2-NEXT:    andb $1, %al
8302; AVX2-NEXT:    movb %al, (%rdi)
8303; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
8304; AVX2-NEXT:    andb $1, %al
8305; AVX2-NEXT:    movb %al, (%rdi)
8306; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
8307; AVX2-NEXT:    andb $1, %al
8308; AVX2-NEXT:    movb %al, (%rdi)
8309; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
8310; AVX2-NEXT:    andb $1, %al
8311; AVX2-NEXT:    movb %al, (%rdi)
8312; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
8313; AVX2-NEXT:    andb $1, %al
8314; AVX2-NEXT:    movb %al, (%rdi)
8315; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
8316; AVX2-NEXT:    andb $1, %al
8317; AVX2-NEXT:    movb %al, (%rdi)
8318; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
8319; AVX2-NEXT:    andb $1, %al
8320; AVX2-NEXT:    movb %al, (%rdi)
8321; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
8322; AVX2-NEXT:    andb $1, %al
8323; AVX2-NEXT:    movb %al, (%rdi)
8324; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
8325; AVX2-NEXT:    andb $1, %al
8326; AVX2-NEXT:    movb %al, (%rdi)
8327; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
8328; AVX2-NEXT:    andb $1, %al
8329; AVX2-NEXT:    movb %al, (%rdi)
8330; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
8331; AVX2-NEXT:    andb $1, %al
8332; AVX2-NEXT:    movb %al, (%rdi)
8333; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
8334; AVX2-NEXT:    andb $1, %al
8335; AVX2-NEXT:    movb %al, (%rdi)
8336; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
8337; AVX2-NEXT:    andb $1, %al
8338; AVX2-NEXT:    movb %al, (%rdi)
8339; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
8340; AVX2-NEXT:    andb $1, %al
8341; AVX2-NEXT:    movb %al, (%rdi)
8342; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
8343; AVX2-NEXT:    andb $1, %al
8344; AVX2-NEXT:    movb %al, (%rdi)
8345; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
8346; AVX2-NEXT:    andb $1, %al
8347; AVX2-NEXT:    movb %al, (%rdi)
8348; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
8349; AVX2-NEXT:    andb $1, %al
8350; AVX2-NEXT:    movb %al, (%rdi)
8351; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
8352; AVX2-NEXT:    andb $1, %al
8353; AVX2-NEXT:    movb %al, (%rdi)
8354; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
8355; AVX2-NEXT:    andb $1, %al
8356; AVX2-NEXT:    movb %al, (%rdi)
8357; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
8358; AVX2-NEXT:    andb $1, %al
8359; AVX2-NEXT:    movb %al, (%rdi)
8360; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
8361; AVX2-NEXT:    andb $1, %al
8362; AVX2-NEXT:    movb %al, (%rdi)
8363; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
8364; AVX2-NEXT:    andb $1, %al
8365; AVX2-NEXT:    movb %al, (%rdi)
8366; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
8367; AVX2-NEXT:    andb $1, %al
8368; AVX2-NEXT:    movb %al, (%rdi)
8369; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
8370; AVX2-NEXT:    andb $1, %al
8371; AVX2-NEXT:    movb %al, (%rdi)
8372; AVX2-NEXT:    movq %rdi, %rax
8373; AVX2-NEXT:    vzeroupper
8374; AVX2-NEXT:    retq
8375;
8376; AVX512F-LABEL: test_cmp_v128i8:
8377; AVX512F:       # BB#0:
8378; AVX512F-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
8379; AVX512F-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
8380; AVX512F-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
8381; AVX512F-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
8382; AVX512F-NEXT:    vextracti128 $1, %ymm3, %xmm4
8383; AVX512F-NEXT:    vpmovsxbd %xmm4, %zmm4
8384; AVX512F-NEXT:    vpslld $31, %zmm4, %zmm4
8385; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k0
8386; AVX512F-NEXT:    kmovw %k0, 14(%rdi)
8387; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
8388; AVX512F-NEXT:    vpslld $31, %zmm3, %zmm3
8389; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
8390; AVX512F-NEXT:    kmovw %k0, 12(%rdi)
8391; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm3
8392; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
8393; AVX512F-NEXT:    vpslld $31, %zmm3, %zmm3
8394; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
8395; AVX512F-NEXT:    kmovw %k0, 10(%rdi)
8396; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
8397; AVX512F-NEXT:    vpslld $31, %zmm2, %zmm2
8398; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
8399; AVX512F-NEXT:    kmovw %k0, 8(%rdi)
8400; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
8401; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
8402; AVX512F-NEXT:    vpslld $31, %zmm2, %zmm2
8403; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
8404; AVX512F-NEXT:    kmovw %k0, 6(%rdi)
8405; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
8406; AVX512F-NEXT:    vpslld $31, %zmm1, %zmm1
8407; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
8408; AVX512F-NEXT:    kmovw %k0, 4(%rdi)
8409; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1
8410; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
8411; AVX512F-NEXT:    vpslld $31, %zmm1, %zmm1
8412; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
8413; AVX512F-NEXT:    kmovw %k0, 2(%rdi)
8414; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
8415; AVX512F-NEXT:    vpslld $31, %zmm0, %zmm0
8416; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
8417; AVX512F-NEXT:    kmovw %k0, (%rdi)
8418; AVX512F-NEXT:    movq %rdi, %rax
8419; AVX512F-NEXT:    retq
8420;
8421; AVX512DQ-LABEL: test_cmp_v128i8:
8422; AVX512DQ:       # BB#0:
8423; AVX512DQ-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
8424; AVX512DQ-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
8425; AVX512DQ-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
8426; AVX512DQ-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
8427; AVX512DQ-NEXT:    vextracti128 $1, %ymm3, %xmm4
8428; AVX512DQ-NEXT:    vpmovsxbd %xmm4, %zmm4
8429; AVX512DQ-NEXT:    vpslld $31, %zmm4, %zmm4
8430; AVX512DQ-NEXT:    vptestmd %zmm4, %zmm4, %k0
8431; AVX512DQ-NEXT:    kmovw %k0, 14(%rdi)
8432; AVX512DQ-NEXT:    vpmovsxbd %xmm3, %zmm3
8433; AVX512DQ-NEXT:    vpslld $31, %zmm3, %zmm3
8434; AVX512DQ-NEXT:    vptestmd %zmm3, %zmm3, %k0
8435; AVX512DQ-NEXT:    kmovw %k0, 12(%rdi)
8436; AVX512DQ-NEXT:    vextracti128 $1, %ymm2, %xmm3
8437; AVX512DQ-NEXT:    vpmovsxbd %xmm3, %zmm3
8438; AVX512DQ-NEXT:    vpslld $31, %zmm3, %zmm3
8439; AVX512DQ-NEXT:    vptestmd %zmm3, %zmm3, %k0
8440; AVX512DQ-NEXT:    kmovw %k0, 10(%rdi)
8441; AVX512DQ-NEXT:    vpmovsxbd %xmm2, %zmm2
8442; AVX512DQ-NEXT:    vpslld $31, %zmm2, %zmm2
8443; AVX512DQ-NEXT:    vptestmd %zmm2, %zmm2, %k0
8444; AVX512DQ-NEXT:    kmovw %k0, 8(%rdi)
8445; AVX512DQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
8446; AVX512DQ-NEXT:    vpmovsxbd %xmm2, %zmm2
8447; AVX512DQ-NEXT:    vpslld $31, %zmm2, %zmm2
8448; AVX512DQ-NEXT:    vptestmd %zmm2, %zmm2, %k0
8449; AVX512DQ-NEXT:    kmovw %k0, 6(%rdi)
8450; AVX512DQ-NEXT:    vpmovsxbd %xmm1, %zmm1
8451; AVX512DQ-NEXT:    vpslld $31, %zmm1, %zmm1
8452; AVX512DQ-NEXT:    vptestmd %zmm1, %zmm1, %k0
8453; AVX512DQ-NEXT:    kmovw %k0, 4(%rdi)
8454; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm1
8455; AVX512DQ-NEXT:    vpmovsxbd %xmm1, %zmm1
8456; AVX512DQ-NEXT:    vpslld $31, %zmm1, %zmm1
8457; AVX512DQ-NEXT:    vptestmd %zmm1, %zmm1, %k0
8458; AVX512DQ-NEXT:    kmovw %k0, 2(%rdi)
8459; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm0
8460; AVX512DQ-NEXT:    vpslld $31, %zmm0, %zmm0
8461; AVX512DQ-NEXT:    vptestmd %zmm0, %zmm0, %k0
8462; AVX512DQ-NEXT:    kmovw %k0, (%rdi)
8463; AVX512DQ-NEXT:    movq %rdi, %rax
8464; AVX512DQ-NEXT:    retq
8465;
8466; AVX512BW-LABEL: test_cmp_v128i8:
8467; AVX512BW:       # BB#0:
8468; AVX512BW-NEXT:    vpcmpgtb %zmm3, %zmm1, %k0
8469; AVX512BW-NEXT:    vpcmpgtb %zmm2, %zmm0, %k1
8470; AVX512BW-NEXT:    vpmovm2b %k1, %zmm0
8471; AVX512BW-NEXT:    vpmovm2b %k0, %zmm1
8472; AVX512BW-NEXT:    retq
8473  %1 = icmp sgt <128 x i8> %a0, %a1
8474  ret <128 x i1> %1
8475}
8476
8477;
8478; 2048-bit vector comparisons
8479;
8480
8481define <32 x i1> @test_cmp_v32f64(<32 x double> %a0, <32 x double> %a1) nounwind {
8482; SSE2-LABEL: test_cmp_v32f64:
8483; SSE2:       # BB#0:
8484; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
8485; SSE2-NEXT:    cmpltpd %xmm7, %xmm8
8486; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm7
8487; SSE2-NEXT:    cmpltpd %xmm6, %xmm7
8488; SSE2-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,2],xmm8[0,2]
8489; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8490; SSE2-NEXT:    cmpltpd %xmm5, %xmm6
8491; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8492; SSE2-NEXT:    cmpltpd %xmm4, %xmm5
8493; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm6[0,2]
8494; SSE2-NEXT:    pslld $31, %xmm7
8495; SSE2-NEXT:    psrad $31, %xmm7
8496; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm7[0,2,2,3,4,5,6,7]
8497; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
8498; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,2,2,3]
8499; SSE2-NEXT:    pslld $31, %xmm5
8500; SSE2-NEXT:    psrad $31, %xmm5
8501; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm5[0,2,2,3,4,5,6,7]
8502; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
8503; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
8504; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
8505; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8506; SSE2-NEXT:    cmpltpd %xmm3, %xmm5
8507; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8508; SSE2-NEXT:    cmpltpd %xmm2, %xmm6
8509; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
8510; SSE2-NEXT:    shufps {{.*#+}} xmm6 = xmm6[0,2],xmm5[0,2]
8511; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8512; SSE2-NEXT:    cmpltpd %xmm1, %xmm5
8513; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
8514; SSE2-NEXT:    cmpltpd %xmm0, %xmm1
8515; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
8516; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm5[0,2]
8517; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8518; SSE2-NEXT:    psllw $15, %xmm4
8519; SSE2-NEXT:    psraw $15, %xmm4
8520; SSE2-NEXT:    pslld $31, %xmm6
8521; SSE2-NEXT:    psrad $31, %xmm6
8522; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm6[0,2,2,3,4,5,6,7]
8523; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
8524; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[0,2,2,3]
8525; SSE2-NEXT:    pslld $31, %xmm1
8526; SSE2-NEXT:    psrad $31, %xmm1
8527; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]
8528; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
8529; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
8530; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
8531; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]
8532; SSE2-NEXT:    pand %xmm1, %xmm4
8533; SSE2-NEXT:    psllw $15, %xmm0
8534; SSE2-NEXT:    psraw $15, %xmm0
8535; SSE2-NEXT:    pand %xmm1, %xmm0
8536; SSE2-NEXT:    packuswb %xmm4, %xmm0
8537; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
8538; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
8539; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8540; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm4[0,2]
8541; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
8542; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
8543; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm3
8544; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,2],xmm4[0,2]
8545; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
8546; SSE2-NEXT:    pslld $31, %xmm5
8547; SSE2-NEXT:    psrad $31, %xmm5
8548; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,2,2,3,4,5,6,7]
8549; SSE2-NEXT:    pshufhw {{.*#+}} xmm5 = xmm5[0,1,2,3,4,6,6,7]
8550; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
8551; SSE2-NEXT:    pslld $31, %xmm3
8552; SSE2-NEXT:    psrad $31, %xmm3
8553; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
8554; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
8555; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
8556; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]
8557; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8558; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8559; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
8560; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,2],xmm5[0,2]
8561; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8562; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8563; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm2
8564; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm5[0,2]
8565; SSE2-NEXT:    pslld $31, %xmm4
8566; SSE2-NEXT:    psrad $31, %xmm4
8567; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,2,2,3,4,5,6,7]
8568; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
8569; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
8570; SSE2-NEXT:    pslld $31, %xmm2
8571; SSE2-NEXT:    psrad $31, %xmm2
8572; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
8573; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
8574; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
8575; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
8576; SSE2-NEXT:    psllw $15, %xmm3
8577; SSE2-NEXT:    psraw $15, %xmm3
8578; SSE2-NEXT:    pand %xmm1, %xmm3
8579; SSE2-NEXT:    psllw $15, %xmm2
8580; SSE2-NEXT:    psraw $15, %xmm2
8581; SSE2-NEXT:    pand %xmm1, %xmm2
8582; SSE2-NEXT:    packuswb %xmm3, %xmm2
8583; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
8584; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8585; SSE2-NEXT:    andb $1, %al
8586; SSE2-NEXT:    movb %al, 2(%rdi)
8587; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
8588; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8589; SSE2-NEXT:    andb $1, %al
8590; SSE2-NEXT:    movb %al, (%rdi)
8591; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8592; SSE2-NEXT:    andb $1, %al
8593; SSE2-NEXT:    movb %al, 2(%rdi)
8594; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8595; SSE2-NEXT:    andb $1, %al
8596; SSE2-NEXT:    movb %al, (%rdi)
8597; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8598; SSE2-NEXT:    andb $1, %al
8599; SSE2-NEXT:    movb %al, 2(%rdi)
8600; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8601; SSE2-NEXT:    andb $1, %al
8602; SSE2-NEXT:    movb %al, (%rdi)
8603; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8604; SSE2-NEXT:    andb $1, %al
8605; SSE2-NEXT:    movb %al, 2(%rdi)
8606; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8607; SSE2-NEXT:    andb $1, %al
8608; SSE2-NEXT:    movb %al, (%rdi)
8609; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8610; SSE2-NEXT:    andb $1, %al
8611; SSE2-NEXT:    movb %al, 2(%rdi)
8612; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8613; SSE2-NEXT:    andb $1, %al
8614; SSE2-NEXT:    movb %al, (%rdi)
8615; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8616; SSE2-NEXT:    andb $1, %al
8617; SSE2-NEXT:    movb %al, 2(%rdi)
8618; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8619; SSE2-NEXT:    andb $1, %al
8620; SSE2-NEXT:    movb %al, (%rdi)
8621; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8622; SSE2-NEXT:    andb $1, %al
8623; SSE2-NEXT:    movb %al, 2(%rdi)
8624; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8625; SSE2-NEXT:    andb $1, %al
8626; SSE2-NEXT:    movb %al, (%rdi)
8627; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8628; SSE2-NEXT:    andb $1, %al
8629; SSE2-NEXT:    movb %al, 2(%rdi)
8630; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8631; SSE2-NEXT:    andb $1, %al
8632; SSE2-NEXT:    movb %al, (%rdi)
8633; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8634; SSE2-NEXT:    andb $1, %al
8635; SSE2-NEXT:    movb %al, 2(%rdi)
8636; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8637; SSE2-NEXT:    andb $1, %al
8638; SSE2-NEXT:    movb %al, (%rdi)
8639; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8640; SSE2-NEXT:    andb $1, %al
8641; SSE2-NEXT:    movb %al, 2(%rdi)
8642; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8643; SSE2-NEXT:    andb $1, %al
8644; SSE2-NEXT:    movb %al, (%rdi)
8645; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8646; SSE2-NEXT:    andb $1, %al
8647; SSE2-NEXT:    movb %al, 2(%rdi)
8648; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8649; SSE2-NEXT:    andb $1, %al
8650; SSE2-NEXT:    movb %al, (%rdi)
8651; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8652; SSE2-NEXT:    andb $1, %al
8653; SSE2-NEXT:    movb %al, 2(%rdi)
8654; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8655; SSE2-NEXT:    andb $1, %al
8656; SSE2-NEXT:    movb %al, (%rdi)
8657; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8658; SSE2-NEXT:    andb $1, %al
8659; SSE2-NEXT:    movb %al, 2(%rdi)
8660; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8661; SSE2-NEXT:    andb $1, %al
8662; SSE2-NEXT:    movb %al, (%rdi)
8663; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8664; SSE2-NEXT:    andb $1, %al
8665; SSE2-NEXT:    movb %al, 2(%rdi)
8666; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8667; SSE2-NEXT:    andb $1, %al
8668; SSE2-NEXT:    movb %al, (%rdi)
8669; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8670; SSE2-NEXT:    andb $1, %al
8671; SSE2-NEXT:    movb %al, 2(%rdi)
8672; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8673; SSE2-NEXT:    andb $1, %al
8674; SSE2-NEXT:    movb %al, (%rdi)
8675; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8676; SSE2-NEXT:    andb $1, %al
8677; SSE2-NEXT:    movb %al, 2(%rdi)
8678; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
8679; SSE2-NEXT:    andb $1, %al
8680; SSE2-NEXT:    movb %al, (%rdi)
8681; SSE2-NEXT:    movq %rdi, %rax
8682; SSE2-NEXT:    retq
8683;
8684; SSE42-LABEL: test_cmp_v32f64:
8685; SSE42:       # BB#0:
8686; SSE42-NEXT:    pushq %rbp
8687; SSE42-NEXT:    pushq %r15
8688; SSE42-NEXT:    pushq %r14
8689; SSE42-NEXT:    pushq %r13
8690; SSE42-NEXT:    pushq %r12
8691; SSE42-NEXT:    pushq %rbx
8692; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
8693; SSE42-NEXT:    cmpltpd %xmm7, %xmm8
8694; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm7
8695; SSE42-NEXT:    cmpltpd %xmm6, %xmm7
8696; SSE42-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,2],xmm8[0,2]
8697; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8698; SSE42-NEXT:    cmpltpd %xmm5, %xmm6
8699; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8700; SSE42-NEXT:    cmpltpd %xmm4, %xmm5
8701; SSE42-NEXT:    pslld $31, %xmm7
8702; SSE42-NEXT:    psrad $31, %xmm7
8703; SSE42-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm6[0,2]
8704; SSE42-NEXT:    movdqa {{.*#+}} xmm4 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
8705; SSE42-NEXT:    pshufb %xmm4, %xmm7
8706; SSE42-NEXT:    pslld $31, %xmm5
8707; SSE42-NEXT:    psrad $31, %xmm5
8708; SSE42-NEXT:    pshufb %xmm4, %xmm5
8709; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
8710; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8711; SSE42-NEXT:    cmpltpd %xmm3, %xmm6
8712; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
8713; SSE42-NEXT:    cmpltpd %xmm2, %xmm3
8714; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
8715; SSE42-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,2],xmm6[0,2]
8716; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8717; SSE42-NEXT:    cmpltpd %xmm1, %xmm6
8718; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
8719; SSE42-NEXT:    cmpltpd %xmm0, %xmm1
8720; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
8721; SSE42-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm6[0,2]
8722; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8723; SSE42-NEXT:    psllw $15, %xmm5
8724; SSE42-NEXT:    psraw $15, %xmm5
8725; SSE42-NEXT:    pslld $31, %xmm3
8726; SSE42-NEXT:    psrad $31, %xmm3
8727; SSE42-NEXT:    pshufb %xmm4, %xmm3
8728; SSE42-NEXT:    pslld $31, %xmm1
8729; SSE42-NEXT:    psrad $31, %xmm1
8730; SSE42-NEXT:    pshufb %xmm4, %xmm1
8731; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
8732; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
8733; SSE42-NEXT:    pshufb %xmm3, %xmm5
8734; SSE42-NEXT:    psllw $15, %xmm1
8735; SSE42-NEXT:    psraw $15, %xmm1
8736; SSE42-NEXT:    pshufb %xmm3, %xmm1
8737; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
8738; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8739; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8740; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm6
8741; SSE42-NEXT:    shufps {{.*#+}} xmm6 = xmm6[0,2],xmm5[0,2]
8742; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8743; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8744; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
8745; SSE42-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm5[0,2]
8746; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
8747; SSE42-NEXT:    pslld $31, %xmm6
8748; SSE42-NEXT:    psrad $31, %xmm6
8749; SSE42-NEXT:    pshufb %xmm4, %xmm6
8750; SSE42-NEXT:    pslld $31, %xmm0
8751; SSE42-NEXT:    psrad $31, %xmm0
8752; SSE42-NEXT:    pshufb %xmm4, %xmm0
8753; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
8754; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8755; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm6
8756; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
8757; SSE42-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm6[0,2]
8758; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
8759; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm6
8760; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm2
8761; SSE42-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm6[0,2]
8762; SSE42-NEXT:    pslld $31, %xmm5
8763; SSE42-NEXT:    psrad $31, %xmm5
8764; SSE42-NEXT:    pshufb %xmm4, %xmm5
8765; SSE42-NEXT:    pslld $31, %xmm2
8766; SSE42-NEXT:    psrad $31, %xmm2
8767; SSE42-NEXT:    pshufb %xmm4, %xmm2
8768; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
8769; SSE42-NEXT:    psllw $15, %xmm0
8770; SSE42-NEXT:    psraw $15, %xmm0
8771; SSE42-NEXT:    pshufb %xmm3, %xmm0
8772; SSE42-NEXT:    psllw $15, %xmm2
8773; SSE42-NEXT:    psraw $15, %xmm2
8774; SSE42-NEXT:    pshufb %xmm3, %xmm2
8775; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]
8776; SSE42-NEXT:    pextrb $15, %xmm2, %eax
8777; SSE42-NEXT:    andb $1, %al
8778; SSE42-NEXT:    movb %al, 2(%rdi)
8779; SSE42-NEXT:    pextrb $14, %xmm2, %eax
8780; SSE42-NEXT:    andb $1, %al
8781; SSE42-NEXT:    movb %al, 2(%rdi)
8782; SSE42-NEXT:    pextrb $13, %xmm2, %r8d
8783; SSE42-NEXT:    pextrb $12, %xmm2, %r9d
8784; SSE42-NEXT:    pextrb $11, %xmm2, %r10d
8785; SSE42-NEXT:    pextrb $10, %xmm2, %r11d
8786; SSE42-NEXT:    pextrb $9, %xmm2, %r14d
8787; SSE42-NEXT:    pextrb $8, %xmm2, %r15d
8788; SSE42-NEXT:    pextrb $7, %xmm2, %r12d
8789; SSE42-NEXT:    pextrb $6, %xmm2, %r13d
8790; SSE42-NEXT:    pextrb $5, %xmm2, %ebx
8791; SSE42-NEXT:    pextrb $4, %xmm2, %ebp
8792; SSE42-NEXT:    pextrb $3, %xmm2, %eax
8793; SSE42-NEXT:    pextrb $2, %xmm2, %ecx
8794; SSE42-NEXT:    pextrb $1, %xmm2, %edx
8795; SSE42-NEXT:    pextrb $0, %xmm2, %esi
8796; SSE42-NEXT:    andb $1, %r8b
8797; SSE42-NEXT:    movb %r8b, 2(%rdi)
8798; SSE42-NEXT:    andb $1, %r9b
8799; SSE42-NEXT:    movb %r9b, 2(%rdi)
8800; SSE42-NEXT:    andb $1, %r10b
8801; SSE42-NEXT:    movb %r10b, 2(%rdi)
8802; SSE42-NEXT:    andb $1, %r11b
8803; SSE42-NEXT:    movb %r11b, 2(%rdi)
8804; SSE42-NEXT:    andb $1, %r14b
8805; SSE42-NEXT:    movb %r14b, 2(%rdi)
8806; SSE42-NEXT:    andb $1, %r15b
8807; SSE42-NEXT:    movb %r15b, 2(%rdi)
8808; SSE42-NEXT:    andb $1, %r12b
8809; SSE42-NEXT:    movb %r12b, 2(%rdi)
8810; SSE42-NEXT:    andb $1, %r13b
8811; SSE42-NEXT:    movb %r13b, 2(%rdi)
8812; SSE42-NEXT:    andb $1, %bl
8813; SSE42-NEXT:    movb %bl, 2(%rdi)
8814; SSE42-NEXT:    andb $1, %bpl
8815; SSE42-NEXT:    movb %bpl, 2(%rdi)
8816; SSE42-NEXT:    andb $1, %al
8817; SSE42-NEXT:    movb %al, 2(%rdi)
8818; SSE42-NEXT:    andb $1, %cl
8819; SSE42-NEXT:    movb %cl, 2(%rdi)
8820; SSE42-NEXT:    andb $1, %dl
8821; SSE42-NEXT:    movb %dl, 2(%rdi)
8822; SSE42-NEXT:    andb $1, %sil
8823; SSE42-NEXT:    movb %sil, 2(%rdi)
8824; SSE42-NEXT:    pextrb $15, %xmm1, %eax
8825; SSE42-NEXT:    andb $1, %al
8826; SSE42-NEXT:    movb %al, (%rdi)
8827; SSE42-NEXT:    pextrb $14, %xmm1, %eax
8828; SSE42-NEXT:    andb $1, %al
8829; SSE42-NEXT:    movb %al, (%rdi)
8830; SSE42-NEXT:    pextrb $13, %xmm1, %r8d
8831; SSE42-NEXT:    pextrb $12, %xmm1, %r9d
8832; SSE42-NEXT:    pextrb $11, %xmm1, %r10d
8833; SSE42-NEXT:    pextrb $10, %xmm1, %r11d
8834; SSE42-NEXT:    pextrb $9, %xmm1, %r14d
8835; SSE42-NEXT:    pextrb $8, %xmm1, %r15d
8836; SSE42-NEXT:    pextrb $7, %xmm1, %r12d
8837; SSE42-NEXT:    pextrb $6, %xmm1, %r13d
8838; SSE42-NEXT:    pextrb $5, %xmm1, %ebx
8839; SSE42-NEXT:    pextrb $4, %xmm1, %ebp
8840; SSE42-NEXT:    pextrb $3, %xmm1, %eax
8841; SSE42-NEXT:    pextrb $2, %xmm1, %ecx
8842; SSE42-NEXT:    pextrb $1, %xmm1, %edx
8843; SSE42-NEXT:    pextrb $0, %xmm1, %esi
8844; SSE42-NEXT:    andb $1, %r8b
8845; SSE42-NEXT:    movb %r8b, (%rdi)
8846; SSE42-NEXT:    andb $1, %r9b
8847; SSE42-NEXT:    movb %r9b, (%rdi)
8848; SSE42-NEXT:    andb $1, %r10b
8849; SSE42-NEXT:    movb %r10b, (%rdi)
8850; SSE42-NEXT:    andb $1, %r11b
8851; SSE42-NEXT:    movb %r11b, (%rdi)
8852; SSE42-NEXT:    andb $1, %r14b
8853; SSE42-NEXT:    movb %r14b, (%rdi)
8854; SSE42-NEXT:    andb $1, %r15b
8855; SSE42-NEXT:    movb %r15b, (%rdi)
8856; SSE42-NEXT:    andb $1, %r12b
8857; SSE42-NEXT:    movb %r12b, (%rdi)
8858; SSE42-NEXT:    andb $1, %r13b
8859; SSE42-NEXT:    movb %r13b, (%rdi)
8860; SSE42-NEXT:    andb $1, %bl
8861; SSE42-NEXT:    movb %bl, (%rdi)
8862; SSE42-NEXT:    andb $1, %bpl
8863; SSE42-NEXT:    movb %bpl, (%rdi)
8864; SSE42-NEXT:    andb $1, %al
8865; SSE42-NEXT:    movb %al, (%rdi)
8866; SSE42-NEXT:    andb $1, %cl
8867; SSE42-NEXT:    movb %cl, (%rdi)
8868; SSE42-NEXT:    andb $1, %dl
8869; SSE42-NEXT:    movb %dl, (%rdi)
8870; SSE42-NEXT:    andb $1, %sil
8871; SSE42-NEXT:    movb %sil, (%rdi)
8872; SSE42-NEXT:    movq %rdi, %rax
8873; SSE42-NEXT:    popq %rbx
8874; SSE42-NEXT:    popq %r12
8875; SSE42-NEXT:    popq %r13
8876; SSE42-NEXT:    popq %r14
8877; SSE42-NEXT:    popq %r15
8878; SSE42-NEXT:    popq %rbp
8879; SSE42-NEXT:    retq
8880;
8881; AVX1-LABEL: test_cmp_v32f64:
8882; AVX1:       # BB#0:
8883; AVX1-NEXT:    pushq %rbp
8884; AVX1-NEXT:    movq %rsp, %rbp
8885; AVX1-NEXT:    andq $-32, %rsp
8886; AVX1-NEXT:    subq $32, %rsp
8887; AVX1-NEXT:    vmovapd 16(%rbp), %ymm8
8888; AVX1-NEXT:    vmovapd 48(%rbp), %ymm9
8889; AVX1-NEXT:    vmovapd 80(%rbp), %ymm10
8890; AVX1-NEXT:    vmovapd 112(%rbp), %ymm11
8891; AVX1-NEXT:    vmovapd 144(%rbp), %ymm12
8892; AVX1-NEXT:    vmovapd 176(%rbp), %ymm13
8893; AVX1-NEXT:    vmovapd 208(%rbp), %ymm14
8894; AVX1-NEXT:    vmovapd 240(%rbp), %ymm15
8895; AVX1-NEXT:    vcmpltpd %ymm7, %ymm15, %ymm15
8896; AVX1-NEXT:    vextractf128 $1, %ymm15, %xmm7
8897; AVX1-NEXT:    vpacksswb %xmm7, %xmm15, %xmm15
8898; AVX1-NEXT:    vcmpltpd %ymm6, %ymm14, %ymm6
8899; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
8900; AVX1-NEXT:    vpacksswb %xmm7, %xmm6, %xmm6
8901; AVX1-NEXT:    vpacksswb %xmm15, %xmm6, %xmm6
8902; AVX1-NEXT:    vcmpltpd %ymm5, %ymm13, %ymm5
8903; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm7
8904; AVX1-NEXT:    vpacksswb %xmm7, %xmm5, %xmm5
8905; AVX1-NEXT:    vcmpltpd %ymm4, %ymm12, %ymm4
8906; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm7
8907; AVX1-NEXT:    vpacksswb %xmm7, %xmm4, %xmm4
8908; AVX1-NEXT:    vpacksswb %xmm5, %xmm4, %xmm4
8909; AVX1-NEXT:    vpacksswb %xmm6, %xmm4, %xmm4
8910; AVX1-NEXT:    vcmpltpd %ymm3, %ymm11, %ymm3
8911; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
8912; AVX1-NEXT:    vpacksswb %xmm5, %xmm3, %xmm3
8913; AVX1-NEXT:    vcmpltpd %ymm2, %ymm10, %ymm2
8914; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
8915; AVX1-NEXT:    vpacksswb %xmm5, %xmm2, %xmm2
8916; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
8917; AVX1-NEXT:    vcmpltpd %ymm1, %ymm9, %ymm1
8918; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8919; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
8920; AVX1-NEXT:    vcmpltpd %ymm0, %ymm8, %ymm0
8921; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8922; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
8923; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
8924; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
8925; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
8926; AVX1-NEXT:    movq %rbp, %rsp
8927; AVX1-NEXT:    popq %rbp
8928; AVX1-NEXT:    retq
8929;
8930; AVX2-LABEL: test_cmp_v32f64:
8931; AVX2:       # BB#0:
8932; AVX2-NEXT:    pushq %rbp
8933; AVX2-NEXT:    movq %rsp, %rbp
8934; AVX2-NEXT:    andq $-32, %rsp
8935; AVX2-NEXT:    subq $32, %rsp
8936; AVX2-NEXT:    vmovapd 16(%rbp), %ymm8
8937; AVX2-NEXT:    vmovapd 48(%rbp), %ymm9
8938; AVX2-NEXT:    vmovapd 80(%rbp), %ymm10
8939; AVX2-NEXT:    vmovapd 112(%rbp), %ymm11
8940; AVX2-NEXT:    vmovapd 144(%rbp), %ymm12
8941; AVX2-NEXT:    vmovapd 176(%rbp), %ymm13
8942; AVX2-NEXT:    vmovapd 208(%rbp), %ymm14
8943; AVX2-NEXT:    vmovapd 240(%rbp), %ymm15
8944; AVX2-NEXT:    vcmpltpd %ymm7, %ymm15, %ymm7
8945; AVX2-NEXT:    vcmpltpd %ymm6, %ymm14, %ymm6
8946; AVX2-NEXT:    vpacksswb %ymm7, %ymm6, %ymm6
8947; AVX2-NEXT:    vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]
8948; AVX2-NEXT:    vcmpltpd %ymm5, %ymm13, %ymm5
8949; AVX2-NEXT:    vcmpltpd %ymm4, %ymm12, %ymm4
8950; AVX2-NEXT:    vpacksswb %ymm5, %ymm4, %ymm4
8951; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
8952; AVX2-NEXT:    vpacksswb %ymm6, %ymm4, %ymm4
8953; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
8954; AVX2-NEXT:    vcmpltpd %ymm3, %ymm11, %ymm3
8955; AVX2-NEXT:    vcmpltpd %ymm2, %ymm10, %ymm2
8956; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
8957; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
8958; AVX2-NEXT:    vcmpltpd %ymm1, %ymm9, %ymm1
8959; AVX2-NEXT:    vcmpltpd %ymm0, %ymm8, %ymm0
8960; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
8961; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
8962; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
8963; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
8964; AVX2-NEXT:    vpacksswb %ymm4, %ymm0, %ymm0
8965; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
8966; AVX2-NEXT:    movq %rbp, %rsp
8967; AVX2-NEXT:    popq %rbp
8968; AVX2-NEXT:    retq
8969;
8970; AVX512F-LABEL: test_cmp_v32f64:
8971; AVX512F:       # BB#0:
8972; AVX512F-NEXT:    vextractf32x4 $3, %zmm4, %xmm8
8973; AVX512F-NEXT:    vextractf32x4 $3, %zmm0, %xmm9
8974; AVX512F-NEXT:    xorl %eax, %eax
8975; AVX512F-NEXT:    vucomisd %xmm8, %xmm9
8976; AVX512F-NEXT:    movq $-1, %rcx
8977; AVX512F-NEXT:    movl $0, %edx
8978; AVX512F-NEXT:    cmovaq %rcx, %rdx
8979; AVX512F-NEXT:    vmovq %rdx, %xmm10
8980; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm8 = xmm8[1,0]
8981; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
8982; AVX512F-NEXT:    vucomisd %xmm8, %xmm9
8983; AVX512F-NEXT:    movl $0, %edx
8984; AVX512F-NEXT:    cmovaq %rcx, %rdx
8985; AVX512F-NEXT:    vmovq %rdx, %xmm8
8986; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm10[0],xmm8[0]
8987; AVX512F-NEXT:    vextractf32x4 $2, %zmm4, %xmm9
8988; AVX512F-NEXT:    vextractf32x4 $2, %zmm0, %xmm10
8989; AVX512F-NEXT:    vucomisd %xmm9, %xmm10
8990; AVX512F-NEXT:    movl $0, %edx
8991; AVX512F-NEXT:    cmovaq %rcx, %rdx
8992; AVX512F-NEXT:    vmovq %rdx, %xmm11
8993; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
8994; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
8995; AVX512F-NEXT:    vucomisd %xmm9, %xmm10
8996; AVX512F-NEXT:    movl $0, %edx
8997; AVX512F-NEXT:    cmovaq %rcx, %rdx
8998; AVX512F-NEXT:    vmovq %rdx, %xmm9
8999; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
9000; AVX512F-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
9001; AVX512F-NEXT:    vextractf32x4 $1, %zmm4, %xmm9
9002; AVX512F-NEXT:    vextractf32x4 $1, %zmm0, %xmm10
9003; AVX512F-NEXT:    vucomisd %xmm9, %xmm10
9004; AVX512F-NEXT:    movl $0, %edx
9005; AVX512F-NEXT:    cmovaq %rcx, %rdx
9006; AVX512F-NEXT:    vmovq %rdx, %xmm11
9007; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9008; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
9009; AVX512F-NEXT:    vucomisd %xmm9, %xmm10
9010; AVX512F-NEXT:    movl $0, %edx
9011; AVX512F-NEXT:    cmovaq %rcx, %rdx
9012; AVX512F-NEXT:    vmovq %rdx, %xmm9
9013; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
9014; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9015; AVX512F-NEXT:    movl $0, %edx
9016; AVX512F-NEXT:    cmovaq %rcx, %rdx
9017; AVX512F-NEXT:    vmovq %rdx, %xmm10
9018; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9019; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9020; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9021; AVX512F-NEXT:    movl $0, %edx
9022; AVX512F-NEXT:    cmovaq %rcx, %rdx
9023; AVX512F-NEXT:    vmovq %rdx, %xmm0
9024; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9025; AVX512F-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
9026; AVX512F-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
9027; AVX512F-NEXT:    vpmovqd %zmm0, %ymm8
9028; AVX512F-NEXT:    vextractf32x4 $3, %zmm5, %xmm4
9029; AVX512F-NEXT:    vextractf32x4 $3, %zmm1, %xmm0
9030; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9031; AVX512F-NEXT:    movl $0, %edx
9032; AVX512F-NEXT:    cmovaq %rcx, %rdx
9033; AVX512F-NEXT:    vmovq %rdx, %xmm9
9034; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9035; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9036; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9037; AVX512F-NEXT:    movl $0, %edx
9038; AVX512F-NEXT:    cmovaq %rcx, %rdx
9039; AVX512F-NEXT:    vmovq %rdx, %xmm0
9040; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm0[0]
9041; AVX512F-NEXT:    vextractf32x4 $2, %zmm5, %xmm4
9042; AVX512F-NEXT:    vextractf32x4 $2, %zmm1, %xmm0
9043; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9044; AVX512F-NEXT:    movl $0, %edx
9045; AVX512F-NEXT:    cmovaq %rcx, %rdx
9046; AVX512F-NEXT:    vmovq %rdx, %xmm10
9047; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9048; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9049; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9050; AVX512F-NEXT:    movl $0, %edx
9051; AVX512F-NEXT:    cmovaq %rcx, %rdx
9052; AVX512F-NEXT:    vmovq %rdx, %xmm0
9053; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9054; AVX512F-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
9055; AVX512F-NEXT:    vextractf32x4 $1, %zmm5, %xmm4
9056; AVX512F-NEXT:    vextractf32x4 $1, %zmm1, %xmm0
9057; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9058; AVX512F-NEXT:    movl $0, %edx
9059; AVX512F-NEXT:    cmovaq %rcx, %rdx
9060; AVX512F-NEXT:    vmovq %rdx, %xmm10
9061; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9062; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9063; AVX512F-NEXT:    vucomisd %xmm4, %xmm0
9064; AVX512F-NEXT:    movl $0, %edx
9065; AVX512F-NEXT:    cmovaq %rcx, %rdx
9066; AVX512F-NEXT:    vmovq %rdx, %xmm0
9067; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9068; AVX512F-NEXT:    vucomisd %xmm5, %xmm1
9069; AVX512F-NEXT:    movl $0, %edx
9070; AVX512F-NEXT:    cmovaq %rcx, %rdx
9071; AVX512F-NEXT:    vmovq %rdx, %xmm4
9072; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9073; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9074; AVX512F-NEXT:    vucomisd %xmm5, %xmm1
9075; AVX512F-NEXT:    movl $0, %edx
9076; AVX512F-NEXT:    cmovaq %rcx, %rdx
9077; AVX512F-NEXT:    vmovq %rdx, %xmm1
9078; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9079; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
9080; AVX512F-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
9081; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
9082; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
9083; AVX512F-NEXT:    vpmovdb %zmm0, %xmm8
9084; AVX512F-NEXT:    vextractf32x4 $3, %zmm6, %xmm1
9085; AVX512F-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
9086; AVX512F-NEXT:    vucomisd %xmm1, %xmm4
9087; AVX512F-NEXT:    movl $0, %edx
9088; AVX512F-NEXT:    cmovaq %rcx, %rdx
9089; AVX512F-NEXT:    vmovq %rdx, %xmm5
9090; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9091; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9092; AVX512F-NEXT:    vucomisd %xmm1, %xmm4
9093; AVX512F-NEXT:    movl $0, %edx
9094; AVX512F-NEXT:    cmovaq %rcx, %rdx
9095; AVX512F-NEXT:    vmovq %rdx, %xmm1
9096; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9097; AVX512F-NEXT:    vextractf32x4 $2, %zmm6, %xmm4
9098; AVX512F-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
9099; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
9100; AVX512F-NEXT:    movl $0, %edx
9101; AVX512F-NEXT:    cmovaq %rcx, %rdx
9102; AVX512F-NEXT:    vmovq %rdx, %xmm0
9103; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9104; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9105; AVX512F-NEXT:    vucomisd %xmm4, %xmm5
9106; AVX512F-NEXT:    movl $0, %edx
9107; AVX512F-NEXT:    cmovaq %rcx, %rdx
9108; AVX512F-NEXT:    vmovq %rdx, %xmm4
9109; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
9110; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
9111; AVX512F-NEXT:    vextractf32x4 $1, %zmm6, %xmm1
9112; AVX512F-NEXT:    vextractf32x4 $1, %zmm2, %xmm4
9113; AVX512F-NEXT:    vucomisd %xmm1, %xmm4
9114; AVX512F-NEXT:    movl $0, %edx
9115; AVX512F-NEXT:    cmovaq %rcx, %rdx
9116; AVX512F-NEXT:    vmovq %rdx, %xmm5
9117; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9118; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9119; AVX512F-NEXT:    vucomisd %xmm1, %xmm4
9120; AVX512F-NEXT:    movl $0, %edx
9121; AVX512F-NEXT:    cmovaq %rcx, %rdx
9122; AVX512F-NEXT:    vmovq %rdx, %xmm1
9123; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9124; AVX512F-NEXT:    vucomisd %xmm6, %xmm2
9125; AVX512F-NEXT:    movl $0, %edx
9126; AVX512F-NEXT:    cmovaq %rcx, %rdx
9127; AVX512F-NEXT:    vmovq %rdx, %xmm4
9128; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
9129; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9130; AVX512F-NEXT:    vucomisd %xmm5, %xmm2
9131; AVX512F-NEXT:    movl $0, %edx
9132; AVX512F-NEXT:    cmovaq %rcx, %rdx
9133; AVX512F-NEXT:    vmovq %rdx, %xmm2
9134; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm4[0],xmm2[0]
9135; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9136; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
9137; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
9138; AVX512F-NEXT:    vextractf32x4 $3, %zmm7, %xmm1
9139; AVX512F-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
9140; AVX512F-NEXT:    vucomisd %xmm1, %xmm2
9141; AVX512F-NEXT:    movl $0, %edx
9142; AVX512F-NEXT:    cmovaq %rcx, %rdx
9143; AVX512F-NEXT:    vmovq %rdx, %xmm4
9144; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9145; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9146; AVX512F-NEXT:    vucomisd %xmm1, %xmm2
9147; AVX512F-NEXT:    movl $0, %edx
9148; AVX512F-NEXT:    cmovaq %rcx, %rdx
9149; AVX512F-NEXT:    vmovq %rdx, %xmm1
9150; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9151; AVX512F-NEXT:    vextractf32x4 $2, %zmm7, %xmm2
9152; AVX512F-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
9153; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
9154; AVX512F-NEXT:    movl $0, %edx
9155; AVX512F-NEXT:    cmovaq %rcx, %rdx
9156; AVX512F-NEXT:    vmovq %rdx, %xmm5
9157; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9158; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9159; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
9160; AVX512F-NEXT:    movl $0, %edx
9161; AVX512F-NEXT:    cmovaq %rcx, %rdx
9162; AVX512F-NEXT:    vmovq %rdx, %xmm2
9163; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9164; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9165; AVX512F-NEXT:    vextractf32x4 $1, %zmm7, %xmm2
9166; AVX512F-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
9167; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
9168; AVX512F-NEXT:    movl $0, %edx
9169; AVX512F-NEXT:    cmovaq %rcx, %rdx
9170; AVX512F-NEXT:    vmovq %rdx, %xmm5
9171; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9172; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9173; AVX512F-NEXT:    vucomisd %xmm2, %xmm4
9174; AVX512F-NEXT:    movl $0, %edx
9175; AVX512F-NEXT:    cmovaq %rcx, %rdx
9176; AVX512F-NEXT:    vmovq %rdx, %xmm2
9177; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9178; AVX512F-NEXT:    vucomisd %xmm7, %xmm3
9179; AVX512F-NEXT:    movl $0, %edx
9180; AVX512F-NEXT:    cmovaq %rcx, %rdx
9181; AVX512F-NEXT:    vmovq %rdx, %xmm4
9182; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm7[1,0]
9183; AVX512F-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
9184; AVX512F-NEXT:    vucomisd %xmm5, %xmm3
9185; AVX512F-NEXT:    cmovaq %rcx, %rax
9186; AVX512F-NEXT:    vmovq %rax, %xmm3
9187; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]
9188; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2
9189; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm1
9190; AVX512F-NEXT:    vpmovqd %zmm1, %ymm1
9191; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
9192; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
9193; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
9194; AVX512F-NEXT:    retq
9195;
9196; AVX512DQ-LABEL: test_cmp_v32f64:
9197; AVX512DQ:       # BB#0:
9198; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm4, %xmm8
9199; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm0, %xmm9
9200; AVX512DQ-NEXT:    xorl %eax, %eax
9201; AVX512DQ-NEXT:    vucomisd %xmm8, %xmm9
9202; AVX512DQ-NEXT:    movq $-1, %rcx
9203; AVX512DQ-NEXT:    movl $0, %edx
9204; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9205; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
9206; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm8 = xmm8[1,0]
9207; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9208; AVX512DQ-NEXT:    vucomisd %xmm8, %xmm9
9209; AVX512DQ-NEXT:    movl $0, %edx
9210; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9211; AVX512DQ-NEXT:    vmovq %rdx, %xmm8
9212; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm10[0],xmm8[0]
9213; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm4, %xmm9
9214; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm0, %xmm10
9215; AVX512DQ-NEXT:    vucomisd %xmm9, %xmm10
9216; AVX512DQ-NEXT:    movl $0, %edx
9217; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9218; AVX512DQ-NEXT:    vmovq %rdx, %xmm11
9219; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9220; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
9221; AVX512DQ-NEXT:    vucomisd %xmm9, %xmm10
9222; AVX512DQ-NEXT:    movl $0, %edx
9223; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9224; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
9225; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
9226; AVX512DQ-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
9227; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm4, %xmm9
9228; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm0, %xmm10
9229; AVX512DQ-NEXT:    vucomisd %xmm9, %xmm10
9230; AVX512DQ-NEXT:    movl $0, %edx
9231; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9232; AVX512DQ-NEXT:    vmovq %rdx, %xmm11
9233; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9234; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
9235; AVX512DQ-NEXT:    vucomisd %xmm9, %xmm10
9236; AVX512DQ-NEXT:    movl $0, %edx
9237; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9238; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
9239; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
9240; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9241; AVX512DQ-NEXT:    movl $0, %edx
9242; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9243; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
9244; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9245; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9246; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9247; AVX512DQ-NEXT:    movl $0, %edx
9248; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9249; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
9250; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9251; AVX512DQ-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
9252; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
9253; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm8
9254; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm5, %xmm4
9255; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm1, %xmm0
9256; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9257; AVX512DQ-NEXT:    movl $0, %edx
9258; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9259; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
9260; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9261; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9262; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9263; AVX512DQ-NEXT:    movl $0, %edx
9264; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9265; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
9266; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm0[0]
9267; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm5, %xmm4
9268; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm1, %xmm0
9269; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9270; AVX512DQ-NEXT:    movl $0, %edx
9271; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9272; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
9273; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9274; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9275; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9276; AVX512DQ-NEXT:    movl $0, %edx
9277; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9278; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
9279; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9280; AVX512DQ-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
9281; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm5, %xmm4
9282; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm1, %xmm0
9283; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9284; AVX512DQ-NEXT:    movl $0, %edx
9285; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9286; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
9287; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9288; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9289; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm0
9290; AVX512DQ-NEXT:    movl $0, %edx
9291; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9292; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
9293; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9294; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm1
9295; AVX512DQ-NEXT:    movl $0, %edx
9296; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9297; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
9298; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9299; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9300; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm1
9301; AVX512DQ-NEXT:    movl $0, %edx
9302; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9303; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
9304; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9305; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
9306; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
9307; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
9308; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm0, %zmm8, %zmm0
9309; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm8
9310; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm6, %xmm1
9311; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm2, %xmm4
9312; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm4
9313; AVX512DQ-NEXT:    movl $0, %edx
9314; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9315; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
9316; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9317; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9318; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm4
9319; AVX512DQ-NEXT:    movl $0, %edx
9320; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9321; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
9322; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9323; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm6, %xmm4
9324; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm2, %xmm5
9325; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
9326; AVX512DQ-NEXT:    movl $0, %edx
9327; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9328; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
9329; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9330; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9331; AVX512DQ-NEXT:    vucomisd %xmm4, %xmm5
9332; AVX512DQ-NEXT:    movl $0, %edx
9333; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9334; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
9335; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
9336; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
9337; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm6, %xmm1
9338; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm2, %xmm4
9339; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm4
9340; AVX512DQ-NEXT:    movl $0, %edx
9341; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9342; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
9343; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9344; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9345; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm4
9346; AVX512DQ-NEXT:    movl $0, %edx
9347; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9348; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
9349; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9350; AVX512DQ-NEXT:    vucomisd %xmm6, %xmm2
9351; AVX512DQ-NEXT:    movl $0, %edx
9352; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9353; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
9354; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
9355; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9356; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm2
9357; AVX512DQ-NEXT:    movl $0, %edx
9358; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9359; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
9360; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm4[0],xmm2[0]
9361; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9362; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
9363; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
9364; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm7, %xmm1
9365; AVX512DQ-NEXT:    vextractf64x2 $3, %zmm3, %xmm2
9366; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm2
9367; AVX512DQ-NEXT:    movl $0, %edx
9368; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9369; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
9370; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9371; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9372; AVX512DQ-NEXT:    vucomisd %xmm1, %xmm2
9373; AVX512DQ-NEXT:    movl $0, %edx
9374; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9375; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
9376; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9377; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm7, %xmm2
9378; AVX512DQ-NEXT:    vextractf64x2 $2, %zmm3, %xmm4
9379; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
9380; AVX512DQ-NEXT:    movl $0, %edx
9381; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9382; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
9383; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9384; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9385; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
9386; AVX512DQ-NEXT:    movl $0, %edx
9387; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9388; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
9389; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9390; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9391; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm7, %xmm2
9392; AVX512DQ-NEXT:    vextractf64x2 $1, %zmm3, %xmm4
9393; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
9394; AVX512DQ-NEXT:    movl $0, %edx
9395; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9396; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
9397; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9398; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9399; AVX512DQ-NEXT:    vucomisd %xmm2, %xmm4
9400; AVX512DQ-NEXT:    movl $0, %edx
9401; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9402; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
9403; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9404; AVX512DQ-NEXT:    vucomisd %xmm7, %xmm3
9405; AVX512DQ-NEXT:    movl $0, %edx
9406; AVX512DQ-NEXT:    cmovaq %rcx, %rdx
9407; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
9408; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm7[1,0]
9409; AVX512DQ-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
9410; AVX512DQ-NEXT:    vucomisd %xmm5, %xmm3
9411; AVX512DQ-NEXT:    cmovaq %rcx, %rax
9412; AVX512DQ-NEXT:    vmovq %rax, %xmm3
9413; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]
9414; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2
9415; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm1
9416; AVX512DQ-NEXT:    vpmovqd %zmm1, %ymm1
9417; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm1, %zmm0, %zmm0
9418; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
9419; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
9420; AVX512DQ-NEXT:    retq
9421;
9422; AVX512BW-LABEL: test_cmp_v32f64:
9423; AVX512BW:       # BB#0:
9424; AVX512BW-NEXT:    vextractf32x4 $3, %zmm4, %xmm8
9425; AVX512BW-NEXT:    vextractf32x4 $3, %zmm0, %xmm9
9426; AVX512BW-NEXT:    xorl %eax, %eax
9427; AVX512BW-NEXT:    vucomisd %xmm8, %xmm9
9428; AVX512BW-NEXT:    movq $-1, %rcx
9429; AVX512BW-NEXT:    movl $0, %edx
9430; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9431; AVX512BW-NEXT:    vmovq %rdx, %xmm10
9432; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm8 = xmm8[1,0]
9433; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9434; AVX512BW-NEXT:    vucomisd %xmm8, %xmm9
9435; AVX512BW-NEXT:    movl $0, %edx
9436; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9437; AVX512BW-NEXT:    vmovq %rdx, %xmm8
9438; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm10[0],xmm8[0]
9439; AVX512BW-NEXT:    vextractf32x4 $2, %zmm4, %xmm9
9440; AVX512BW-NEXT:    vextractf32x4 $2, %zmm0, %xmm10
9441; AVX512BW-NEXT:    vucomisd %xmm9, %xmm10
9442; AVX512BW-NEXT:    movl $0, %edx
9443; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9444; AVX512BW-NEXT:    vmovq %rdx, %xmm11
9445; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9446; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
9447; AVX512BW-NEXT:    vucomisd %xmm9, %xmm10
9448; AVX512BW-NEXT:    movl $0, %edx
9449; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9450; AVX512BW-NEXT:    vmovq %rdx, %xmm9
9451; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
9452; AVX512BW-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
9453; AVX512BW-NEXT:    vextractf32x4 $1, %zmm4, %xmm9
9454; AVX512BW-NEXT:    vextractf32x4 $1, %zmm0, %xmm10
9455; AVX512BW-NEXT:    vucomisd %xmm9, %xmm10
9456; AVX512BW-NEXT:    movl $0, %edx
9457; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9458; AVX512BW-NEXT:    vmovq %rdx, %xmm11
9459; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
9460; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
9461; AVX512BW-NEXT:    vucomisd %xmm9, %xmm10
9462; AVX512BW-NEXT:    movl $0, %edx
9463; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9464; AVX512BW-NEXT:    vmovq %rdx, %xmm9
9465; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
9466; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9467; AVX512BW-NEXT:    movl $0, %edx
9468; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9469; AVX512BW-NEXT:    vmovq %rdx, %xmm10
9470; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9471; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9472; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9473; AVX512BW-NEXT:    movl $0, %edx
9474; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9475; AVX512BW-NEXT:    vmovq %rdx, %xmm0
9476; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9477; AVX512BW-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
9478; AVX512BW-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
9479; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm8
9480; AVX512BW-NEXT:    vextractf32x4 $3, %zmm5, %xmm4
9481; AVX512BW-NEXT:    vextractf32x4 $3, %zmm1, %xmm0
9482; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9483; AVX512BW-NEXT:    movl $0, %edx
9484; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9485; AVX512BW-NEXT:    vmovq %rdx, %xmm9
9486; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9487; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9488; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9489; AVX512BW-NEXT:    movl $0, %edx
9490; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9491; AVX512BW-NEXT:    vmovq %rdx, %xmm0
9492; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm0[0]
9493; AVX512BW-NEXT:    vextractf32x4 $2, %zmm5, %xmm4
9494; AVX512BW-NEXT:    vextractf32x4 $2, %zmm1, %xmm0
9495; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9496; AVX512BW-NEXT:    movl $0, %edx
9497; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9498; AVX512BW-NEXT:    vmovq %rdx, %xmm10
9499; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9500; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9501; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9502; AVX512BW-NEXT:    movl $0, %edx
9503; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9504; AVX512BW-NEXT:    vmovq %rdx, %xmm0
9505; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9506; AVX512BW-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
9507; AVX512BW-NEXT:    vextractf32x4 $1, %zmm5, %xmm4
9508; AVX512BW-NEXT:    vextractf32x4 $1, %zmm1, %xmm0
9509; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9510; AVX512BW-NEXT:    movl $0, %edx
9511; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9512; AVX512BW-NEXT:    vmovq %rdx, %xmm10
9513; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9514; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
9515; AVX512BW-NEXT:    vucomisd %xmm4, %xmm0
9516; AVX512BW-NEXT:    movl $0, %edx
9517; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9518; AVX512BW-NEXT:    vmovq %rdx, %xmm0
9519; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
9520; AVX512BW-NEXT:    vucomisd %xmm5, %xmm1
9521; AVX512BW-NEXT:    movl $0, %edx
9522; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9523; AVX512BW-NEXT:    vmovq %rdx, %xmm4
9524; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9525; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9526; AVX512BW-NEXT:    vucomisd %xmm5, %xmm1
9527; AVX512BW-NEXT:    movl $0, %edx
9528; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9529; AVX512BW-NEXT:    vmovq %rdx, %xmm1
9530; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9531; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
9532; AVX512BW-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
9533; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
9534; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
9535; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm8
9536; AVX512BW-NEXT:    vextractf32x4 $3, %zmm6, %xmm1
9537; AVX512BW-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
9538; AVX512BW-NEXT:    vucomisd %xmm1, %xmm4
9539; AVX512BW-NEXT:    movl $0, %edx
9540; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9541; AVX512BW-NEXT:    vmovq %rdx, %xmm5
9542; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9543; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9544; AVX512BW-NEXT:    vucomisd %xmm1, %xmm4
9545; AVX512BW-NEXT:    movl $0, %edx
9546; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9547; AVX512BW-NEXT:    vmovq %rdx, %xmm1
9548; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9549; AVX512BW-NEXT:    vextractf32x4 $2, %zmm6, %xmm4
9550; AVX512BW-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
9551; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
9552; AVX512BW-NEXT:    movl $0, %edx
9553; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9554; AVX512BW-NEXT:    vmovq %rdx, %xmm0
9555; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9556; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
9557; AVX512BW-NEXT:    vucomisd %xmm4, %xmm5
9558; AVX512BW-NEXT:    movl $0, %edx
9559; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9560; AVX512BW-NEXT:    vmovq %rdx, %xmm4
9561; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
9562; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
9563; AVX512BW-NEXT:    vextractf32x4 $1, %zmm6, %xmm1
9564; AVX512BW-NEXT:    vextractf32x4 $1, %zmm2, %xmm4
9565; AVX512BW-NEXT:    vucomisd %xmm1, %xmm4
9566; AVX512BW-NEXT:    movl $0, %edx
9567; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9568; AVX512BW-NEXT:    vmovq %rdx, %xmm5
9569; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9570; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9571; AVX512BW-NEXT:    vucomisd %xmm1, %xmm4
9572; AVX512BW-NEXT:    movl $0, %edx
9573; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9574; AVX512BW-NEXT:    vmovq %rdx, %xmm1
9575; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
9576; AVX512BW-NEXT:    vucomisd %xmm6, %xmm2
9577; AVX512BW-NEXT:    movl $0, %edx
9578; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9579; AVX512BW-NEXT:    vmovq %rdx, %xmm4
9580; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
9581; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9582; AVX512BW-NEXT:    vucomisd %xmm5, %xmm2
9583; AVX512BW-NEXT:    movl $0, %edx
9584; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9585; AVX512BW-NEXT:    vmovq %rdx, %xmm2
9586; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm4[0],xmm2[0]
9587; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9588; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
9589; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
9590; AVX512BW-NEXT:    vextractf32x4 $3, %zmm7, %xmm1
9591; AVX512BW-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
9592; AVX512BW-NEXT:    vucomisd %xmm1, %xmm2
9593; AVX512BW-NEXT:    movl $0, %edx
9594; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9595; AVX512BW-NEXT:    vmovq %rdx, %xmm4
9596; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
9597; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9598; AVX512BW-NEXT:    vucomisd %xmm1, %xmm2
9599; AVX512BW-NEXT:    movl $0, %edx
9600; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9601; AVX512BW-NEXT:    vmovq %rdx, %xmm1
9602; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
9603; AVX512BW-NEXT:    vextractf32x4 $2, %zmm7, %xmm2
9604; AVX512BW-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
9605; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
9606; AVX512BW-NEXT:    movl $0, %edx
9607; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9608; AVX512BW-NEXT:    vmovq %rdx, %xmm5
9609; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9610; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9611; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
9612; AVX512BW-NEXT:    movl $0, %edx
9613; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9614; AVX512BW-NEXT:    vmovq %rdx, %xmm2
9615; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9616; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
9617; AVX512BW-NEXT:    vextractf32x4 $1, %zmm7, %xmm2
9618; AVX512BW-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
9619; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
9620; AVX512BW-NEXT:    movl $0, %edx
9621; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9622; AVX512BW-NEXT:    vmovq %rdx, %xmm5
9623; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
9624; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
9625; AVX512BW-NEXT:    vucomisd %xmm2, %xmm4
9626; AVX512BW-NEXT:    movl $0, %edx
9627; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9628; AVX512BW-NEXT:    vmovq %rdx, %xmm2
9629; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
9630; AVX512BW-NEXT:    vucomisd %xmm7, %xmm3
9631; AVX512BW-NEXT:    movl $0, %edx
9632; AVX512BW-NEXT:    cmovaq %rcx, %rdx
9633; AVX512BW-NEXT:    vmovq %rdx, %xmm4
9634; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm7[1,0]
9635; AVX512BW-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
9636; AVX512BW-NEXT:    vucomisd %xmm5, %xmm3
9637; AVX512BW-NEXT:    cmovaq %rcx, %rax
9638; AVX512BW-NEXT:    vmovq %rax, %xmm3
9639; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]
9640; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2
9641; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm1
9642; AVX512BW-NEXT:    vpmovqd %zmm1, %ymm1
9643; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
9644; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
9645; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
9646; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
9647; AVX512BW-NEXT:    retq
9648  %1 = fcmp ogt <32 x double> %a0, %a1
9649  ret <32 x i1> %1
9650}
9651
9652define <32 x i1> @test_cmp_v32i64(<32 x i64> %a0, <32 x i64> %a1) nounwind {
9653; SSE2-LABEL: test_cmp_v32i64:
9654; SSE2:       # BB#0:
9655; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
9656; SSE2-NEXT:    pxor %xmm8, %xmm7
9657; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
9658; SSE2-NEXT:    pxor %xmm8, %xmm9
9659; SSE2-NEXT:    movdqa %xmm7, %xmm10
9660; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
9661; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
9662; SSE2-NEXT:    pcmpeqd %xmm7, %xmm9
9663; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
9664; SSE2-NEXT:    pand %xmm11, %xmm7
9665; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
9666; SSE2-NEXT:    por %xmm7, %xmm9
9667; SSE2-NEXT:    pxor %xmm8, %xmm6
9668; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
9669; SSE2-NEXT:    pxor %xmm8, %xmm7
9670; SSE2-NEXT:    movdqa %xmm6, %xmm10
9671; SSE2-NEXT:    pcmpgtd %xmm7, %xmm10
9672; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
9673; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
9674; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9675; SSE2-NEXT:    pand %xmm11, %xmm6
9676; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm10[1,1,3,3]
9677; SSE2-NEXT:    por %xmm6, %xmm7
9678; SSE2-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,2],xmm9[0,2]
9679; SSE2-NEXT:    pslld $31, %xmm7
9680; SSE2-NEXT:    psrad $31, %xmm7
9681; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm7[0,2,2,3,4,5,6,7]
9682; SSE2-NEXT:    pshufhw {{.*#+}} xmm6 = xmm6[0,1,2,3,4,6,6,7]
9683; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,2,2,3]
9684; SSE2-NEXT:    pxor %xmm8, %xmm5
9685; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
9686; SSE2-NEXT:    pxor %xmm8, %xmm7
9687; SSE2-NEXT:    movdqa %xmm5, %xmm6
9688; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
9689; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
9690; SSE2-NEXT:    pcmpeqd %xmm5, %xmm7
9691; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9692; SSE2-NEXT:    pand %xmm10, %xmm5
9693; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
9694; SSE2-NEXT:    por %xmm5, %xmm6
9695; SSE2-NEXT:    pxor %xmm8, %xmm4
9696; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
9697; SSE2-NEXT:    pxor %xmm8, %xmm5
9698; SSE2-NEXT:    movdqa %xmm4, %xmm7
9699; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9700; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2]
9701; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
9702; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9703; SSE2-NEXT:    pand %xmm10, %xmm4
9704; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9705; SSE2-NEXT:    por %xmm4, %xmm5
9706; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm6[0,2]
9707; SSE2-NEXT:    pslld $31, %xmm5
9708; SSE2-NEXT:    psrad $31, %xmm5
9709; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm5[0,2,2,3,4,5,6,7]
9710; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
9711; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,2,2,3]
9712; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm9[0]
9713; SSE2-NEXT:    psllw $15, %xmm5
9714; SSE2-NEXT:    psraw $15, %xmm5
9715; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [255,255,255,255,255,255,255,255]
9716; SSE2-NEXT:    pand %xmm9, %xmm5
9717; SSE2-NEXT:    pxor %xmm8, %xmm3
9718; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm6
9719; SSE2-NEXT:    pxor %xmm8, %xmm6
9720; SSE2-NEXT:    movdqa %xmm3, %xmm7
9721; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
9722; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
9723; SSE2-NEXT:    pcmpeqd %xmm3, %xmm6
9724; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
9725; SSE2-NEXT:    pand %xmm4, %xmm3
9726; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
9727; SSE2-NEXT:    por %xmm3, %xmm4
9728; SSE2-NEXT:    pxor %xmm8, %xmm2
9729; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9730; SSE2-NEXT:    pxor %xmm8, %xmm3
9731; SSE2-NEXT:    movdqa %xmm2, %xmm6
9732; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
9733; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
9734; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
9735; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
9736; SSE2-NEXT:    pand %xmm7, %xmm2
9737; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
9738; SSE2-NEXT:    por %xmm2, %xmm3
9739; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,2],xmm4[0,2]
9740; SSE2-NEXT:    pslld $31, %xmm3
9741; SSE2-NEXT:    psrad $31, %xmm3
9742; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm3[0,2,2,3,4,5,6,7]
9743; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
9744; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
9745; SSE2-NEXT:    pxor %xmm8, %xmm1
9746; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9747; SSE2-NEXT:    pxor %xmm8, %xmm3
9748; SSE2-NEXT:    movdqa %xmm1, %xmm4
9749; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9750; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
9751; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
9752; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
9753; SSE2-NEXT:    pand %xmm6, %xmm1
9754; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9755; SSE2-NEXT:    por %xmm1, %xmm3
9756; SSE2-NEXT:    pxor %xmm8, %xmm0
9757; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
9758; SSE2-NEXT:    pxor %xmm8, %xmm1
9759; SSE2-NEXT:    movdqa %xmm0, %xmm4
9760; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
9761; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
9762; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
9763; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
9764; SSE2-NEXT:    pand %xmm6, %xmm0
9765; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
9766; SSE2-NEXT:    por %xmm0, %xmm1
9767; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
9768; SSE2-NEXT:    pslld $31, %xmm1
9769; SSE2-NEXT:    psrad $31, %xmm1
9770; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]
9771; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
9772; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
9773; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
9774; SSE2-NEXT:    psllw $15, %xmm0
9775; SSE2-NEXT:    psraw $15, %xmm0
9776; SSE2-NEXT:    pand %xmm9, %xmm0
9777; SSE2-NEXT:    packuswb %xmm5, %xmm0
9778; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
9779; SSE2-NEXT:    pxor %xmm8, %xmm1
9780; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
9781; SSE2-NEXT:    pxor %xmm8, %xmm2
9782; SSE2-NEXT:    movdqa %xmm2, %xmm3
9783; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
9784; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
9785; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
9786; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
9787; SSE2-NEXT:    pand %xmm4, %xmm1
9788; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
9789; SSE2-NEXT:    por %xmm1, %xmm2
9790; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
9791; SSE2-NEXT:    pxor %xmm8, %xmm1
9792; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9793; SSE2-NEXT:    pxor %xmm8, %xmm3
9794; SSE2-NEXT:    movdqa %xmm3, %xmm4
9795; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
9796; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9797; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
9798; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
9799; SSE2-NEXT:    pand %xmm5, %xmm1
9800; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9801; SSE2-NEXT:    por %xmm1, %xmm3
9802; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,2],xmm2[0,2]
9803; SSE2-NEXT:    pslld $31, %xmm3
9804; SSE2-NEXT:    psrad $31, %xmm3
9805; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm3[0,2,2,3,4,5,6,7]
9806; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
9807; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3]
9808; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
9809; SSE2-NEXT:    pxor %xmm8, %xmm1
9810; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9811; SSE2-NEXT:    pxor %xmm8, %xmm3
9812; SSE2-NEXT:    movdqa %xmm3, %xmm4
9813; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
9814; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9815; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
9816; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
9817; SSE2-NEXT:    pand %xmm5, %xmm1
9818; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9819; SSE2-NEXT:    por %xmm1, %xmm3
9820; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
9821; SSE2-NEXT:    pxor %xmm8, %xmm1
9822; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
9823; SSE2-NEXT:    pxor %xmm8, %xmm4
9824; SSE2-NEXT:    movdqa %xmm4, %xmm5
9825; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5
9826; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9827; SSE2-NEXT:    pcmpeqd %xmm1, %xmm4
9828; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
9829; SSE2-NEXT:    pand %xmm6, %xmm1
9830; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9831; SSE2-NEXT:    por %xmm1, %xmm4
9832; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,2],xmm3[0,2]
9833; SSE2-NEXT:    pslld $31, %xmm4
9834; SSE2-NEXT:    psrad $31, %xmm4
9835; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm4[0,2,2,3,4,5,6,7]
9836; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
9837; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
9838; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
9839; SSE2-NEXT:    psllw $15, %xmm1
9840; SSE2-NEXT:    psraw $15, %xmm1
9841; SSE2-NEXT:    pand %xmm9, %xmm1
9842; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
9843; SSE2-NEXT:    pxor %xmm8, %xmm2
9844; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9845; SSE2-NEXT:    pxor %xmm8, %xmm3
9846; SSE2-NEXT:    movdqa %xmm3, %xmm4
9847; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
9848; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9849; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
9850; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
9851; SSE2-NEXT:    pand %xmm5, %xmm2
9852; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9853; SSE2-NEXT:    por %xmm2, %xmm3
9854; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
9855; SSE2-NEXT:    pxor %xmm8, %xmm2
9856; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
9857; SSE2-NEXT:    pxor %xmm8, %xmm4
9858; SSE2-NEXT:    movdqa %xmm4, %xmm5
9859; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9860; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9861; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9862; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9863; SSE2-NEXT:    pand %xmm6, %xmm2
9864; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9865; SSE2-NEXT:    por %xmm2, %xmm4
9866; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,2],xmm3[0,2]
9867; SSE2-NEXT:    pslld $31, %xmm4
9868; SSE2-NEXT:    psrad $31, %xmm4
9869; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm4[0,2,2,3,4,5,6,7]
9870; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
9871; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
9872; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9873; SSE2-NEXT:    pxor %xmm8, %xmm3
9874; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
9875; SSE2-NEXT:    pxor %xmm8, %xmm4
9876; SSE2-NEXT:    movdqa %xmm4, %xmm5
9877; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
9878; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9879; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4
9880; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9881; SSE2-NEXT:    pand %xmm6, %xmm3
9882; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9883; SSE2-NEXT:    por %xmm3, %xmm4
9884; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
9885; SSE2-NEXT:    pxor %xmm8, %xmm3
9886; SSE2-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm8
9887; SSE2-NEXT:    movdqa %xmm8, %xmm5
9888; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
9889; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9890; SSE2-NEXT:    pcmpeqd %xmm3, %xmm8
9891; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm8[1,1,3,3]
9892; SSE2-NEXT:    pand %xmm6, %xmm3
9893; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9894; SSE2-NEXT:    por %xmm3, %xmm5
9895; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm4[0,2]
9896; SSE2-NEXT:    pslld $31, %xmm5
9897; SSE2-NEXT:    psrad $31, %xmm5
9898; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm5[0,2,2,3,4,5,6,7]
9899; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
9900; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
9901; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
9902; SSE2-NEXT:    psllw $15, %xmm3
9903; SSE2-NEXT:    psraw $15, %xmm3
9904; SSE2-NEXT:    pand %xmm9, %xmm3
9905; SSE2-NEXT:    packuswb %xmm1, %xmm3
9906; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
9907; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9908; SSE2-NEXT:    andb $1, %al
9909; SSE2-NEXT:    movb %al, 2(%rdi)
9910; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
9911; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9912; SSE2-NEXT:    andb $1, %al
9913; SSE2-NEXT:    movb %al, (%rdi)
9914; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9915; SSE2-NEXT:    andb $1, %al
9916; SSE2-NEXT:    movb %al, 2(%rdi)
9917; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9918; SSE2-NEXT:    andb $1, %al
9919; SSE2-NEXT:    movb %al, (%rdi)
9920; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9921; SSE2-NEXT:    andb $1, %al
9922; SSE2-NEXT:    movb %al, 2(%rdi)
9923; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9924; SSE2-NEXT:    andb $1, %al
9925; SSE2-NEXT:    movb %al, (%rdi)
9926; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9927; SSE2-NEXT:    andb $1, %al
9928; SSE2-NEXT:    movb %al, 2(%rdi)
9929; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9930; SSE2-NEXT:    andb $1, %al
9931; SSE2-NEXT:    movb %al, (%rdi)
9932; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9933; SSE2-NEXT:    andb $1, %al
9934; SSE2-NEXT:    movb %al, 2(%rdi)
9935; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9936; SSE2-NEXT:    andb $1, %al
9937; SSE2-NEXT:    movb %al, (%rdi)
9938; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9939; SSE2-NEXT:    andb $1, %al
9940; SSE2-NEXT:    movb %al, 2(%rdi)
9941; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9942; SSE2-NEXT:    andb $1, %al
9943; SSE2-NEXT:    movb %al, (%rdi)
9944; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9945; SSE2-NEXT:    andb $1, %al
9946; SSE2-NEXT:    movb %al, 2(%rdi)
9947; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9948; SSE2-NEXT:    andb $1, %al
9949; SSE2-NEXT:    movb %al, (%rdi)
9950; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9951; SSE2-NEXT:    andb $1, %al
9952; SSE2-NEXT:    movb %al, 2(%rdi)
9953; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9954; SSE2-NEXT:    andb $1, %al
9955; SSE2-NEXT:    movb %al, (%rdi)
9956; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9957; SSE2-NEXT:    andb $1, %al
9958; SSE2-NEXT:    movb %al, 2(%rdi)
9959; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9960; SSE2-NEXT:    andb $1, %al
9961; SSE2-NEXT:    movb %al, (%rdi)
9962; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9963; SSE2-NEXT:    andb $1, %al
9964; SSE2-NEXT:    movb %al, 2(%rdi)
9965; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9966; SSE2-NEXT:    andb $1, %al
9967; SSE2-NEXT:    movb %al, (%rdi)
9968; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9969; SSE2-NEXT:    andb $1, %al
9970; SSE2-NEXT:    movb %al, 2(%rdi)
9971; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9972; SSE2-NEXT:    andb $1, %al
9973; SSE2-NEXT:    movb %al, (%rdi)
9974; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9975; SSE2-NEXT:    andb $1, %al
9976; SSE2-NEXT:    movb %al, 2(%rdi)
9977; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9978; SSE2-NEXT:    andb $1, %al
9979; SSE2-NEXT:    movb %al, (%rdi)
9980; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9981; SSE2-NEXT:    andb $1, %al
9982; SSE2-NEXT:    movb %al, 2(%rdi)
9983; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9984; SSE2-NEXT:    andb $1, %al
9985; SSE2-NEXT:    movb %al, (%rdi)
9986; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9987; SSE2-NEXT:    andb $1, %al
9988; SSE2-NEXT:    movb %al, 2(%rdi)
9989; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9990; SSE2-NEXT:    andb $1, %al
9991; SSE2-NEXT:    movb %al, (%rdi)
9992; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9993; SSE2-NEXT:    andb $1, %al
9994; SSE2-NEXT:    movb %al, 2(%rdi)
9995; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9996; SSE2-NEXT:    andb $1, %al
9997; SSE2-NEXT:    movb %al, (%rdi)
9998; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
9999; SSE2-NEXT:    andb $1, %al
10000; SSE2-NEXT:    movb %al, 2(%rdi)
10001; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
10002; SSE2-NEXT:    andb $1, %al
10003; SSE2-NEXT:    movb %al, (%rdi)
10004; SSE2-NEXT:    movq %rdi, %rax
10005; SSE2-NEXT:    retq
10006;
10007; SSE42-LABEL: test_cmp_v32i64:
10008; SSE42:       # BB#0:
10009; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
10010; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm11
10011; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm10
10012; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm12
10013; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
10014; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm14
10015; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm13
10016; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm15
10017; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm7
10018; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm6
10019; SSE42-NEXT:    shufps {{.*#+}} xmm6 = xmm6[0,2],xmm7[0,2]
10020; SSE42-NEXT:    pslld $31, %xmm6
10021; SSE42-NEXT:    psrad $31, %xmm6
10022; SSE42-NEXT:    movdqa {{.*#+}} xmm7 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
10023; SSE42-NEXT:    pshufb %xmm7, %xmm6
10024; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm5
10025; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm4
10026; SSE42-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,2],xmm5[0,2]
10027; SSE42-NEXT:    pslld $31, %xmm4
10028; SSE42-NEXT:    psrad $31, %xmm4
10029; SSE42-NEXT:    pshufb %xmm7, %xmm4
10030; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
10031; SSE42-NEXT:    psllw $15, %xmm4
10032; SSE42-NEXT:    psraw $15, %xmm4
10033; SSE42-NEXT:    movdqa {{.*#+}} xmm5 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
10034; SSE42-NEXT:    pshufb %xmm5, %xmm4
10035; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm3
10036; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm2
10037; SSE42-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
10038; SSE42-NEXT:    pslld $31, %xmm2
10039; SSE42-NEXT:    psrad $31, %xmm2
10040; SSE42-NEXT:    pshufb %xmm7, %xmm2
10041; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
10042; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm0
10043; SSE42-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
10044; SSE42-NEXT:    pslld $31, %xmm0
10045; SSE42-NEXT:    psrad $31, %xmm0
10046; SSE42-NEXT:    pshufb %xmm7, %xmm0
10047; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
10048; SSE42-NEXT:    psllw $15, %xmm0
10049; SSE42-NEXT:    psraw $15, %xmm0
10050; SSE42-NEXT:    pshufb %xmm5, %xmm0
10051; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
10052; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm15
10053; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm13
10054; SSE42-NEXT:    shufps {{.*#+}} xmm13 = xmm13[0,2],xmm15[0,2]
10055; SSE42-NEXT:    pslld $31, %xmm13
10056; SSE42-NEXT:    psrad $31, %xmm13
10057; SSE42-NEXT:    pshufb %xmm7, %xmm13
10058; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm14
10059; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm9
10060; SSE42-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,2],xmm14[0,2]
10061; SSE42-NEXT:    pslld $31, %xmm9
10062; SSE42-NEXT:    psrad $31, %xmm9
10063; SSE42-NEXT:    pshufb %xmm7, %xmm9
10064; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm13[0]
10065; SSE42-NEXT:    psllw $15, %xmm9
10066; SSE42-NEXT:    psraw $15, %xmm9
10067; SSE42-NEXT:    pshufb %xmm5, %xmm9
10068; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm12
10069; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm10
10070; SSE42-NEXT:    shufps {{.*#+}} xmm10 = xmm10[0,2],xmm12[0,2]
10071; SSE42-NEXT:    pslld $31, %xmm10
10072; SSE42-NEXT:    psrad $31, %xmm10
10073; SSE42-NEXT:    pshufb %xmm7, %xmm10
10074; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm11
10075; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm8
10076; SSE42-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,2],xmm11[0,2]
10077; SSE42-NEXT:    pslld $31, %xmm8
10078; SSE42-NEXT:    psrad $31, %xmm8
10079; SSE42-NEXT:    pshufb %xmm7, %xmm8
10080; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm10[0]
10081; SSE42-NEXT:    psllw $15, %xmm8
10082; SSE42-NEXT:    psraw $15, %xmm8
10083; SSE42-NEXT:    pshufb %xmm5, %xmm8
10084; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm9[0]
10085; SSE42-NEXT:    pextrb $15, %xmm8, %eax
10086; SSE42-NEXT:    andb $1, %al
10087; SSE42-NEXT:    movb %al, 2(%rdi)
10088; SSE42-NEXT:    pextrb $14, %xmm8, %eax
10089; SSE42-NEXT:    andb $1, %al
10090; SSE42-NEXT:    movb %al, 2(%rdi)
10091; SSE42-NEXT:    pextrb $13, %xmm8, %eax
10092; SSE42-NEXT:    andb $1, %al
10093; SSE42-NEXT:    movb %al, 2(%rdi)
10094; SSE42-NEXT:    pextrb $12, %xmm8, %eax
10095; SSE42-NEXT:    andb $1, %al
10096; SSE42-NEXT:    movb %al, 2(%rdi)
10097; SSE42-NEXT:    pextrb $11, %xmm8, %eax
10098; SSE42-NEXT:    andb $1, %al
10099; SSE42-NEXT:    movb %al, 2(%rdi)
10100; SSE42-NEXT:    pextrb $10, %xmm8, %eax
10101; SSE42-NEXT:    andb $1, %al
10102; SSE42-NEXT:    movb %al, 2(%rdi)
10103; SSE42-NEXT:    pextrb $9, %xmm8, %eax
10104; SSE42-NEXT:    andb $1, %al
10105; SSE42-NEXT:    movb %al, 2(%rdi)
10106; SSE42-NEXT:    pextrb $8, %xmm8, %eax
10107; SSE42-NEXT:    andb $1, %al
10108; SSE42-NEXT:    movb %al, 2(%rdi)
10109; SSE42-NEXT:    pextrb $7, %xmm8, %eax
10110; SSE42-NEXT:    andb $1, %al
10111; SSE42-NEXT:    movb %al, 2(%rdi)
10112; SSE42-NEXT:    pextrb $6, %xmm8, %eax
10113; SSE42-NEXT:    andb $1, %al
10114; SSE42-NEXT:    movb %al, 2(%rdi)
10115; SSE42-NEXT:    pextrb $5, %xmm8, %eax
10116; SSE42-NEXT:    andb $1, %al
10117; SSE42-NEXT:    movb %al, 2(%rdi)
10118; SSE42-NEXT:    pextrb $4, %xmm8, %eax
10119; SSE42-NEXT:    andb $1, %al
10120; SSE42-NEXT:    movb %al, 2(%rdi)
10121; SSE42-NEXT:    pextrb $3, %xmm8, %eax
10122; SSE42-NEXT:    andb $1, %al
10123; SSE42-NEXT:    movb %al, 2(%rdi)
10124; SSE42-NEXT:    pextrb $2, %xmm8, %eax
10125; SSE42-NEXT:    andb $1, %al
10126; SSE42-NEXT:    movb %al, 2(%rdi)
10127; SSE42-NEXT:    pextrb $1, %xmm8, %eax
10128; SSE42-NEXT:    andb $1, %al
10129; SSE42-NEXT:    movb %al, 2(%rdi)
10130; SSE42-NEXT:    pextrb $0, %xmm8, %eax
10131; SSE42-NEXT:    andb $1, %al
10132; SSE42-NEXT:    movb %al, 2(%rdi)
10133; SSE42-NEXT:    pextrb $15, %xmm0, %eax
10134; SSE42-NEXT:    andb $1, %al
10135; SSE42-NEXT:    movb %al, (%rdi)
10136; SSE42-NEXT:    pextrb $14, %xmm0, %eax
10137; SSE42-NEXT:    andb $1, %al
10138; SSE42-NEXT:    movb %al, (%rdi)
10139; SSE42-NEXT:    pextrb $13, %xmm0, %eax
10140; SSE42-NEXT:    andb $1, %al
10141; SSE42-NEXT:    movb %al, (%rdi)
10142; SSE42-NEXT:    pextrb $12, %xmm0, %eax
10143; SSE42-NEXT:    andb $1, %al
10144; SSE42-NEXT:    movb %al, (%rdi)
10145; SSE42-NEXT:    pextrb $11, %xmm0, %eax
10146; SSE42-NEXT:    andb $1, %al
10147; SSE42-NEXT:    movb %al, (%rdi)
10148; SSE42-NEXT:    pextrb $10, %xmm0, %eax
10149; SSE42-NEXT:    andb $1, %al
10150; SSE42-NEXT:    movb %al, (%rdi)
10151; SSE42-NEXT:    pextrb $9, %xmm0, %eax
10152; SSE42-NEXT:    andb $1, %al
10153; SSE42-NEXT:    movb %al, (%rdi)
10154; SSE42-NEXT:    pextrb $8, %xmm0, %eax
10155; SSE42-NEXT:    andb $1, %al
10156; SSE42-NEXT:    movb %al, (%rdi)
10157; SSE42-NEXT:    pextrb $7, %xmm0, %eax
10158; SSE42-NEXT:    andb $1, %al
10159; SSE42-NEXT:    movb %al, (%rdi)
10160; SSE42-NEXT:    pextrb $6, %xmm0, %eax
10161; SSE42-NEXT:    andb $1, %al
10162; SSE42-NEXT:    movb %al, (%rdi)
10163; SSE42-NEXT:    pextrb $5, %xmm0, %eax
10164; SSE42-NEXT:    andb $1, %al
10165; SSE42-NEXT:    movb %al, (%rdi)
10166; SSE42-NEXT:    pextrb $4, %xmm0, %eax
10167; SSE42-NEXT:    andb $1, %al
10168; SSE42-NEXT:    movb %al, (%rdi)
10169; SSE42-NEXT:    pextrb $3, %xmm0, %eax
10170; SSE42-NEXT:    andb $1, %al
10171; SSE42-NEXT:    movb %al, (%rdi)
10172; SSE42-NEXT:    pextrb $2, %xmm0, %eax
10173; SSE42-NEXT:    andb $1, %al
10174; SSE42-NEXT:    movb %al, (%rdi)
10175; SSE42-NEXT:    pextrb $1, %xmm0, %eax
10176; SSE42-NEXT:    andb $1, %al
10177; SSE42-NEXT:    movb %al, (%rdi)
10178; SSE42-NEXT:    pextrb $0, %xmm0, %eax
10179; SSE42-NEXT:    andb $1, %al
10180; SSE42-NEXT:    movb %al, (%rdi)
10181; SSE42-NEXT:    movq %rdi, %rax
10182; SSE42-NEXT:    retq
10183;
10184; AVX1-LABEL: test_cmp_v32i64:
10185; AVX1:       # BB#0:
10186; AVX1-NEXT:    pushq %rbp
10187; AVX1-NEXT:    movq %rsp, %rbp
10188; AVX1-NEXT:    andq $-32, %rsp
10189; AVX1-NEXT:    subq $32, %rsp
10190; AVX1-NEXT:    vmovaps 240(%rbp), %ymm8
10191; AVX1-NEXT:    vextractf128 $1, %ymm8, %xmm9
10192; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm10
10193; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm10, %xmm9
10194; AVX1-NEXT:    vmovaps 208(%rbp), %ymm10
10195; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm7, %xmm7
10196; AVX1-NEXT:    vpacksswb %xmm9, %xmm7, %xmm8
10197; AVX1-NEXT:    vextractf128 $1, %ymm10, %xmm9
10198; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
10199; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm7, %xmm7
10200; AVX1-NEXT:    vpcmpgtq %xmm10, %xmm6, %xmm6
10201; AVX1-NEXT:    vmovaps 176(%rbp), %ymm9
10202; AVX1-NEXT:    vpacksswb %xmm7, %xmm6, %xmm6
10203; AVX1-NEXT:    vpacksswb %xmm8, %xmm6, %xmm8
10204; AVX1-NEXT:    vextractf128 $1, %ymm9, %xmm7
10205; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm6
10206; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
10207; AVX1-NEXT:    vmovaps 144(%rbp), %ymm10
10208; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm5, %xmm5
10209; AVX1-NEXT:    vpacksswb %xmm6, %xmm5, %xmm5
10210; AVX1-NEXT:    vextractf128 $1, %ymm10, %xmm6
10211; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm7
10212; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
10213; AVX1-NEXT:    vpcmpgtq %xmm10, %xmm4, %xmm4
10214; AVX1-NEXT:    vpacksswb %xmm6, %xmm4, %xmm4
10215; AVX1-NEXT:    vmovaps 112(%rbp), %ymm6
10216; AVX1-NEXT:    vpacksswb %xmm5, %xmm4, %xmm4
10217; AVX1-NEXT:    vpacksswb %xmm8, %xmm4, %xmm4
10218; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm5
10219; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
10220; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm7, %xmm5
10221; AVX1-NEXT:    vmovaps 80(%rbp), %ymm7
10222; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm3
10223; AVX1-NEXT:    vpacksswb %xmm5, %xmm3, %xmm3
10224; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm5
10225; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
10226; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
10227; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm2, %xmm2
10228; AVX1-NEXT:    vmovaps 48(%rbp), %ymm6
10229; AVX1-NEXT:    vpacksswb %xmm5, %xmm2, %xmm2
10230; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
10231; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm3
10232; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
10233; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3
10234; AVX1-NEXT:    vmovaps 16(%rbp), %ymm5
10235; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm1, %xmm1
10236; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
10237; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
10238; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
10239; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm3
10240; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm0, %xmm0
10241; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
10242; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
10243; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
10244; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
10245; AVX1-NEXT:    movq %rbp, %rsp
10246; AVX1-NEXT:    popq %rbp
10247; AVX1-NEXT:    retq
10248;
10249; AVX2-LABEL: test_cmp_v32i64:
10250; AVX2:       # BB#0:
10251; AVX2-NEXT:    pushq %rbp
10252; AVX2-NEXT:    movq %rsp, %rbp
10253; AVX2-NEXT:    andq $-32, %rsp
10254; AVX2-NEXT:    subq $32, %rsp
10255; AVX2-NEXT:    vpcmpgtq 240(%rbp), %ymm7, %ymm7
10256; AVX2-NEXT:    vpcmpgtq 208(%rbp), %ymm6, %ymm6
10257; AVX2-NEXT:    vpacksswb %ymm7, %ymm6, %ymm6
10258; AVX2-NEXT:    vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]
10259; AVX2-NEXT:    vpcmpgtq 176(%rbp), %ymm5, %ymm5
10260; AVX2-NEXT:    vpcmpgtq 144(%rbp), %ymm4, %ymm4
10261; AVX2-NEXT:    vpacksswb %ymm5, %ymm4, %ymm4
10262; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
10263; AVX2-NEXT:    vpacksswb %ymm6, %ymm4, %ymm4
10264; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
10265; AVX2-NEXT:    vpcmpgtq 112(%rbp), %ymm3, %ymm3
10266; AVX2-NEXT:    vpcmpgtq 80(%rbp), %ymm2, %ymm2
10267; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
10268; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
10269; AVX2-NEXT:    vpcmpgtq 48(%rbp), %ymm1, %ymm1
10270; AVX2-NEXT:    vpcmpgtq 16(%rbp), %ymm0, %ymm0
10271; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
10272; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
10273; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
10274; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
10275; AVX2-NEXT:    vpacksswb %ymm4, %ymm0, %ymm0
10276; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
10277; AVX2-NEXT:    movq %rbp, %rsp
10278; AVX2-NEXT:    popq %rbp
10279; AVX2-NEXT:    retq
10280;
10281; AVX512F-LABEL: test_cmp_v32i64:
10282; AVX512F:       # BB#0:
10283; AVX512F-NEXT:    vextracti32x4 $3, %zmm4, %xmm8
10284; AVX512F-NEXT:    vpextrq $1, %xmm8, %rcx
10285; AVX512F-NEXT:    vextracti32x4 $3, %zmm0, %xmm9
10286; AVX512F-NEXT:    vpextrq $1, %xmm9, %rdx
10287; AVX512F-NEXT:    xorl %eax, %eax
10288; AVX512F-NEXT:    cmpq %rcx, %rdx
10289; AVX512F-NEXT:    movq $-1, %rcx
10290; AVX512F-NEXT:    movl $0, %edx
10291; AVX512F-NEXT:    cmovgq %rcx, %rdx
10292; AVX512F-NEXT:    vmovq %rdx, %xmm10
10293; AVX512F-NEXT:    vmovq %xmm8, %rdx
10294; AVX512F-NEXT:    vmovq %xmm9, %rsi
10295; AVX512F-NEXT:    cmpq %rdx, %rsi
10296; AVX512F-NEXT:    movl $0, %edx
10297; AVX512F-NEXT:    cmovgq %rcx, %rdx
10298; AVX512F-NEXT:    vmovq %rdx, %xmm8
10299; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm10[0]
10300; AVX512F-NEXT:    vextracti32x4 $2, %zmm4, %xmm9
10301; AVX512F-NEXT:    vpextrq $1, %xmm9, %rdx
10302; AVX512F-NEXT:    vextracti32x4 $2, %zmm0, %xmm10
10303; AVX512F-NEXT:    vpextrq $1, %xmm10, %rsi
10304; AVX512F-NEXT:    cmpq %rdx, %rsi
10305; AVX512F-NEXT:    movl $0, %edx
10306; AVX512F-NEXT:    cmovgq %rcx, %rdx
10307; AVX512F-NEXT:    vmovq %rdx, %xmm11
10308; AVX512F-NEXT:    vmovq %xmm9, %rdx
10309; AVX512F-NEXT:    vmovq %xmm10, %rsi
10310; AVX512F-NEXT:    cmpq %rdx, %rsi
10311; AVX512F-NEXT:    movl $0, %edx
10312; AVX512F-NEXT:    cmovgq %rcx, %rdx
10313; AVX512F-NEXT:    vmovq %rdx, %xmm9
10314; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10315; AVX512F-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
10316; AVX512F-NEXT:    vextracti32x4 $1, %zmm4, %xmm9
10317; AVX512F-NEXT:    vpextrq $1, %xmm9, %rdx
10318; AVX512F-NEXT:    vextracti32x4 $1, %zmm0, %xmm10
10319; AVX512F-NEXT:    vpextrq $1, %xmm10, %rsi
10320; AVX512F-NEXT:    cmpq %rdx, %rsi
10321; AVX512F-NEXT:    movl $0, %edx
10322; AVX512F-NEXT:    cmovgq %rcx, %rdx
10323; AVX512F-NEXT:    vmovq %rdx, %xmm11
10324; AVX512F-NEXT:    vmovq %xmm9, %rdx
10325; AVX512F-NEXT:    vmovq %xmm10, %rsi
10326; AVX512F-NEXT:    cmpq %rdx, %rsi
10327; AVX512F-NEXT:    movl $0, %edx
10328; AVX512F-NEXT:    cmovgq %rcx, %rdx
10329; AVX512F-NEXT:    vmovq %rdx, %xmm9
10330; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10331; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
10332; AVX512F-NEXT:    vpextrq $1, %xmm0, %rsi
10333; AVX512F-NEXT:    cmpq %rdx, %rsi
10334; AVX512F-NEXT:    movl $0, %edx
10335; AVX512F-NEXT:    cmovgq %rcx, %rdx
10336; AVX512F-NEXT:    vmovq %rdx, %xmm10
10337; AVX512F-NEXT:    vmovq %xmm4, %rdx
10338; AVX512F-NEXT:    vmovq %xmm0, %rsi
10339; AVX512F-NEXT:    cmpq %rdx, %rsi
10340; AVX512F-NEXT:    movl $0, %edx
10341; AVX512F-NEXT:    cmovgq %rcx, %rdx
10342; AVX512F-NEXT:    vmovq %rdx, %xmm0
10343; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10344; AVX512F-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
10345; AVX512F-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
10346; AVX512F-NEXT:    vpmovqd %zmm0, %ymm8
10347; AVX512F-NEXT:    vextracti32x4 $3, %zmm5, %xmm4
10348; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
10349; AVX512F-NEXT:    vextracti32x4 $3, %zmm1, %xmm0
10350; AVX512F-NEXT:    vpextrq $1, %xmm0, %rsi
10351; AVX512F-NEXT:    cmpq %rdx, %rsi
10352; AVX512F-NEXT:    movl $0, %edx
10353; AVX512F-NEXT:    cmovgq %rcx, %rdx
10354; AVX512F-NEXT:    vmovq %rdx, %xmm9
10355; AVX512F-NEXT:    vmovq %xmm4, %rdx
10356; AVX512F-NEXT:    vmovq %xmm0, %rsi
10357; AVX512F-NEXT:    cmpq %rdx, %rsi
10358; AVX512F-NEXT:    movl $0, %edx
10359; AVX512F-NEXT:    cmovgq %rcx, %rdx
10360; AVX512F-NEXT:    vmovq %rdx, %xmm0
10361; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm0[0],xmm9[0]
10362; AVX512F-NEXT:    vextracti32x4 $2, %zmm5, %xmm4
10363; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
10364; AVX512F-NEXT:    vextracti32x4 $2, %zmm1, %xmm0
10365; AVX512F-NEXT:    vpextrq $1, %xmm0, %rsi
10366; AVX512F-NEXT:    cmpq %rdx, %rsi
10367; AVX512F-NEXT:    movl $0, %edx
10368; AVX512F-NEXT:    cmovgq %rcx, %rdx
10369; AVX512F-NEXT:    vmovq %rdx, %xmm10
10370; AVX512F-NEXT:    vmovq %xmm4, %rdx
10371; AVX512F-NEXT:    vmovq %xmm0, %rsi
10372; AVX512F-NEXT:    cmpq %rdx, %rsi
10373; AVX512F-NEXT:    movl $0, %edx
10374; AVX512F-NEXT:    cmovgq %rcx, %rdx
10375; AVX512F-NEXT:    vmovq %rdx, %xmm0
10376; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10377; AVX512F-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
10378; AVX512F-NEXT:    vextracti32x4 $1, %zmm5, %xmm0
10379; AVX512F-NEXT:    vpextrq $1, %xmm0, %rdx
10380; AVX512F-NEXT:    vextracti32x4 $1, %zmm1, %xmm4
10381; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
10382; AVX512F-NEXT:    cmpq %rdx, %rsi
10383; AVX512F-NEXT:    movl $0, %edx
10384; AVX512F-NEXT:    cmovgq %rcx, %rdx
10385; AVX512F-NEXT:    vmovq %rdx, %xmm10
10386; AVX512F-NEXT:    vmovq %xmm0, %rdx
10387; AVX512F-NEXT:    vmovq %xmm4, %rsi
10388; AVX512F-NEXT:    cmpq %rdx, %rsi
10389; AVX512F-NEXT:    movl $0, %edx
10390; AVX512F-NEXT:    cmovgq %rcx, %rdx
10391; AVX512F-NEXT:    vmovq %rdx, %xmm0
10392; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10393; AVX512F-NEXT:    vpextrq $1, %xmm5, %rdx
10394; AVX512F-NEXT:    vpextrq $1, %xmm1, %rsi
10395; AVX512F-NEXT:    cmpq %rdx, %rsi
10396; AVX512F-NEXT:    movl $0, %edx
10397; AVX512F-NEXT:    cmovgq %rcx, %rdx
10398; AVX512F-NEXT:    vmovq %rdx, %xmm4
10399; AVX512F-NEXT:    vmovq %xmm5, %rdx
10400; AVX512F-NEXT:    vmovq %xmm1, %rsi
10401; AVX512F-NEXT:    cmpq %rdx, %rsi
10402; AVX512F-NEXT:    movl $0, %edx
10403; AVX512F-NEXT:    cmovgq %rcx, %rdx
10404; AVX512F-NEXT:    vmovq %rdx, %xmm1
10405; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
10406; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
10407; AVX512F-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
10408; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
10409; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
10410; AVX512F-NEXT:    vpmovdb %zmm0, %xmm8
10411; AVX512F-NEXT:    vextracti32x4 $3, %zmm6, %xmm1
10412; AVX512F-NEXT:    vpextrq $1, %xmm1, %rdx
10413; AVX512F-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
10414; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
10415; AVX512F-NEXT:    cmpq %rdx, %rsi
10416; AVX512F-NEXT:    movl $0, %edx
10417; AVX512F-NEXT:    cmovgq %rcx, %rdx
10418; AVX512F-NEXT:    vmovq %rdx, %xmm5
10419; AVX512F-NEXT:    vmovq %xmm1, %rdx
10420; AVX512F-NEXT:    vmovq %xmm4, %rsi
10421; AVX512F-NEXT:    cmpq %rdx, %rsi
10422; AVX512F-NEXT:    movl $0, %edx
10423; AVX512F-NEXT:    cmovgq %rcx, %rdx
10424; AVX512F-NEXT:    vmovq %rdx, %xmm1
10425; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
10426; AVX512F-NEXT:    vextracti32x4 $2, %zmm6, %xmm4
10427; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdx
10428; AVX512F-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
10429; AVX512F-NEXT:    vpextrq $1, %xmm5, %rsi
10430; AVX512F-NEXT:    cmpq %rdx, %rsi
10431; AVX512F-NEXT:    movl $0, %edx
10432; AVX512F-NEXT:    cmovgq %rcx, %rdx
10433; AVX512F-NEXT:    vmovq %rdx, %xmm0
10434; AVX512F-NEXT:    vmovq %xmm4, %rdx
10435; AVX512F-NEXT:    vmovq %xmm5, %rsi
10436; AVX512F-NEXT:    cmpq %rdx, %rsi
10437; AVX512F-NEXT:    movl $0, %edx
10438; AVX512F-NEXT:    cmovgq %rcx, %rdx
10439; AVX512F-NEXT:    vmovq %rdx, %xmm4
10440; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm4[0],xmm0[0]
10441; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
10442; AVX512F-NEXT:    vextracti32x4 $1, %zmm6, %xmm0
10443; AVX512F-NEXT:    vpextrq $1, %xmm0, %rdx
10444; AVX512F-NEXT:    vextracti32x4 $1, %zmm2, %xmm4
10445; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
10446; AVX512F-NEXT:    cmpq %rdx, %rsi
10447; AVX512F-NEXT:    movl $0, %edx
10448; AVX512F-NEXT:    cmovgq %rcx, %rdx
10449; AVX512F-NEXT:    vmovq %rdx, %xmm5
10450; AVX512F-NEXT:    vmovq %xmm0, %rdx
10451; AVX512F-NEXT:    vmovq %xmm4, %rsi
10452; AVX512F-NEXT:    cmpq %rdx, %rsi
10453; AVX512F-NEXT:    movl $0, %edx
10454; AVX512F-NEXT:    cmovgq %rcx, %rdx
10455; AVX512F-NEXT:    vmovq %rdx, %xmm0
10456; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10457; AVX512F-NEXT:    vpextrq $1, %xmm6, %rdx
10458; AVX512F-NEXT:    vpextrq $1, %xmm2, %rsi
10459; AVX512F-NEXT:    cmpq %rdx, %rsi
10460; AVX512F-NEXT:    movl $0, %edx
10461; AVX512F-NEXT:    cmovgq %rcx, %rdx
10462; AVX512F-NEXT:    vmovq %rdx, %xmm4
10463; AVX512F-NEXT:    vmovq %xmm6, %rdx
10464; AVX512F-NEXT:    vmovq %xmm2, %rsi
10465; AVX512F-NEXT:    cmpq %rdx, %rsi
10466; AVX512F-NEXT:    movl $0, %edx
10467; AVX512F-NEXT:    cmovgq %rcx, %rdx
10468; AVX512F-NEXT:    vmovq %rdx, %xmm2
10469; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
10470; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm0
10471; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
10472; AVX512F-NEXT:    vpmovqd %zmm0, %ymm1
10473; AVX512F-NEXT:    vextracti32x4 $3, %zmm7, %xmm0
10474; AVX512F-NEXT:    vpextrq $1, %xmm0, %rdx
10475; AVX512F-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
10476; AVX512F-NEXT:    vpextrq $1, %xmm2, %rsi
10477; AVX512F-NEXT:    cmpq %rdx, %rsi
10478; AVX512F-NEXT:    movl $0, %edx
10479; AVX512F-NEXT:    cmovgq %rcx, %rdx
10480; AVX512F-NEXT:    vmovq %rdx, %xmm4
10481; AVX512F-NEXT:    vmovq %xmm0, %rdx
10482; AVX512F-NEXT:    vmovq %xmm2, %rsi
10483; AVX512F-NEXT:    cmpq %rdx, %rsi
10484; AVX512F-NEXT:    movl $0, %edx
10485; AVX512F-NEXT:    cmovgq %rcx, %rdx
10486; AVX512F-NEXT:    vmovq %rdx, %xmm0
10487; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
10488; AVX512F-NEXT:    vextracti32x4 $2, %zmm7, %xmm2
10489; AVX512F-NEXT:    vpextrq $1, %xmm2, %rdx
10490; AVX512F-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
10491; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
10492; AVX512F-NEXT:    cmpq %rdx, %rsi
10493; AVX512F-NEXT:    movl $0, %edx
10494; AVX512F-NEXT:    cmovgq %rcx, %rdx
10495; AVX512F-NEXT:    vmovq %rdx, %xmm5
10496; AVX512F-NEXT:    vmovq %xmm2, %rdx
10497; AVX512F-NEXT:    vmovq %xmm4, %rsi
10498; AVX512F-NEXT:    cmpq %rdx, %rsi
10499; AVX512F-NEXT:    movl $0, %edx
10500; AVX512F-NEXT:    cmovgq %rcx, %rdx
10501; AVX512F-NEXT:    vmovq %rdx, %xmm2
10502; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
10503; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm2
10504; AVX512F-NEXT:    vextracti32x4 $1, %zmm7, %xmm0
10505; AVX512F-NEXT:    vpextrq $1, %xmm0, %rdx
10506; AVX512F-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
10507; AVX512F-NEXT:    vpextrq $1, %xmm4, %rsi
10508; AVX512F-NEXT:    cmpq %rdx, %rsi
10509; AVX512F-NEXT:    movl $0, %edx
10510; AVX512F-NEXT:    cmovgq %rcx, %rdx
10511; AVX512F-NEXT:    vmovq %rdx, %xmm5
10512; AVX512F-NEXT:    vmovq %xmm0, %rdx
10513; AVX512F-NEXT:    vmovq %xmm4, %rsi
10514; AVX512F-NEXT:    cmpq %rdx, %rsi
10515; AVX512F-NEXT:    movl $0, %edx
10516; AVX512F-NEXT:    cmovgq %rcx, %rdx
10517; AVX512F-NEXT:    vmovq %rdx, %xmm0
10518; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10519; AVX512F-NEXT:    vpextrq $1, %xmm7, %rdx
10520; AVX512F-NEXT:    vpextrq $1, %xmm3, %rsi
10521; AVX512F-NEXT:    cmpq %rdx, %rsi
10522; AVX512F-NEXT:    movl $0, %edx
10523; AVX512F-NEXT:    cmovgq %rcx, %rdx
10524; AVX512F-NEXT:    vmovq %rdx, %xmm4
10525; AVX512F-NEXT:    vmovq %xmm7, %rdx
10526; AVX512F-NEXT:    vmovq %xmm3, %rsi
10527; AVX512F-NEXT:    cmpq %rdx, %rsi
10528; AVX512F-NEXT:    cmovgq %rcx, %rax
10529; AVX512F-NEXT:    vmovq %rax, %xmm3
10530; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
10531; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm0
10532; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
10533; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
10534; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
10535; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
10536; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
10537; AVX512F-NEXT:    retq
10538;
10539; AVX512DQ-LABEL: test_cmp_v32i64:
10540; AVX512DQ:       # BB#0:
10541; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm4, %xmm8
10542; AVX512DQ-NEXT:    vpextrq $1, %xmm8, %rcx
10543; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm0, %xmm9
10544; AVX512DQ-NEXT:    vpextrq $1, %xmm9, %rdx
10545; AVX512DQ-NEXT:    xorl %eax, %eax
10546; AVX512DQ-NEXT:    cmpq %rcx, %rdx
10547; AVX512DQ-NEXT:    movq $-1, %rcx
10548; AVX512DQ-NEXT:    movl $0, %edx
10549; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10550; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
10551; AVX512DQ-NEXT:    vmovq %xmm8, %rdx
10552; AVX512DQ-NEXT:    vmovq %xmm9, %rsi
10553; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10554; AVX512DQ-NEXT:    movl $0, %edx
10555; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10556; AVX512DQ-NEXT:    vmovq %rdx, %xmm8
10557; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm10[0]
10558; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm4, %xmm9
10559; AVX512DQ-NEXT:    vpextrq $1, %xmm9, %rdx
10560; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm0, %xmm10
10561; AVX512DQ-NEXT:    vpextrq $1, %xmm10, %rsi
10562; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10563; AVX512DQ-NEXT:    movl $0, %edx
10564; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10565; AVX512DQ-NEXT:    vmovq %rdx, %xmm11
10566; AVX512DQ-NEXT:    vmovq %xmm9, %rdx
10567; AVX512DQ-NEXT:    vmovq %xmm10, %rsi
10568; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10569; AVX512DQ-NEXT:    movl $0, %edx
10570; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10571; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
10572; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10573; AVX512DQ-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
10574; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm4, %xmm9
10575; AVX512DQ-NEXT:    vpextrq $1, %xmm9, %rdx
10576; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm0, %xmm10
10577; AVX512DQ-NEXT:    vpextrq $1, %xmm10, %rsi
10578; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10579; AVX512DQ-NEXT:    movl $0, %edx
10580; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10581; AVX512DQ-NEXT:    vmovq %rdx, %xmm11
10582; AVX512DQ-NEXT:    vmovq %xmm9, %rdx
10583; AVX512DQ-NEXT:    vmovq %xmm10, %rsi
10584; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10585; AVX512DQ-NEXT:    movl $0, %edx
10586; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10587; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
10588; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10589; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
10590; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rsi
10591; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10592; AVX512DQ-NEXT:    movl $0, %edx
10593; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10594; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
10595; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
10596; AVX512DQ-NEXT:    vmovq %xmm0, %rsi
10597; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10598; AVX512DQ-NEXT:    movl $0, %edx
10599; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10600; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10601; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10602; AVX512DQ-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
10603; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
10604; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm8
10605; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm5, %xmm4
10606; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
10607; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm1, %xmm0
10608; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rsi
10609; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10610; AVX512DQ-NEXT:    movl $0, %edx
10611; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10612; AVX512DQ-NEXT:    vmovq %rdx, %xmm9
10613; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
10614; AVX512DQ-NEXT:    vmovq %xmm0, %rsi
10615; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10616; AVX512DQ-NEXT:    movl $0, %edx
10617; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10618; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10619; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm0[0],xmm9[0]
10620; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm5, %xmm4
10621; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
10622; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm1, %xmm0
10623; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rsi
10624; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10625; AVX512DQ-NEXT:    movl $0, %edx
10626; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10627; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
10628; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
10629; AVX512DQ-NEXT:    vmovq %xmm0, %rsi
10630; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10631; AVX512DQ-NEXT:    movl $0, %edx
10632; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10633; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10634; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10635; AVX512DQ-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
10636; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm5, %xmm0
10637; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rdx
10638; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm1, %xmm4
10639; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
10640; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10641; AVX512DQ-NEXT:    movl $0, %edx
10642; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10643; AVX512DQ-NEXT:    vmovq %rdx, %xmm10
10644; AVX512DQ-NEXT:    vmovq %xmm0, %rdx
10645; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
10646; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10647; AVX512DQ-NEXT:    movl $0, %edx
10648; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10649; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10650; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10651; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rdx
10652; AVX512DQ-NEXT:    vpextrq $1, %xmm1, %rsi
10653; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10654; AVX512DQ-NEXT:    movl $0, %edx
10655; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10656; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
10657; AVX512DQ-NEXT:    vmovq %xmm5, %rdx
10658; AVX512DQ-NEXT:    vmovq %xmm1, %rsi
10659; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10660; AVX512DQ-NEXT:    movl $0, %edx
10661; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10662; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
10663; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
10664; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
10665; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
10666; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
10667; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm0, %zmm8, %zmm0
10668; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm8
10669; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm6, %xmm1
10670; AVX512DQ-NEXT:    vpextrq $1, %xmm1, %rdx
10671; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm2, %xmm4
10672; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
10673; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10674; AVX512DQ-NEXT:    movl $0, %edx
10675; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10676; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
10677; AVX512DQ-NEXT:    vmovq %xmm1, %rdx
10678; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
10679; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10680; AVX512DQ-NEXT:    movl $0, %edx
10681; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10682; AVX512DQ-NEXT:    vmovq %rdx, %xmm1
10683; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
10684; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm6, %xmm4
10685; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rdx
10686; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm2, %xmm5
10687; AVX512DQ-NEXT:    vpextrq $1, %xmm5, %rsi
10688; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10689; AVX512DQ-NEXT:    movl $0, %edx
10690; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10691; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10692; AVX512DQ-NEXT:    vmovq %xmm4, %rdx
10693; AVX512DQ-NEXT:    vmovq %xmm5, %rsi
10694; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10695; AVX512DQ-NEXT:    movl $0, %edx
10696; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10697; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
10698; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm4[0],xmm0[0]
10699; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
10700; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm6, %xmm0
10701; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rdx
10702; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm2, %xmm4
10703; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
10704; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10705; AVX512DQ-NEXT:    movl $0, %edx
10706; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10707; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
10708; AVX512DQ-NEXT:    vmovq %xmm0, %rdx
10709; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
10710; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10711; AVX512DQ-NEXT:    movl $0, %edx
10712; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10713; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10714; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10715; AVX512DQ-NEXT:    vpextrq $1, %xmm6, %rdx
10716; AVX512DQ-NEXT:    vpextrq $1, %xmm2, %rsi
10717; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10718; AVX512DQ-NEXT:    movl $0, %edx
10719; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10720; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
10721; AVX512DQ-NEXT:    vmovq %xmm6, %rdx
10722; AVX512DQ-NEXT:    vmovq %xmm2, %rsi
10723; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10724; AVX512DQ-NEXT:    movl $0, %edx
10725; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10726; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
10727; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
10728; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm0
10729; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
10730; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm1
10731; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm7, %xmm0
10732; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rdx
10733; AVX512DQ-NEXT:    vextracti64x2 $3, %zmm3, %xmm2
10734; AVX512DQ-NEXT:    vpextrq $1, %xmm2, %rsi
10735; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10736; AVX512DQ-NEXT:    movl $0, %edx
10737; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10738; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
10739; AVX512DQ-NEXT:    vmovq %xmm0, %rdx
10740; AVX512DQ-NEXT:    vmovq %xmm2, %rsi
10741; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10742; AVX512DQ-NEXT:    movl $0, %edx
10743; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10744; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10745; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
10746; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm7, %xmm2
10747; AVX512DQ-NEXT:    vpextrq $1, %xmm2, %rdx
10748; AVX512DQ-NEXT:    vextracti64x2 $2, %zmm3, %xmm4
10749; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
10750; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10751; AVX512DQ-NEXT:    movl $0, %edx
10752; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10753; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
10754; AVX512DQ-NEXT:    vmovq %xmm2, %rdx
10755; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
10756; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10757; AVX512DQ-NEXT:    movl $0, %edx
10758; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10759; AVX512DQ-NEXT:    vmovq %rdx, %xmm2
10760; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
10761; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm2
10762; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm7, %xmm0
10763; AVX512DQ-NEXT:    vpextrq $1, %xmm0, %rdx
10764; AVX512DQ-NEXT:    vextracti64x2 $1, %zmm3, %xmm4
10765; AVX512DQ-NEXT:    vpextrq $1, %xmm4, %rsi
10766; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10767; AVX512DQ-NEXT:    movl $0, %edx
10768; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10769; AVX512DQ-NEXT:    vmovq %rdx, %xmm5
10770; AVX512DQ-NEXT:    vmovq %xmm0, %rdx
10771; AVX512DQ-NEXT:    vmovq %xmm4, %rsi
10772; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10773; AVX512DQ-NEXT:    movl $0, %edx
10774; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10775; AVX512DQ-NEXT:    vmovq %rdx, %xmm0
10776; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10777; AVX512DQ-NEXT:    vpextrq $1, %xmm7, %rdx
10778; AVX512DQ-NEXT:    vpextrq $1, %xmm3, %rsi
10779; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10780; AVX512DQ-NEXT:    movl $0, %edx
10781; AVX512DQ-NEXT:    cmovgq %rcx, %rdx
10782; AVX512DQ-NEXT:    vmovq %rdx, %xmm4
10783; AVX512DQ-NEXT:    vmovq %xmm7, %rdx
10784; AVX512DQ-NEXT:    vmovq %xmm3, %rsi
10785; AVX512DQ-NEXT:    cmpq %rdx, %rsi
10786; AVX512DQ-NEXT:    cmovgq %rcx, %rax
10787; AVX512DQ-NEXT:    vmovq %rax, %xmm3
10788; AVX512DQ-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
10789; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm0
10790; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
10791; AVX512DQ-NEXT:    vpmovqd %zmm0, %ymm0
10792; AVX512DQ-NEXT:    vinserti32x8 $1, %ymm0, %zmm1, %zmm0
10793; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0
10794; AVX512DQ-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
10795; AVX512DQ-NEXT:    retq
10796;
10797; AVX512BW-LABEL: test_cmp_v32i64:
10798; AVX512BW:       # BB#0:
10799; AVX512BW-NEXT:    vextracti32x4 $3, %zmm4, %xmm8
10800; AVX512BW-NEXT:    vpextrq $1, %xmm8, %rcx
10801; AVX512BW-NEXT:    vextracti32x4 $3, %zmm0, %xmm9
10802; AVX512BW-NEXT:    vpextrq $1, %xmm9, %rdx
10803; AVX512BW-NEXT:    xorl %eax, %eax
10804; AVX512BW-NEXT:    cmpq %rcx, %rdx
10805; AVX512BW-NEXT:    movq $-1, %rcx
10806; AVX512BW-NEXT:    movl $0, %edx
10807; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10808; AVX512BW-NEXT:    vmovq %rdx, %xmm10
10809; AVX512BW-NEXT:    vmovq %xmm8, %rdx
10810; AVX512BW-NEXT:    vmovq %xmm9, %rsi
10811; AVX512BW-NEXT:    cmpq %rdx, %rsi
10812; AVX512BW-NEXT:    movl $0, %edx
10813; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10814; AVX512BW-NEXT:    vmovq %rdx, %xmm8
10815; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm10[0]
10816; AVX512BW-NEXT:    vextracti32x4 $2, %zmm4, %xmm9
10817; AVX512BW-NEXT:    vpextrq $1, %xmm9, %rdx
10818; AVX512BW-NEXT:    vextracti32x4 $2, %zmm0, %xmm10
10819; AVX512BW-NEXT:    vpextrq $1, %xmm10, %rsi
10820; AVX512BW-NEXT:    cmpq %rdx, %rsi
10821; AVX512BW-NEXT:    movl $0, %edx
10822; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10823; AVX512BW-NEXT:    vmovq %rdx, %xmm11
10824; AVX512BW-NEXT:    vmovq %xmm9, %rdx
10825; AVX512BW-NEXT:    vmovq %xmm10, %rsi
10826; AVX512BW-NEXT:    cmpq %rdx, %rsi
10827; AVX512BW-NEXT:    movl $0, %edx
10828; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10829; AVX512BW-NEXT:    vmovq %rdx, %xmm9
10830; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10831; AVX512BW-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
10832; AVX512BW-NEXT:    vextracti32x4 $1, %zmm4, %xmm9
10833; AVX512BW-NEXT:    vpextrq $1, %xmm9, %rdx
10834; AVX512BW-NEXT:    vextracti32x4 $1, %zmm0, %xmm10
10835; AVX512BW-NEXT:    vpextrq $1, %xmm10, %rsi
10836; AVX512BW-NEXT:    cmpq %rdx, %rsi
10837; AVX512BW-NEXT:    movl $0, %edx
10838; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10839; AVX512BW-NEXT:    vmovq %rdx, %xmm11
10840; AVX512BW-NEXT:    vmovq %xmm9, %rdx
10841; AVX512BW-NEXT:    vmovq %xmm10, %rsi
10842; AVX512BW-NEXT:    cmpq %rdx, %rsi
10843; AVX512BW-NEXT:    movl $0, %edx
10844; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10845; AVX512BW-NEXT:    vmovq %rdx, %xmm9
10846; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
10847; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
10848; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rsi
10849; AVX512BW-NEXT:    cmpq %rdx, %rsi
10850; AVX512BW-NEXT:    movl $0, %edx
10851; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10852; AVX512BW-NEXT:    vmovq %rdx, %xmm10
10853; AVX512BW-NEXT:    vmovq %xmm4, %rdx
10854; AVX512BW-NEXT:    vmovq %xmm0, %rsi
10855; AVX512BW-NEXT:    cmpq %rdx, %rsi
10856; AVX512BW-NEXT:    movl $0, %edx
10857; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10858; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10859; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10860; AVX512BW-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
10861; AVX512BW-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
10862; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm8
10863; AVX512BW-NEXT:    vextracti32x4 $3, %zmm5, %xmm4
10864; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
10865; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm0
10866; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rsi
10867; AVX512BW-NEXT:    cmpq %rdx, %rsi
10868; AVX512BW-NEXT:    movl $0, %edx
10869; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10870; AVX512BW-NEXT:    vmovq %rdx, %xmm9
10871; AVX512BW-NEXT:    vmovq %xmm4, %rdx
10872; AVX512BW-NEXT:    vmovq %xmm0, %rsi
10873; AVX512BW-NEXT:    cmpq %rdx, %rsi
10874; AVX512BW-NEXT:    movl $0, %edx
10875; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10876; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10877; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm0[0],xmm9[0]
10878; AVX512BW-NEXT:    vextracti32x4 $2, %zmm5, %xmm4
10879; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
10880; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm0
10881; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rsi
10882; AVX512BW-NEXT:    cmpq %rdx, %rsi
10883; AVX512BW-NEXT:    movl $0, %edx
10884; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10885; AVX512BW-NEXT:    vmovq %rdx, %xmm10
10886; AVX512BW-NEXT:    vmovq %xmm4, %rdx
10887; AVX512BW-NEXT:    vmovq %xmm0, %rsi
10888; AVX512BW-NEXT:    cmpq %rdx, %rsi
10889; AVX512BW-NEXT:    movl $0, %edx
10890; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10891; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10892; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10893; AVX512BW-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
10894; AVX512BW-NEXT:    vextracti32x4 $1, %zmm5, %xmm0
10895; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rdx
10896; AVX512BW-NEXT:    vextracti32x4 $1, %zmm1, %xmm4
10897; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
10898; AVX512BW-NEXT:    cmpq %rdx, %rsi
10899; AVX512BW-NEXT:    movl $0, %edx
10900; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10901; AVX512BW-NEXT:    vmovq %rdx, %xmm10
10902; AVX512BW-NEXT:    vmovq %xmm0, %rdx
10903; AVX512BW-NEXT:    vmovq %xmm4, %rsi
10904; AVX512BW-NEXT:    cmpq %rdx, %rsi
10905; AVX512BW-NEXT:    movl $0, %edx
10906; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10907; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10908; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
10909; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rdx
10910; AVX512BW-NEXT:    vpextrq $1, %xmm1, %rsi
10911; AVX512BW-NEXT:    cmpq %rdx, %rsi
10912; AVX512BW-NEXT:    movl $0, %edx
10913; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10914; AVX512BW-NEXT:    vmovq %rdx, %xmm4
10915; AVX512BW-NEXT:    vmovq %xmm5, %rdx
10916; AVX512BW-NEXT:    vmovq %xmm1, %rsi
10917; AVX512BW-NEXT:    cmpq %rdx, %rsi
10918; AVX512BW-NEXT:    movl $0, %edx
10919; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10920; AVX512BW-NEXT:    vmovq %rdx, %xmm1
10921; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
10922; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
10923; AVX512BW-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
10924; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
10925; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
10926; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm8
10927; AVX512BW-NEXT:    vextracti32x4 $3, %zmm6, %xmm1
10928; AVX512BW-NEXT:    vpextrq $1, %xmm1, %rdx
10929; AVX512BW-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
10930; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
10931; AVX512BW-NEXT:    cmpq %rdx, %rsi
10932; AVX512BW-NEXT:    movl $0, %edx
10933; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10934; AVX512BW-NEXT:    vmovq %rdx, %xmm5
10935; AVX512BW-NEXT:    vmovq %xmm1, %rdx
10936; AVX512BW-NEXT:    vmovq %xmm4, %rsi
10937; AVX512BW-NEXT:    cmpq %rdx, %rsi
10938; AVX512BW-NEXT:    movl $0, %edx
10939; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10940; AVX512BW-NEXT:    vmovq %rdx, %xmm1
10941; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
10942; AVX512BW-NEXT:    vextracti32x4 $2, %zmm6, %xmm4
10943; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rdx
10944; AVX512BW-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
10945; AVX512BW-NEXT:    vpextrq $1, %xmm5, %rsi
10946; AVX512BW-NEXT:    cmpq %rdx, %rsi
10947; AVX512BW-NEXT:    movl $0, %edx
10948; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10949; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10950; AVX512BW-NEXT:    vmovq %xmm4, %rdx
10951; AVX512BW-NEXT:    vmovq %xmm5, %rsi
10952; AVX512BW-NEXT:    cmpq %rdx, %rsi
10953; AVX512BW-NEXT:    movl $0, %edx
10954; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10955; AVX512BW-NEXT:    vmovq %rdx, %xmm4
10956; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm4[0],xmm0[0]
10957; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
10958; AVX512BW-NEXT:    vextracti32x4 $1, %zmm6, %xmm0
10959; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rdx
10960; AVX512BW-NEXT:    vextracti32x4 $1, %zmm2, %xmm4
10961; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
10962; AVX512BW-NEXT:    cmpq %rdx, %rsi
10963; AVX512BW-NEXT:    movl $0, %edx
10964; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10965; AVX512BW-NEXT:    vmovq %rdx, %xmm5
10966; AVX512BW-NEXT:    vmovq %xmm0, %rdx
10967; AVX512BW-NEXT:    vmovq %xmm4, %rsi
10968; AVX512BW-NEXT:    cmpq %rdx, %rsi
10969; AVX512BW-NEXT:    movl $0, %edx
10970; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10971; AVX512BW-NEXT:    vmovq %rdx, %xmm0
10972; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
10973; AVX512BW-NEXT:    vpextrq $1, %xmm6, %rdx
10974; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rsi
10975; AVX512BW-NEXT:    cmpq %rdx, %rsi
10976; AVX512BW-NEXT:    movl $0, %edx
10977; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10978; AVX512BW-NEXT:    vmovq %rdx, %xmm4
10979; AVX512BW-NEXT:    vmovq %xmm6, %rdx
10980; AVX512BW-NEXT:    vmovq %xmm2, %rsi
10981; AVX512BW-NEXT:    cmpq %rdx, %rsi
10982; AVX512BW-NEXT:    movl $0, %edx
10983; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10984; AVX512BW-NEXT:    vmovq %rdx, %xmm2
10985; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
10986; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm0
10987; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
10988; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm1
10989; AVX512BW-NEXT:    vextracti32x4 $3, %zmm7, %xmm0
10990; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rdx
10991; AVX512BW-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
10992; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rsi
10993; AVX512BW-NEXT:    cmpq %rdx, %rsi
10994; AVX512BW-NEXT:    movl $0, %edx
10995; AVX512BW-NEXT:    cmovgq %rcx, %rdx
10996; AVX512BW-NEXT:    vmovq %rdx, %xmm4
10997; AVX512BW-NEXT:    vmovq %xmm0, %rdx
10998; AVX512BW-NEXT:    vmovq %xmm2, %rsi
10999; AVX512BW-NEXT:    cmpq %rdx, %rsi
11000; AVX512BW-NEXT:    movl $0, %edx
11001; AVX512BW-NEXT:    cmovgq %rcx, %rdx
11002; AVX512BW-NEXT:    vmovq %rdx, %xmm0
11003; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
11004; AVX512BW-NEXT:    vextracti32x4 $2, %zmm7, %xmm2
11005; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rdx
11006; AVX512BW-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
11007; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
11008; AVX512BW-NEXT:    cmpq %rdx, %rsi
11009; AVX512BW-NEXT:    movl $0, %edx
11010; AVX512BW-NEXT:    cmovgq %rcx, %rdx
11011; AVX512BW-NEXT:    vmovq %rdx, %xmm5
11012; AVX512BW-NEXT:    vmovq %xmm2, %rdx
11013; AVX512BW-NEXT:    vmovq %xmm4, %rsi
11014; AVX512BW-NEXT:    cmpq %rdx, %rsi
11015; AVX512BW-NEXT:    movl $0, %edx
11016; AVX512BW-NEXT:    cmovgq %rcx, %rdx
11017; AVX512BW-NEXT:    vmovq %rdx, %xmm2
11018; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
11019; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm2
11020; AVX512BW-NEXT:    vextracti32x4 $1, %zmm7, %xmm0
11021; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rdx
11022; AVX512BW-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
11023; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rsi
11024; AVX512BW-NEXT:    cmpq %rdx, %rsi
11025; AVX512BW-NEXT:    movl $0, %edx
11026; AVX512BW-NEXT:    cmovgq %rcx, %rdx
11027; AVX512BW-NEXT:    vmovq %rdx, %xmm5
11028; AVX512BW-NEXT:    vmovq %xmm0, %rdx
11029; AVX512BW-NEXT:    vmovq %xmm4, %rsi
11030; AVX512BW-NEXT:    cmpq %rdx, %rsi
11031; AVX512BW-NEXT:    movl $0, %edx
11032; AVX512BW-NEXT:    cmovgq %rcx, %rdx
11033; AVX512BW-NEXT:    vmovq %rdx, %xmm0
11034; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
11035; AVX512BW-NEXT:    vpextrq $1, %xmm7, %rdx
11036; AVX512BW-NEXT:    vpextrq $1, %xmm3, %rsi
11037; AVX512BW-NEXT:    cmpq %rdx, %rsi
11038; AVX512BW-NEXT:    movl $0, %edx
11039; AVX512BW-NEXT:    cmovgq %rcx, %rdx
11040; AVX512BW-NEXT:    vmovq %rdx, %xmm4
11041; AVX512BW-NEXT:    vmovq %xmm7, %rdx
11042; AVX512BW-NEXT:    vmovq %xmm3, %rsi
11043; AVX512BW-NEXT:    cmpq %rdx, %rsi
11044; AVX512BW-NEXT:    cmovgq %rcx, %rax
11045; AVX512BW-NEXT:    vmovq %rax, %xmm3
11046; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
11047; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm0
11048; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
11049; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
11050; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
11051; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
11052; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
11053; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
11054; AVX512BW-NEXT:    retq
11055  %1 = icmp sgt <32 x i64> %a0, %a1
11056  ret <32 x i1> %1
11057}
11058