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
8;
9; 128-bit vector comparisons
10;
11
12define <2 x i1> @test_cmp_v2f64(<2 x double> %a0, <2 x double> %a1) nounwind {
13; SSE-LABEL: test_cmp_v2f64:
14; SSE:       # BB#0:
15; SSE-NEXT:    cmpltpd %xmm0, %xmm1
16; SSE-NEXT:    movapd %xmm1, %xmm0
17; SSE-NEXT:    retq
18;
19; AVX-LABEL: test_cmp_v2f64:
20; AVX:       # BB#0:
21; AVX-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm0
22; AVX-NEXT:    retq
23  %1 = fcmp ogt <2 x double> %a0, %a1
24  ret <2 x i1> %1
25}
26
27define <4 x i1> @test_cmp_v4f32(<4 x float> %a0, <4 x float> %a1) nounwind {
28; SSE-LABEL: test_cmp_v4f32:
29; SSE:       # BB#0:
30; SSE-NEXT:    cmpltps %xmm0, %xmm1
31; SSE-NEXT:    movaps %xmm1, %xmm0
32; SSE-NEXT:    retq
33;
34; AVX-LABEL: test_cmp_v4f32:
35; AVX:       # BB#0:
36; AVX-NEXT:    vcmpltps %xmm0, %xmm1, %xmm0
37; AVX-NEXT:    retq
38  %1 = fcmp ogt <4 x float> %a0, %a1
39  ret <4 x i1> %1
40}
41
42define <2 x i1> @test_cmp_v2i64(<2 x i64> %a0, <2 x i64> %a1) nounwind {
43; SSE2-LABEL: test_cmp_v2i64:
44; SSE2:       # BB#0:
45; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
46; SSE2-NEXT:    pxor %xmm2, %xmm1
47; SSE2-NEXT:    pxor %xmm2, %xmm0
48; SSE2-NEXT:    movdqa %xmm0, %xmm2
49; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
50; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
51; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
52; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
53; SSE2-NEXT:    pand %xmm3, %xmm1
54; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
55; SSE2-NEXT:    por %xmm1, %xmm0
56; SSE2-NEXT:    retq
57;
58; SSE42-LABEL: test_cmp_v2i64:
59; SSE42:       # BB#0:
60; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
61; SSE42-NEXT:    retq
62;
63; AVX-LABEL: test_cmp_v2i64:
64; AVX:       # BB#0:
65; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
66; AVX-NEXT:    retq
67  %1 = icmp sgt <2 x i64> %a0, %a1
68  ret <2 x i1> %1
69}
70
71define <4 x i1> @test_cmp_v4i32(<4 x i32> %a0, <4 x i32> %a1) nounwind {
72; SSE-LABEL: test_cmp_v4i32:
73; SSE:       # BB#0:
74; SSE-NEXT:    pcmpgtd %xmm1, %xmm0
75; SSE-NEXT:    retq
76;
77; AVX-LABEL: test_cmp_v4i32:
78; AVX:       # BB#0:
79; AVX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
80; AVX-NEXT:    retq
81  %1 = icmp sgt <4 x i32> %a0, %a1
82  ret <4 x i1> %1
83}
84
85define <8 x i1> @test_cmp_v8i16(<8 x i16> %a0, <8 x i16> %a1) nounwind {
86; SSE-LABEL: test_cmp_v8i16:
87; SSE:       # BB#0:
88; SSE-NEXT:    pcmpgtw %xmm1, %xmm0
89; SSE-NEXT:    retq
90;
91; AVX-LABEL: test_cmp_v8i16:
92; AVX:       # BB#0:
93; AVX-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
94; AVX-NEXT:    retq
95  %1 = icmp sgt <8 x i16> %a0, %a1
96  ret <8 x i1> %1
97}
98
99define <16 x i1> @test_cmp_v16i8(<16 x i8> %a0, <16 x i8> %a1) nounwind {
100; SSE-LABEL: test_cmp_v16i8:
101; SSE:       # BB#0:
102; SSE-NEXT:    pcmpgtb %xmm1, %xmm0
103; SSE-NEXT:    retq
104;
105; AVX-LABEL: test_cmp_v16i8:
106; AVX:       # BB#0:
107; AVX-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
108; AVX-NEXT:    retq
109  %1 = icmp sgt <16 x i8> %a0, %a1
110  ret <16 x i1> %1
111}
112
113;
114; 256-bit vector comparisons
115;
116
117define <4 x i1> @test_cmp_v4f64(<4 x double> %a0, <4 x double> %a1) nounwind {
118; SSE-LABEL: test_cmp_v4f64:
119; SSE:       # BB#0:
120; SSE-NEXT:    cmpltpd %xmm1, %xmm3
121; SSE-NEXT:    cmpltpd %xmm0, %xmm2
122; SSE-NEXT:    packsswb %xmm3, %xmm2
123; SSE-NEXT:    movdqa %xmm2, %xmm0
124; SSE-NEXT:    retq
125;
126; AVX1-LABEL: test_cmp_v4f64:
127; AVX1:       # BB#0:
128; AVX1-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
129; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
130; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
131; AVX1-NEXT:    vzeroupper
132; AVX1-NEXT:    retq
133;
134; AVX2-LABEL: test_cmp_v4f64:
135; AVX2:       # BB#0:
136; AVX2-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
137; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1
138; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
139; AVX2-NEXT:    vzeroupper
140; AVX2-NEXT:    retq
141;
142; AVX512-LABEL: test_cmp_v4f64:
143; AVX512:       # BB#0:
144; AVX512-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
145; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
146; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
147; AVX512-NEXT:    retq
148  %1 = fcmp ogt <4 x double> %a0, %a1
149  ret <4 x i1> %1
150}
151
152define <8 x i1> @test_cmp_v8f32(<8 x float> %a0, <8 x float> %a1) nounwind {
153; SSE-LABEL: test_cmp_v8f32:
154; SSE:       # BB#0:
155; SSE-NEXT:    cmpltps %xmm1, %xmm3
156; SSE-NEXT:    cmpltps %xmm0, %xmm2
157; SSE-NEXT:    packsswb %xmm3, %xmm2
158; SSE-NEXT:    movdqa %xmm2, %xmm0
159; SSE-NEXT:    retq
160;
161; AVX1-LABEL: test_cmp_v8f32:
162; AVX1:       # BB#0:
163; AVX1-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
164; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
165; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
166; AVX1-NEXT:    vzeroupper
167; AVX1-NEXT:    retq
168;
169; AVX2-LABEL: test_cmp_v8f32:
170; AVX2:       # BB#0:
171; AVX2-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
172; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1
173; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
174; AVX2-NEXT:    vzeroupper
175; AVX2-NEXT:    retq
176;
177; AVX512-LABEL: test_cmp_v8f32:
178; AVX512:       # BB#0:
179; AVX512-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
180; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
181; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
182; AVX512-NEXT:    retq
183  %1 = fcmp ogt <8 x float> %a0, %a1
184  ret <8 x i1> %1
185}
186
187define <4 x i1> @test_cmp_v4i64(<4 x i64> %a0, <4 x i64> %a1) nounwind {
188; SSE2-LABEL: test_cmp_v4i64:
189; SSE2:       # BB#0:
190; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
191; SSE2-NEXT:    pxor %xmm4, %xmm3
192; SSE2-NEXT:    pxor %xmm4, %xmm1
193; SSE2-NEXT:    movdqa %xmm1, %xmm5
194; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
195; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
196; SSE2-NEXT:    pcmpeqd %xmm3, %xmm1
197; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
198; SSE2-NEXT:    pand %xmm6, %xmm1
199; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
200; SSE2-NEXT:    por %xmm1, %xmm3
201; SSE2-NEXT:    pxor %xmm4, %xmm2
202; SSE2-NEXT:    pxor %xmm4, %xmm0
203; SSE2-NEXT:    movdqa %xmm0, %xmm1
204; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
205; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2]
206; SSE2-NEXT:    pcmpeqd %xmm2, %xmm0
207; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
208; SSE2-NEXT:    pand %xmm4, %xmm2
209; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
210; SSE2-NEXT:    por %xmm2, %xmm0
211; SSE2-NEXT:    packsswb %xmm3, %xmm0
212; SSE2-NEXT:    retq
213;
214; SSE42-LABEL: test_cmp_v4i64:
215; SSE42:       # BB#0:
216; SSE42-NEXT:    pcmpgtq %xmm3, %xmm1
217; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0
218; SSE42-NEXT:    packsswb %xmm1, %xmm0
219; SSE42-NEXT:    retq
220;
221; AVX1-LABEL: test_cmp_v4i64:
222; AVX1:       # BB#0:
223; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
224; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
225; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
226; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
227; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
228; AVX1-NEXT:    vzeroupper
229; AVX1-NEXT:    retq
230;
231; AVX2-LABEL: test_cmp_v4i64:
232; AVX2:       # BB#0:
233; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
234; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
235; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
236; AVX2-NEXT:    vzeroupper
237; AVX2-NEXT:    retq
238;
239; AVX512-LABEL: test_cmp_v4i64:
240; AVX512:       # BB#0:
241; AVX512-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
242; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
243; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
244; AVX512-NEXT:    retq
245  %1 = icmp sgt <4 x i64> %a0, %a1
246  ret <4 x i1> %1
247}
248
249define <8 x i1> @test_cmp_v8i32(<8 x i32> %a0, <8 x i32> %a1) nounwind {
250; SSE-LABEL: test_cmp_v8i32:
251; SSE:       # BB#0:
252; SSE-NEXT:    pcmpgtd %xmm3, %xmm1
253; SSE-NEXT:    pcmpgtd %xmm2, %xmm0
254; SSE-NEXT:    packsswb %xmm1, %xmm0
255; SSE-NEXT:    retq
256;
257; AVX1-LABEL: test_cmp_v8i32:
258; AVX1:       # BB#0:
259; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
260; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
261; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm3, %xmm2
262; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
263; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
264; AVX1-NEXT:    vzeroupper
265; AVX1-NEXT:    retq
266;
267; AVX2-LABEL: test_cmp_v8i32:
268; AVX2:       # BB#0:
269; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
270; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
271; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
272; AVX2-NEXT:    vzeroupper
273; AVX2-NEXT:    retq
274;
275; AVX512-LABEL: test_cmp_v8i32:
276; AVX512:       # BB#0:
277; AVX512-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
278; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
279; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
280; AVX512-NEXT:    retq
281  %1 = icmp sgt <8 x i32> %a0, %a1
282  ret <8 x i1> %1
283}
284
285define <16 x i1> @test_cmp_v16i16(<16 x i16> %a0, <16 x i16> %a1) nounwind {
286; SSE-LABEL: test_cmp_v16i16:
287; SSE:       # BB#0:
288; SSE-NEXT:    pcmpgtw %xmm3, %xmm1
289; SSE-NEXT:    pcmpgtw %xmm2, %xmm0
290; SSE-NEXT:    packsswb %xmm1, %xmm0
291; SSE-NEXT:    retq
292;
293; AVX1-LABEL: test_cmp_v16i16:
294; AVX1:       # BB#0:
295; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
296; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
297; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm3, %xmm2
298; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
299; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
300; AVX1-NEXT:    vzeroupper
301; AVX1-NEXT:    retq
302;
303; AVX2-LABEL: test_cmp_v16i16:
304; AVX2:       # BB#0:
305; AVX2-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
306; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
307; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
308; AVX2-NEXT:    vzeroupper
309; AVX2-NEXT:    retq
310;
311; AVX512-LABEL: test_cmp_v16i16:
312; AVX512:       # BB#0:
313; AVX512-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
314; AVX512-NEXT:    vpmovsxwd %ymm0, %zmm0
315; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
316; AVX512-NEXT:    retq
317  %1 = icmp sgt <16 x i16> %a0, %a1
318  ret <16 x i1> %1
319}
320
321define <32 x i1> @test_cmp_v32i8(<32 x i8> %a0, <32 x i8> %a1) nounwind {
322; SSE2-LABEL: test_cmp_v32i8:
323; SSE2:       # BB#0:
324; SSE2-NEXT:    pcmpgtb %xmm2, %xmm0
325; SSE2-NEXT:    pcmpgtb %xmm3, %xmm1
326; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
327; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
328; SSE2-NEXT:    andb $1, %al
329; SSE2-NEXT:    movb %al, 2(%rdi)
330; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
331; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
332; SSE2-NEXT:    andb $1, %al
333; SSE2-NEXT:    movb %al, (%rdi)
334; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
335; SSE2-NEXT:    andb $1, %al
336; SSE2-NEXT:    movb %al, 2(%rdi)
337; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
338; SSE2-NEXT:    andb $1, %al
339; SSE2-NEXT:    movb %al, (%rdi)
340; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
341; SSE2-NEXT:    andb $1, %al
342; SSE2-NEXT:    movb %al, 2(%rdi)
343; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
344; SSE2-NEXT:    andb $1, %al
345; SSE2-NEXT:    movb %al, (%rdi)
346; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
347; SSE2-NEXT:    andb $1, %al
348; SSE2-NEXT:    movb %al, 2(%rdi)
349; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
350; SSE2-NEXT:    andb $1, %al
351; SSE2-NEXT:    movb %al, (%rdi)
352; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
353; SSE2-NEXT:    andb $1, %al
354; SSE2-NEXT:    movb %al, 2(%rdi)
355; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
356; SSE2-NEXT:    andb $1, %al
357; SSE2-NEXT:    movb %al, (%rdi)
358; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
359; SSE2-NEXT:    andb $1, %al
360; SSE2-NEXT:    movb %al, 2(%rdi)
361; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
362; SSE2-NEXT:    andb $1, %al
363; SSE2-NEXT:    movb %al, (%rdi)
364; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
365; SSE2-NEXT:    andb $1, %al
366; SSE2-NEXT:    movb %al, 2(%rdi)
367; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
368; SSE2-NEXT:    andb $1, %al
369; SSE2-NEXT:    movb %al, (%rdi)
370; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
371; SSE2-NEXT:    andb $1, %al
372; SSE2-NEXT:    movb %al, 2(%rdi)
373; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
374; SSE2-NEXT:    andb $1, %al
375; SSE2-NEXT:    movb %al, (%rdi)
376; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
377; SSE2-NEXT:    andb $1, %al
378; SSE2-NEXT:    movb %al, 2(%rdi)
379; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
380; SSE2-NEXT:    andb $1, %al
381; SSE2-NEXT:    movb %al, (%rdi)
382; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
383; SSE2-NEXT:    andb $1, %al
384; SSE2-NEXT:    movb %al, 2(%rdi)
385; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
386; SSE2-NEXT:    andb $1, %al
387; SSE2-NEXT:    movb %al, (%rdi)
388; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
389; SSE2-NEXT:    andb $1, %al
390; SSE2-NEXT:    movb %al, 2(%rdi)
391; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
392; SSE2-NEXT:    andb $1, %al
393; SSE2-NEXT:    movb %al, (%rdi)
394; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
395; SSE2-NEXT:    andb $1, %al
396; SSE2-NEXT:    movb %al, 2(%rdi)
397; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
398; SSE2-NEXT:    andb $1, %al
399; SSE2-NEXT:    movb %al, (%rdi)
400; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
401; SSE2-NEXT:    andb $1, %al
402; SSE2-NEXT:    movb %al, 2(%rdi)
403; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
404; SSE2-NEXT:    andb $1, %al
405; SSE2-NEXT:    movb %al, (%rdi)
406; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
407; SSE2-NEXT:    andb $1, %al
408; SSE2-NEXT:    movb %al, 2(%rdi)
409; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
410; SSE2-NEXT:    andb $1, %al
411; SSE2-NEXT:    movb %al, (%rdi)
412; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
413; SSE2-NEXT:    andb $1, %al
414; SSE2-NEXT:    movb %al, 2(%rdi)
415; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
416; SSE2-NEXT:    andb $1, %al
417; SSE2-NEXT:    movb %al, (%rdi)
418; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
419; SSE2-NEXT:    andb $1, %al
420; SSE2-NEXT:    movb %al, 2(%rdi)
421; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
422; SSE2-NEXT:    andb $1, %al
423; SSE2-NEXT:    movb %al, (%rdi)
424; SSE2-NEXT:    movq %rdi, %rax
425; SSE2-NEXT:    retq
426;
427; SSE42-LABEL: test_cmp_v32i8:
428; SSE42:       # BB#0:
429; SSE42-NEXT:    pcmpgtb %xmm2, %xmm0
430; SSE42-NEXT:    pcmpgtb %xmm3, %xmm1
431; SSE42-NEXT:    pextrb $15, %xmm1, %eax
432; SSE42-NEXT:    andb $1, %al
433; SSE42-NEXT:    movb %al, 2(%rdi)
434; SSE42-NEXT:    pextrb $14, %xmm1, %eax
435; SSE42-NEXT:    andb $1, %al
436; SSE42-NEXT:    movb %al, 2(%rdi)
437; SSE42-NEXT:    pextrb $13, %xmm1, %eax
438; SSE42-NEXT:    andb $1, %al
439; SSE42-NEXT:    movb %al, 2(%rdi)
440; SSE42-NEXT:    pextrb $12, %xmm1, %eax
441; SSE42-NEXT:    andb $1, %al
442; SSE42-NEXT:    movb %al, 2(%rdi)
443; SSE42-NEXT:    pextrb $11, %xmm1, %eax
444; SSE42-NEXT:    andb $1, %al
445; SSE42-NEXT:    movb %al, 2(%rdi)
446; SSE42-NEXT:    pextrb $10, %xmm1, %eax
447; SSE42-NEXT:    andb $1, %al
448; SSE42-NEXT:    movb %al, 2(%rdi)
449; SSE42-NEXT:    pextrb $9, %xmm1, %eax
450; SSE42-NEXT:    andb $1, %al
451; SSE42-NEXT:    movb %al, 2(%rdi)
452; SSE42-NEXT:    pextrb $8, %xmm1, %eax
453; SSE42-NEXT:    andb $1, %al
454; SSE42-NEXT:    movb %al, 2(%rdi)
455; SSE42-NEXT:    pextrb $7, %xmm1, %eax
456; SSE42-NEXT:    andb $1, %al
457; SSE42-NEXT:    movb %al, 2(%rdi)
458; SSE42-NEXT:    pextrb $6, %xmm1, %eax
459; SSE42-NEXT:    andb $1, %al
460; SSE42-NEXT:    movb %al, 2(%rdi)
461; SSE42-NEXT:    pextrb $5, %xmm1, %eax
462; SSE42-NEXT:    andb $1, %al
463; SSE42-NEXT:    movb %al, 2(%rdi)
464; SSE42-NEXT:    pextrb $4, %xmm1, %eax
465; SSE42-NEXT:    andb $1, %al
466; SSE42-NEXT:    movb %al, 2(%rdi)
467; SSE42-NEXT:    pextrb $3, %xmm1, %eax
468; SSE42-NEXT:    andb $1, %al
469; SSE42-NEXT:    movb %al, 2(%rdi)
470; SSE42-NEXT:    pextrb $2, %xmm1, %eax
471; SSE42-NEXT:    andb $1, %al
472; SSE42-NEXT:    movb %al, 2(%rdi)
473; SSE42-NEXT:    pextrb $1, %xmm1, %eax
474; SSE42-NEXT:    andb $1, %al
475; SSE42-NEXT:    movb %al, 2(%rdi)
476; SSE42-NEXT:    pextrb $0, %xmm1, %eax
477; SSE42-NEXT:    andb $1, %al
478; SSE42-NEXT:    movb %al, 2(%rdi)
479; SSE42-NEXT:    pextrb $15, %xmm0, %eax
480; SSE42-NEXT:    andb $1, %al
481; SSE42-NEXT:    movb %al, (%rdi)
482; SSE42-NEXT:    pextrb $14, %xmm0, %eax
483; SSE42-NEXT:    andb $1, %al
484; SSE42-NEXT:    movb %al, (%rdi)
485; SSE42-NEXT:    pextrb $13, %xmm0, %eax
486; SSE42-NEXT:    andb $1, %al
487; SSE42-NEXT:    movb %al, (%rdi)
488; SSE42-NEXT:    pextrb $12, %xmm0, %eax
489; SSE42-NEXT:    andb $1, %al
490; SSE42-NEXT:    movb %al, (%rdi)
491; SSE42-NEXT:    pextrb $11, %xmm0, %eax
492; SSE42-NEXT:    andb $1, %al
493; SSE42-NEXT:    movb %al, (%rdi)
494; SSE42-NEXT:    pextrb $10, %xmm0, %eax
495; SSE42-NEXT:    andb $1, %al
496; SSE42-NEXT:    movb %al, (%rdi)
497; SSE42-NEXT:    pextrb $9, %xmm0, %eax
498; SSE42-NEXT:    andb $1, %al
499; SSE42-NEXT:    movb %al, (%rdi)
500; SSE42-NEXT:    pextrb $8, %xmm0, %eax
501; SSE42-NEXT:    andb $1, %al
502; SSE42-NEXT:    movb %al, (%rdi)
503; SSE42-NEXT:    pextrb $7, %xmm0, %eax
504; SSE42-NEXT:    andb $1, %al
505; SSE42-NEXT:    movb %al, (%rdi)
506; SSE42-NEXT:    pextrb $6, %xmm0, %eax
507; SSE42-NEXT:    andb $1, %al
508; SSE42-NEXT:    movb %al, (%rdi)
509; SSE42-NEXT:    pextrb $5, %xmm0, %eax
510; SSE42-NEXT:    andb $1, %al
511; SSE42-NEXT:    movb %al, (%rdi)
512; SSE42-NEXT:    pextrb $4, %xmm0, %eax
513; SSE42-NEXT:    andb $1, %al
514; SSE42-NEXT:    movb %al, (%rdi)
515; SSE42-NEXT:    pextrb $3, %xmm0, %eax
516; SSE42-NEXT:    andb $1, %al
517; SSE42-NEXT:    movb %al, (%rdi)
518; SSE42-NEXT:    pextrb $2, %xmm0, %eax
519; SSE42-NEXT:    andb $1, %al
520; SSE42-NEXT:    movb %al, (%rdi)
521; SSE42-NEXT:    pextrb $1, %xmm0, %eax
522; SSE42-NEXT:    andb $1, %al
523; SSE42-NEXT:    movb %al, (%rdi)
524; SSE42-NEXT:    pextrb $0, %xmm0, %eax
525; SSE42-NEXT:    andb $1, %al
526; SSE42-NEXT:    movb %al, (%rdi)
527; SSE42-NEXT:    movq %rdi, %rax
528; SSE42-NEXT:    retq
529;
530; AVX1-LABEL: test_cmp_v32i8:
531; AVX1:       # BB#0:
532; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
533; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
534; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm3, %xmm2
535; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
536; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
537; AVX1-NEXT:    retq
538;
539; AVX2-LABEL: test_cmp_v32i8:
540; AVX2:       # BB#0:
541; AVX2-NEXT:    vpcmpgtb %ymm1, %ymm0, %ymm0
542; AVX2-NEXT:    retq
543;
544; AVX512-LABEL: test_cmp_v32i8:
545; AVX512:       # BB#0:
546; AVX512-NEXT:    vpcmpgtb %ymm1, %ymm0, %ymm0
547; AVX512-NEXT:    retq
548  %1 = icmp sgt <32 x i8> %a0, %a1
549  ret <32 x i1> %1
550}
551
552;
553; 512-bit vector comparisons
554;
555
556define <8 x i1> @test_cmp_v8f64(<8 x double> %a0, <8 x double> %a1) nounwind {
557; SSE-LABEL: test_cmp_v8f64:
558; SSE:       # BB#0:
559; SSE-NEXT:    cmpltpd %xmm3, %xmm7
560; SSE-NEXT:    cmpltpd %xmm2, %xmm6
561; SSE-NEXT:    packsswb %xmm7, %xmm6
562; SSE-NEXT:    cmpltpd %xmm1, %xmm5
563; SSE-NEXT:    cmpltpd %xmm0, %xmm4
564; SSE-NEXT:    packsswb %xmm5, %xmm4
565; SSE-NEXT:    packsswb %xmm6, %xmm4
566; SSE-NEXT:    movdqa %xmm4, %xmm0
567; SSE-NEXT:    retq
568;
569; AVX1-LABEL: test_cmp_v8f64:
570; AVX1:       # BB#0:
571; AVX1-NEXT:    vcmpltpd %ymm1, %ymm3, %ymm1
572; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
573; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
574; AVX1-NEXT:    vcmpltpd %ymm0, %ymm2, %ymm0
575; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
576; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
577; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
578; AVX1-NEXT:    vzeroupper
579; AVX1-NEXT:    retq
580;
581; AVX2-LABEL: test_cmp_v8f64:
582; AVX2:       # BB#0:
583; AVX2-NEXT:    vcmpltpd %ymm1, %ymm3, %ymm1
584; AVX2-NEXT:    vcmpltpd %ymm0, %ymm2, %ymm0
585; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
586; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
587; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
588; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
589; AVX2-NEXT:    vzeroupper
590; AVX2-NEXT:    retq
591;
592; AVX512-LABEL: test_cmp_v8f64:
593; AVX512:       # BB#0:
594; AVX512-NEXT:    vcmpltpd %zmm0, %zmm1, %k1
595; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
596; AVX512-NEXT:    vmovdqa64 %zmm0, %zmm0 {%k1} {z}
597; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
598; AVX512-NEXT:    retq
599  %1 = fcmp ogt <8 x double> %a0, %a1
600  ret <8 x i1> %1
601}
602
603define <16 x i1> @test_cmp_v16f32(<16 x float> %a0, <16 x float> %a1) nounwind {
604; SSE-LABEL: test_cmp_v16f32:
605; SSE:       # BB#0:
606; SSE-NEXT:    cmpltps %xmm3, %xmm7
607; SSE-NEXT:    cmpltps %xmm2, %xmm6
608; SSE-NEXT:    packsswb %xmm7, %xmm6
609; SSE-NEXT:    cmpltps %xmm1, %xmm5
610; SSE-NEXT:    cmpltps %xmm0, %xmm4
611; SSE-NEXT:    packsswb %xmm5, %xmm4
612; SSE-NEXT:    packsswb %xmm6, %xmm4
613; SSE-NEXT:    movdqa %xmm4, %xmm0
614; SSE-NEXT:    retq
615;
616; AVX1-LABEL: test_cmp_v16f32:
617; AVX1:       # BB#0:
618; AVX1-NEXT:    vcmpltps %ymm1, %ymm3, %ymm1
619; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
620; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
621; AVX1-NEXT:    vcmpltps %ymm0, %ymm2, %ymm0
622; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
623; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
624; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
625; AVX1-NEXT:    vzeroupper
626; AVX1-NEXT:    retq
627;
628; AVX2-LABEL: test_cmp_v16f32:
629; AVX2:       # BB#0:
630; AVX2-NEXT:    vcmpltps %ymm1, %ymm3, %ymm1
631; AVX2-NEXT:    vcmpltps %ymm0, %ymm2, %ymm0
632; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
633; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
634; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
635; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
636; AVX2-NEXT:    vzeroupper
637; AVX2-NEXT:    retq
638;
639; AVX512-LABEL: test_cmp_v16f32:
640; AVX512:       # BB#0:
641; AVX512-NEXT:    vcmpltps %zmm0, %zmm1, %k1
642; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
643; AVX512-NEXT:    vmovdqa32 %zmm0, %zmm0 {%k1} {z}
644; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
645; AVX512-NEXT:    retq
646  %1 = fcmp ogt <16 x float> %a0, %a1
647  ret <16 x i1> %1
648}
649
650define <8 x i1> @test_cmp_v8i64(<8 x i64> %a0, <8 x i64> %a1) nounwind {
651; SSE2-LABEL: test_cmp_v8i64:
652; SSE2:       # BB#0:
653; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
654; SSE2-NEXT:    pxor %xmm8, %xmm7
655; SSE2-NEXT:    pxor %xmm8, %xmm3
656; SSE2-NEXT:    movdqa %xmm3, %xmm9
657; SSE2-NEXT:    pcmpgtd %xmm7, %xmm9
658; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
659; SSE2-NEXT:    pcmpeqd %xmm7, %xmm3
660; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
661; SSE2-NEXT:    pand %xmm10, %xmm3
662; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
663; SSE2-NEXT:    por %xmm3, %xmm7
664; SSE2-NEXT:    pxor %xmm8, %xmm6
665; SSE2-NEXT:    pxor %xmm8, %xmm2
666; SSE2-NEXT:    movdqa %xmm2, %xmm3
667; SSE2-NEXT:    pcmpgtd %xmm6, %xmm3
668; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm3[0,0,2,2]
669; SSE2-NEXT:    pcmpeqd %xmm6, %xmm2
670; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]
671; SSE2-NEXT:    pand %xmm9, %xmm6
672; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
673; SSE2-NEXT:    por %xmm6, %xmm2
674; SSE2-NEXT:    packsswb %xmm7, %xmm2
675; SSE2-NEXT:    pxor %xmm8, %xmm5
676; SSE2-NEXT:    pxor %xmm8, %xmm1
677; SSE2-NEXT:    movdqa %xmm1, %xmm3
678; SSE2-NEXT:    pcmpgtd %xmm5, %xmm3
679; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
680; SSE2-NEXT:    pcmpeqd %xmm5, %xmm1
681; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
682; SSE2-NEXT:    pand %xmm6, %xmm1
683; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
684; SSE2-NEXT:    por %xmm1, %xmm3
685; SSE2-NEXT:    pxor %xmm8, %xmm4
686; SSE2-NEXT:    pxor %xmm8, %xmm0
687; SSE2-NEXT:    movdqa %xmm0, %xmm1
688; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
689; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
690; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
691; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
692; SSE2-NEXT:    pand %xmm5, %xmm4
693; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
694; SSE2-NEXT:    por %xmm4, %xmm0
695; SSE2-NEXT:    packsswb %xmm3, %xmm0
696; SSE2-NEXT:    packsswb %xmm2, %xmm0
697; SSE2-NEXT:    retq
698;
699; SSE42-LABEL: test_cmp_v8i64:
700; SSE42:       # BB#0:
701; SSE42-NEXT:    pcmpgtq %xmm7, %xmm3
702; SSE42-NEXT:    pcmpgtq %xmm6, %xmm2
703; SSE42-NEXT:    packsswb %xmm3, %xmm2
704; SSE42-NEXT:    pcmpgtq %xmm5, %xmm1
705; SSE42-NEXT:    pcmpgtq %xmm4, %xmm0
706; SSE42-NEXT:    packsswb %xmm1, %xmm0
707; SSE42-NEXT:    packsswb %xmm2, %xmm0
708; SSE42-NEXT:    retq
709;
710; AVX1-LABEL: test_cmp_v8i64:
711; AVX1:       # BB#0:
712; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
713; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
714; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
715; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm1
716; AVX1-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
717; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
718; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
719; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
720; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm0
721; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
722; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
723; AVX1-NEXT:    vzeroupper
724; AVX1-NEXT:    retq
725;
726; AVX2-LABEL: test_cmp_v8i64:
727; AVX2:       # BB#0:
728; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm1
729; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm0
730; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
731; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
732; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
733; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
734; AVX2-NEXT:    vzeroupper
735; AVX2-NEXT:    retq
736;
737; AVX512-LABEL: test_cmp_v8i64:
738; AVX512:       # BB#0:
739; AVX512-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1
740; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
741; AVX512-NEXT:    vmovdqa64 %zmm0, %zmm0 {%k1} {z}
742; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
743; AVX512-NEXT:    retq
744  %1 = icmp sgt <8 x i64> %a0, %a1
745  ret <8 x i1> %1
746}
747
748define <16 x i1> @test_cmp_v16i32(<16 x i32> %a0, <16 x i32> %a1) nounwind {
749; SSE-LABEL: test_cmp_v16i32:
750; SSE:       # BB#0:
751; SSE-NEXT:    pcmpgtd %xmm7, %xmm3
752; SSE-NEXT:    pcmpgtd %xmm6, %xmm2
753; SSE-NEXT:    packsswb %xmm3, %xmm2
754; SSE-NEXT:    pcmpgtd %xmm5, %xmm1
755; SSE-NEXT:    pcmpgtd %xmm4, %xmm0
756; SSE-NEXT:    packsswb %xmm1, %xmm0
757; SSE-NEXT:    packsswb %xmm2, %xmm0
758; SSE-NEXT:    retq
759;
760; AVX1-LABEL: test_cmp_v16i32:
761; AVX1:       # BB#0:
762; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
763; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
764; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm5, %xmm4
765; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm1, %xmm1
766; AVX1-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
767; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
768; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
769; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm4, %xmm3
770; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0
771; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
772; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
773; AVX1-NEXT:    vzeroupper
774; AVX1-NEXT:    retq
775;
776; AVX2-LABEL: test_cmp_v16i32:
777; AVX2:       # BB#0:
778; AVX2-NEXT:    vpcmpgtd %ymm3, %ymm1, %ymm1
779; AVX2-NEXT:    vpcmpgtd %ymm2, %ymm0, %ymm0
780; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
781; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
782; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
783; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
784; AVX2-NEXT:    vzeroupper
785; AVX2-NEXT:    retq
786;
787; AVX512-LABEL: test_cmp_v16i32:
788; AVX512:       # BB#0:
789; AVX512-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1
790; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
791; AVX512-NEXT:    vmovdqa32 %zmm0, %zmm0 {%k1} {z}
792; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
793; AVX512-NEXT:    retq
794  %1 = icmp sgt <16 x i32> %a0, %a1
795  ret <16 x i1> %1
796}
797
798define <32 x i1> @test_cmp_v32i16(<32 x i16> %a0, <32 x i16> %a1) nounwind {
799; SSE2-LABEL: test_cmp_v32i16:
800; SSE2:       # BB#0:
801; SSE2-NEXT:    pcmpgtw %xmm5, %xmm1
802; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255]
803; SSE2-NEXT:    pand %xmm5, %xmm1
804; SSE2-NEXT:    pcmpgtw %xmm4, %xmm0
805; SSE2-NEXT:    pand %xmm5, %xmm0
806; SSE2-NEXT:    packuswb %xmm1, %xmm0
807; SSE2-NEXT:    pcmpgtw %xmm7, %xmm3
808; SSE2-NEXT:    pand %xmm5, %xmm3
809; SSE2-NEXT:    pcmpgtw %xmm6, %xmm2
810; SSE2-NEXT:    pand %xmm5, %xmm2
811; SSE2-NEXT:    packuswb %xmm3, %xmm2
812; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
813; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
814; SSE2-NEXT:    andb $1, %al
815; SSE2-NEXT:    movb %al, 2(%rdi)
816; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
817; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
818; SSE2-NEXT:    andb $1, %al
819; SSE2-NEXT:    movb %al, (%rdi)
820; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
821; SSE2-NEXT:    andb $1, %al
822; SSE2-NEXT:    movb %al, 2(%rdi)
823; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
824; SSE2-NEXT:    andb $1, %al
825; SSE2-NEXT:    movb %al, (%rdi)
826; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
827; SSE2-NEXT:    andb $1, %al
828; SSE2-NEXT:    movb %al, 2(%rdi)
829; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
830; SSE2-NEXT:    andb $1, %al
831; SSE2-NEXT:    movb %al, (%rdi)
832; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
833; SSE2-NEXT:    andb $1, %al
834; SSE2-NEXT:    movb %al, 2(%rdi)
835; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
836; SSE2-NEXT:    andb $1, %al
837; SSE2-NEXT:    movb %al, (%rdi)
838; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
839; SSE2-NEXT:    andb $1, %al
840; SSE2-NEXT:    movb %al, 2(%rdi)
841; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
842; SSE2-NEXT:    andb $1, %al
843; SSE2-NEXT:    movb %al, (%rdi)
844; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
845; SSE2-NEXT:    andb $1, %al
846; SSE2-NEXT:    movb %al, 2(%rdi)
847; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
848; SSE2-NEXT:    andb $1, %al
849; SSE2-NEXT:    movb %al, (%rdi)
850; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
851; SSE2-NEXT:    andb $1, %al
852; SSE2-NEXT:    movb %al, 2(%rdi)
853; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
854; SSE2-NEXT:    andb $1, %al
855; SSE2-NEXT:    movb %al, (%rdi)
856; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
857; SSE2-NEXT:    andb $1, %al
858; SSE2-NEXT:    movb %al, 2(%rdi)
859; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
860; SSE2-NEXT:    andb $1, %al
861; SSE2-NEXT:    movb %al, (%rdi)
862; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
863; SSE2-NEXT:    andb $1, %al
864; SSE2-NEXT:    movb %al, 2(%rdi)
865; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
866; SSE2-NEXT:    andb $1, %al
867; SSE2-NEXT:    movb %al, (%rdi)
868; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
869; SSE2-NEXT:    andb $1, %al
870; SSE2-NEXT:    movb %al, 2(%rdi)
871; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
872; SSE2-NEXT:    andb $1, %al
873; SSE2-NEXT:    movb %al, (%rdi)
874; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
875; SSE2-NEXT:    andb $1, %al
876; SSE2-NEXT:    movb %al, 2(%rdi)
877; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
878; SSE2-NEXT:    andb $1, %al
879; SSE2-NEXT:    movb %al, (%rdi)
880; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
881; SSE2-NEXT:    andb $1, %al
882; SSE2-NEXT:    movb %al, 2(%rdi)
883; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
884; SSE2-NEXT:    andb $1, %al
885; SSE2-NEXT:    movb %al, (%rdi)
886; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
887; SSE2-NEXT:    andb $1, %al
888; SSE2-NEXT:    movb %al, 2(%rdi)
889; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
890; SSE2-NEXT:    andb $1, %al
891; SSE2-NEXT:    movb %al, (%rdi)
892; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
893; SSE2-NEXT:    andb $1, %al
894; SSE2-NEXT:    movb %al, 2(%rdi)
895; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
896; SSE2-NEXT:    andb $1, %al
897; SSE2-NEXT:    movb %al, (%rdi)
898; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
899; SSE2-NEXT:    andb $1, %al
900; SSE2-NEXT:    movb %al, 2(%rdi)
901; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
902; SSE2-NEXT:    andb $1, %al
903; SSE2-NEXT:    movb %al, (%rdi)
904; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
905; SSE2-NEXT:    andb $1, %al
906; SSE2-NEXT:    movb %al, 2(%rdi)
907; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
908; SSE2-NEXT:    andb $1, %al
909; SSE2-NEXT:    movb %al, (%rdi)
910; SSE2-NEXT:    movq %rdi, %rax
911; SSE2-NEXT:    retq
912;
913; SSE42-LABEL: test_cmp_v32i16:
914; SSE42:       # BB#0:
915; SSE42-NEXT:    pcmpgtw %xmm5, %xmm1
916; SSE42-NEXT:    movdqa {{.*#+}} xmm5 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
917; SSE42-NEXT:    pshufb %xmm5, %xmm1
918; SSE42-NEXT:    pcmpgtw %xmm4, %xmm0
919; SSE42-NEXT:    pshufb %xmm5, %xmm0
920; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
921; SSE42-NEXT:    pcmpgtw %xmm7, %xmm3
922; SSE42-NEXT:    pshufb %xmm5, %xmm3
923; SSE42-NEXT:    pcmpgtw %xmm6, %xmm2
924; SSE42-NEXT:    pshufb %xmm5, %xmm2
925; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
926; SSE42-NEXT:    pextrb $15, %xmm2, %eax
927; SSE42-NEXT:    andb $1, %al
928; SSE42-NEXT:    movb %al, 2(%rdi)
929; SSE42-NEXT:    pextrb $14, %xmm2, %eax
930; SSE42-NEXT:    andb $1, %al
931; SSE42-NEXT:    movb %al, 2(%rdi)
932; SSE42-NEXT:    pextrb $13, %xmm2, %eax
933; SSE42-NEXT:    andb $1, %al
934; SSE42-NEXT:    movb %al, 2(%rdi)
935; SSE42-NEXT:    pextrb $12, %xmm2, %eax
936; SSE42-NEXT:    andb $1, %al
937; SSE42-NEXT:    movb %al, 2(%rdi)
938; SSE42-NEXT:    pextrb $11, %xmm2, %eax
939; SSE42-NEXT:    andb $1, %al
940; SSE42-NEXT:    movb %al, 2(%rdi)
941; SSE42-NEXT:    pextrb $10, %xmm2, %eax
942; SSE42-NEXT:    andb $1, %al
943; SSE42-NEXT:    movb %al, 2(%rdi)
944; SSE42-NEXT:    pextrb $9, %xmm2, %eax
945; SSE42-NEXT:    andb $1, %al
946; SSE42-NEXT:    movb %al, 2(%rdi)
947; SSE42-NEXT:    pextrb $8, %xmm2, %eax
948; SSE42-NEXT:    andb $1, %al
949; SSE42-NEXT:    movb %al, 2(%rdi)
950; SSE42-NEXT:    pextrb $7, %xmm2, %eax
951; SSE42-NEXT:    andb $1, %al
952; SSE42-NEXT:    movb %al, 2(%rdi)
953; SSE42-NEXT:    pextrb $6, %xmm2, %eax
954; SSE42-NEXT:    andb $1, %al
955; SSE42-NEXT:    movb %al, 2(%rdi)
956; SSE42-NEXT:    pextrb $5, %xmm2, %eax
957; SSE42-NEXT:    andb $1, %al
958; SSE42-NEXT:    movb %al, 2(%rdi)
959; SSE42-NEXT:    pextrb $4, %xmm2, %eax
960; SSE42-NEXT:    andb $1, %al
961; SSE42-NEXT:    movb %al, 2(%rdi)
962; SSE42-NEXT:    pextrb $3, %xmm2, %eax
963; SSE42-NEXT:    andb $1, %al
964; SSE42-NEXT:    movb %al, 2(%rdi)
965; SSE42-NEXT:    pextrb $2, %xmm2, %eax
966; SSE42-NEXT:    andb $1, %al
967; SSE42-NEXT:    movb %al, 2(%rdi)
968; SSE42-NEXT:    pextrb $1, %xmm2, %eax
969; SSE42-NEXT:    andb $1, %al
970; SSE42-NEXT:    movb %al, 2(%rdi)
971; SSE42-NEXT:    pextrb $0, %xmm2, %eax
972; SSE42-NEXT:    andb $1, %al
973; SSE42-NEXT:    movb %al, 2(%rdi)
974; SSE42-NEXT:    pextrb $15, %xmm0, %eax
975; SSE42-NEXT:    andb $1, %al
976; SSE42-NEXT:    movb %al, (%rdi)
977; SSE42-NEXT:    pextrb $14, %xmm0, %eax
978; SSE42-NEXT:    andb $1, %al
979; SSE42-NEXT:    movb %al, (%rdi)
980; SSE42-NEXT:    pextrb $13, %xmm0, %eax
981; SSE42-NEXT:    andb $1, %al
982; SSE42-NEXT:    movb %al, (%rdi)
983; SSE42-NEXT:    pextrb $12, %xmm0, %eax
984; SSE42-NEXT:    andb $1, %al
985; SSE42-NEXT:    movb %al, (%rdi)
986; SSE42-NEXT:    pextrb $11, %xmm0, %eax
987; SSE42-NEXT:    andb $1, %al
988; SSE42-NEXT:    movb %al, (%rdi)
989; SSE42-NEXT:    pextrb $10, %xmm0, %eax
990; SSE42-NEXT:    andb $1, %al
991; SSE42-NEXT:    movb %al, (%rdi)
992; SSE42-NEXT:    pextrb $9, %xmm0, %eax
993; SSE42-NEXT:    andb $1, %al
994; SSE42-NEXT:    movb %al, (%rdi)
995; SSE42-NEXT:    pextrb $8, %xmm0, %eax
996; SSE42-NEXT:    andb $1, %al
997; SSE42-NEXT:    movb %al, (%rdi)
998; SSE42-NEXT:    pextrb $7, %xmm0, %eax
999; SSE42-NEXT:    andb $1, %al
1000; SSE42-NEXT:    movb %al, (%rdi)
1001; SSE42-NEXT:    pextrb $6, %xmm0, %eax
1002; SSE42-NEXT:    andb $1, %al
1003; SSE42-NEXT:    movb %al, (%rdi)
1004; SSE42-NEXT:    pextrb $5, %xmm0, %eax
1005; SSE42-NEXT:    andb $1, %al
1006; SSE42-NEXT:    movb %al, (%rdi)
1007; SSE42-NEXT:    pextrb $4, %xmm0, %eax
1008; SSE42-NEXT:    andb $1, %al
1009; SSE42-NEXT:    movb %al, (%rdi)
1010; SSE42-NEXT:    pextrb $3, %xmm0, %eax
1011; SSE42-NEXT:    andb $1, %al
1012; SSE42-NEXT:    movb %al, (%rdi)
1013; SSE42-NEXT:    pextrb $2, %xmm0, %eax
1014; SSE42-NEXT:    andb $1, %al
1015; SSE42-NEXT:    movb %al, (%rdi)
1016; SSE42-NEXT:    pextrb $1, %xmm0, %eax
1017; SSE42-NEXT:    andb $1, %al
1018; SSE42-NEXT:    movb %al, (%rdi)
1019; SSE42-NEXT:    pextrb $0, %xmm0, %eax
1020; SSE42-NEXT:    andb $1, %al
1021; SSE42-NEXT:    movb %al, (%rdi)
1022; SSE42-NEXT:    movq %rdi, %rax
1023; SSE42-NEXT:    retq
1024;
1025; AVX1-LABEL: test_cmp_v32i16:
1026; AVX1:       # BB#0:
1027; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1028; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
1029; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm5, %xmm4
1030; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm1, %xmm1
1031; AVX1-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
1032; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
1033; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
1034; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm4, %xmm3
1035; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm0, %xmm0
1036; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
1037; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1038; AVX1-NEXT:    retq
1039;
1040; AVX2-LABEL: test_cmp_v32i16:
1041; AVX2:       # BB#0:
1042; AVX2-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1043; AVX2-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1044; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
1045; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1046; AVX2-NEXT:    retq
1047;
1048; AVX512-LABEL: test_cmp_v32i16:
1049; AVX512:       # BB#0:
1050; AVX512-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1051; AVX512-NEXT:    vpmovsxwd %ymm0, %zmm0
1052; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
1053; AVX512-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1054; AVX512-NEXT:    vpmovsxwd %ymm1, %zmm1
1055; AVX512-NEXT:    vpmovdb %zmm1, %xmm1
1056; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1057; AVX512-NEXT:    retq
1058  %1 = icmp sgt <32 x i16> %a0, %a1
1059  ret <32 x i1> %1
1060}
1061
1062define <64 x i1> @test_cmp_v64i8(<64 x i8> %a0, <64 x i8> %a1) nounwind {
1063; SSE2-LABEL: test_cmp_v64i8:
1064; SSE2:       # BB#0:
1065; SSE2-NEXT:    pcmpgtb %xmm4, %xmm0
1066; SSE2-NEXT:    pcmpgtb %xmm5, %xmm1
1067; SSE2-NEXT:    pcmpgtb %xmm6, %xmm2
1068; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
1069; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
1070; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1071; SSE2-NEXT:    andb $1, %al
1072; SSE2-NEXT:    movb %al, 6(%rdi)
1073; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
1074; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1075; SSE2-NEXT:    andb $1, %al
1076; SSE2-NEXT:    movb %al, 4(%rdi)
1077; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
1078; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1079; SSE2-NEXT:    andb $1, %al
1080; SSE2-NEXT:    movb %al, 2(%rdi)
1081; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
1082; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1083; SSE2-NEXT:    andb $1, %al
1084; SSE2-NEXT:    movb %al, (%rdi)
1085; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1086; SSE2-NEXT:    andb $1, %al
1087; SSE2-NEXT:    movb %al, 6(%rdi)
1088; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1089; SSE2-NEXT:    andb $1, %al
1090; SSE2-NEXT:    movb %al, 4(%rdi)
1091; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1092; SSE2-NEXT:    andb $1, %al
1093; SSE2-NEXT:    movb %al, 2(%rdi)
1094; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1095; SSE2-NEXT:    andb $1, %al
1096; SSE2-NEXT:    movb %al, (%rdi)
1097; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1098; SSE2-NEXT:    andb $1, %al
1099; SSE2-NEXT:    movb %al, 6(%rdi)
1100; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1101; SSE2-NEXT:    andb $1, %al
1102; SSE2-NEXT:    movb %al, 4(%rdi)
1103; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1104; SSE2-NEXT:    andb $1, %al
1105; SSE2-NEXT:    movb %al, 2(%rdi)
1106; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1107; SSE2-NEXT:    andb $1, %al
1108; SSE2-NEXT:    movb %al, (%rdi)
1109; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1110; SSE2-NEXT:    andb $1, %al
1111; SSE2-NEXT:    movb %al, 6(%rdi)
1112; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1113; SSE2-NEXT:    andb $1, %al
1114; SSE2-NEXT:    movb %al, 4(%rdi)
1115; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1116; SSE2-NEXT:    andb $1, %al
1117; SSE2-NEXT:    movb %al, 2(%rdi)
1118; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1119; SSE2-NEXT:    andb $1, %al
1120; SSE2-NEXT:    movb %al, (%rdi)
1121; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1122; SSE2-NEXT:    andb $1, %al
1123; SSE2-NEXT:    movb %al, 6(%rdi)
1124; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1125; SSE2-NEXT:    andb $1, %al
1126; SSE2-NEXT:    movb %al, 4(%rdi)
1127; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1128; SSE2-NEXT:    andb $1, %al
1129; SSE2-NEXT:    movb %al, 2(%rdi)
1130; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1131; SSE2-NEXT:    andb $1, %al
1132; SSE2-NEXT:    movb %al, (%rdi)
1133; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1134; SSE2-NEXT:    andb $1, %al
1135; SSE2-NEXT:    movb %al, 6(%rdi)
1136; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1137; SSE2-NEXT:    andb $1, %al
1138; SSE2-NEXT:    movb %al, 4(%rdi)
1139; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1140; SSE2-NEXT:    andb $1, %al
1141; SSE2-NEXT:    movb %al, 2(%rdi)
1142; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1143; SSE2-NEXT:    andb $1, %al
1144; SSE2-NEXT:    movb %al, (%rdi)
1145; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1146; SSE2-NEXT:    andb $1, %al
1147; SSE2-NEXT:    movb %al, 6(%rdi)
1148; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1149; SSE2-NEXT:    andb $1, %al
1150; SSE2-NEXT:    movb %al, 4(%rdi)
1151; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1152; SSE2-NEXT:    andb $1, %al
1153; SSE2-NEXT:    movb %al, 2(%rdi)
1154; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1155; SSE2-NEXT:    andb $1, %al
1156; SSE2-NEXT:    movb %al, (%rdi)
1157; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1158; SSE2-NEXT:    andb $1, %al
1159; SSE2-NEXT:    movb %al, 6(%rdi)
1160; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1161; SSE2-NEXT:    andb $1, %al
1162; SSE2-NEXT:    movb %al, 4(%rdi)
1163; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1164; SSE2-NEXT:    andb $1, %al
1165; SSE2-NEXT:    movb %al, 2(%rdi)
1166; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1167; SSE2-NEXT:    andb $1, %al
1168; SSE2-NEXT:    movb %al, (%rdi)
1169; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1170; SSE2-NEXT:    andb $1, %al
1171; SSE2-NEXT:    movb %al, 6(%rdi)
1172; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1173; SSE2-NEXT:    andb $1, %al
1174; SSE2-NEXT:    movb %al, 4(%rdi)
1175; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1176; SSE2-NEXT:    andb $1, %al
1177; SSE2-NEXT:    movb %al, 2(%rdi)
1178; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1179; SSE2-NEXT:    andb $1, %al
1180; SSE2-NEXT:    movb %al, (%rdi)
1181; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1182; SSE2-NEXT:    andb $1, %al
1183; SSE2-NEXT:    movb %al, 6(%rdi)
1184; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1185; SSE2-NEXT:    andb $1, %al
1186; SSE2-NEXT:    movb %al, 4(%rdi)
1187; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1188; SSE2-NEXT:    andb $1, %al
1189; SSE2-NEXT:    movb %al, 2(%rdi)
1190; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1191; SSE2-NEXT:    andb $1, %al
1192; SSE2-NEXT:    movb %al, (%rdi)
1193; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1194; SSE2-NEXT:    andb $1, %al
1195; SSE2-NEXT:    movb %al, 6(%rdi)
1196; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1197; SSE2-NEXT:    andb $1, %al
1198; SSE2-NEXT:    movb %al, 4(%rdi)
1199; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1200; SSE2-NEXT:    andb $1, %al
1201; SSE2-NEXT:    movb %al, 2(%rdi)
1202; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1203; SSE2-NEXT:    andb $1, %al
1204; SSE2-NEXT:    movb %al, (%rdi)
1205; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1206; SSE2-NEXT:    andb $1, %al
1207; SSE2-NEXT:    movb %al, 6(%rdi)
1208; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1209; SSE2-NEXT:    andb $1, %al
1210; SSE2-NEXT:    movb %al, 4(%rdi)
1211; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1212; SSE2-NEXT:    andb $1, %al
1213; SSE2-NEXT:    movb %al, 2(%rdi)
1214; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1215; SSE2-NEXT:    andb $1, %al
1216; SSE2-NEXT:    movb %al, (%rdi)
1217; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1218; SSE2-NEXT:    andb $1, %al
1219; SSE2-NEXT:    movb %al, 6(%rdi)
1220; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1221; SSE2-NEXT:    andb $1, %al
1222; SSE2-NEXT:    movb %al, 4(%rdi)
1223; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1224; SSE2-NEXT:    andb $1, %al
1225; SSE2-NEXT:    movb %al, 2(%rdi)
1226; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1227; SSE2-NEXT:    andb $1, %al
1228; SSE2-NEXT:    movb %al, (%rdi)
1229; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1230; SSE2-NEXT:    andb $1, %al
1231; SSE2-NEXT:    movb %al, 6(%rdi)
1232; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1233; SSE2-NEXT:    andb $1, %al
1234; SSE2-NEXT:    movb %al, 4(%rdi)
1235; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1236; SSE2-NEXT:    andb $1, %al
1237; SSE2-NEXT:    movb %al, 2(%rdi)
1238; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1239; SSE2-NEXT:    andb $1, %al
1240; SSE2-NEXT:    movb %al, (%rdi)
1241; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1242; SSE2-NEXT:    andb $1, %al
1243; SSE2-NEXT:    movb %al, 6(%rdi)
1244; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1245; SSE2-NEXT:    andb $1, %al
1246; SSE2-NEXT:    movb %al, 4(%rdi)
1247; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1248; SSE2-NEXT:    andb $1, %al
1249; SSE2-NEXT:    movb %al, 2(%rdi)
1250; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1251; SSE2-NEXT:    andb $1, %al
1252; SSE2-NEXT:    movb %al, (%rdi)
1253; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1254; SSE2-NEXT:    andb $1, %al
1255; SSE2-NEXT:    movb %al, 6(%rdi)
1256; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1257; SSE2-NEXT:    andb $1, %al
1258; SSE2-NEXT:    movb %al, 4(%rdi)
1259; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1260; SSE2-NEXT:    andb $1, %al
1261; SSE2-NEXT:    movb %al, 2(%rdi)
1262; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1263; SSE2-NEXT:    andb $1, %al
1264; SSE2-NEXT:    movb %al, (%rdi)
1265; SSE2-NEXT:    movq %rdi, %rax
1266; SSE2-NEXT:    retq
1267;
1268; SSE42-LABEL: test_cmp_v64i8:
1269; SSE42:       # BB#0:
1270; SSE42-NEXT:    pcmpgtb %xmm4, %xmm0
1271; SSE42-NEXT:    pcmpgtb %xmm5, %xmm1
1272; SSE42-NEXT:    pcmpgtb %xmm6, %xmm2
1273; SSE42-NEXT:    pcmpgtb %xmm7, %xmm3
1274; SSE42-NEXT:    pextrb $15, %xmm3, %eax
1275; SSE42-NEXT:    andb $1, %al
1276; SSE42-NEXT:    movb %al, 6(%rdi)
1277; SSE42-NEXT:    pextrb $14, %xmm3, %eax
1278; SSE42-NEXT:    andb $1, %al
1279; SSE42-NEXT:    movb %al, 6(%rdi)
1280; SSE42-NEXT:    pextrb $13, %xmm3, %eax
1281; SSE42-NEXT:    andb $1, %al
1282; SSE42-NEXT:    movb %al, 6(%rdi)
1283; SSE42-NEXT:    pextrb $12, %xmm3, %eax
1284; SSE42-NEXT:    andb $1, %al
1285; SSE42-NEXT:    movb %al, 6(%rdi)
1286; SSE42-NEXT:    pextrb $11, %xmm3, %eax
1287; SSE42-NEXT:    andb $1, %al
1288; SSE42-NEXT:    movb %al, 6(%rdi)
1289; SSE42-NEXT:    pextrb $10, %xmm3, %eax
1290; SSE42-NEXT:    andb $1, %al
1291; SSE42-NEXT:    movb %al, 6(%rdi)
1292; SSE42-NEXT:    pextrb $9, %xmm3, %eax
1293; SSE42-NEXT:    andb $1, %al
1294; SSE42-NEXT:    movb %al, 6(%rdi)
1295; SSE42-NEXT:    pextrb $8, %xmm3, %eax
1296; SSE42-NEXT:    andb $1, %al
1297; SSE42-NEXT:    movb %al, 6(%rdi)
1298; SSE42-NEXT:    pextrb $7, %xmm3, %eax
1299; SSE42-NEXT:    andb $1, %al
1300; SSE42-NEXT:    movb %al, 6(%rdi)
1301; SSE42-NEXT:    pextrb $6, %xmm3, %eax
1302; SSE42-NEXT:    andb $1, %al
1303; SSE42-NEXT:    movb %al, 6(%rdi)
1304; SSE42-NEXT:    pextrb $5, %xmm3, %eax
1305; SSE42-NEXT:    andb $1, %al
1306; SSE42-NEXT:    movb %al, 6(%rdi)
1307; SSE42-NEXT:    pextrb $4, %xmm3, %eax
1308; SSE42-NEXT:    andb $1, %al
1309; SSE42-NEXT:    movb %al, 6(%rdi)
1310; SSE42-NEXT:    pextrb $3, %xmm3, %eax
1311; SSE42-NEXT:    andb $1, %al
1312; SSE42-NEXT:    movb %al, 6(%rdi)
1313; SSE42-NEXT:    pextrb $2, %xmm3, %eax
1314; SSE42-NEXT:    andb $1, %al
1315; SSE42-NEXT:    movb %al, 6(%rdi)
1316; SSE42-NEXT:    pextrb $1, %xmm3, %eax
1317; SSE42-NEXT:    andb $1, %al
1318; SSE42-NEXT:    movb %al, 6(%rdi)
1319; SSE42-NEXT:    pextrb $0, %xmm3, %eax
1320; SSE42-NEXT:    andb $1, %al
1321; SSE42-NEXT:    movb %al, 6(%rdi)
1322; SSE42-NEXT:    pextrb $15, %xmm2, %eax
1323; SSE42-NEXT:    andb $1, %al
1324; SSE42-NEXT:    movb %al, 4(%rdi)
1325; SSE42-NEXT:    pextrb $14, %xmm2, %eax
1326; SSE42-NEXT:    andb $1, %al
1327; SSE42-NEXT:    movb %al, 4(%rdi)
1328; SSE42-NEXT:    pextrb $13, %xmm2, %eax
1329; SSE42-NEXT:    andb $1, %al
1330; SSE42-NEXT:    movb %al, 4(%rdi)
1331; SSE42-NEXT:    pextrb $12, %xmm2, %eax
1332; SSE42-NEXT:    andb $1, %al
1333; SSE42-NEXT:    movb %al, 4(%rdi)
1334; SSE42-NEXT:    pextrb $11, %xmm2, %eax
1335; SSE42-NEXT:    andb $1, %al
1336; SSE42-NEXT:    movb %al, 4(%rdi)
1337; SSE42-NEXT:    pextrb $10, %xmm2, %eax
1338; SSE42-NEXT:    andb $1, %al
1339; SSE42-NEXT:    movb %al, 4(%rdi)
1340; SSE42-NEXT:    pextrb $9, %xmm2, %eax
1341; SSE42-NEXT:    andb $1, %al
1342; SSE42-NEXT:    movb %al, 4(%rdi)
1343; SSE42-NEXT:    pextrb $8, %xmm2, %eax
1344; SSE42-NEXT:    andb $1, %al
1345; SSE42-NEXT:    movb %al, 4(%rdi)
1346; SSE42-NEXT:    pextrb $7, %xmm2, %eax
1347; SSE42-NEXT:    andb $1, %al
1348; SSE42-NEXT:    movb %al, 4(%rdi)
1349; SSE42-NEXT:    pextrb $6, %xmm2, %eax
1350; SSE42-NEXT:    andb $1, %al
1351; SSE42-NEXT:    movb %al, 4(%rdi)
1352; SSE42-NEXT:    pextrb $5, %xmm2, %eax
1353; SSE42-NEXT:    andb $1, %al
1354; SSE42-NEXT:    movb %al, 4(%rdi)
1355; SSE42-NEXT:    pextrb $4, %xmm2, %eax
1356; SSE42-NEXT:    andb $1, %al
1357; SSE42-NEXT:    movb %al, 4(%rdi)
1358; SSE42-NEXT:    pextrb $3, %xmm2, %eax
1359; SSE42-NEXT:    andb $1, %al
1360; SSE42-NEXT:    movb %al, 4(%rdi)
1361; SSE42-NEXT:    pextrb $2, %xmm2, %eax
1362; SSE42-NEXT:    andb $1, %al
1363; SSE42-NEXT:    movb %al, 4(%rdi)
1364; SSE42-NEXT:    pextrb $1, %xmm2, %eax
1365; SSE42-NEXT:    andb $1, %al
1366; SSE42-NEXT:    movb %al, 4(%rdi)
1367; SSE42-NEXT:    pextrb $0, %xmm2, %eax
1368; SSE42-NEXT:    andb $1, %al
1369; SSE42-NEXT:    movb %al, 4(%rdi)
1370; SSE42-NEXT:    pextrb $15, %xmm1, %eax
1371; SSE42-NEXT:    andb $1, %al
1372; SSE42-NEXT:    movb %al, 2(%rdi)
1373; SSE42-NEXT:    pextrb $14, %xmm1, %eax
1374; SSE42-NEXT:    andb $1, %al
1375; SSE42-NEXT:    movb %al, 2(%rdi)
1376; SSE42-NEXT:    pextrb $13, %xmm1, %eax
1377; SSE42-NEXT:    andb $1, %al
1378; SSE42-NEXT:    movb %al, 2(%rdi)
1379; SSE42-NEXT:    pextrb $12, %xmm1, %eax
1380; SSE42-NEXT:    andb $1, %al
1381; SSE42-NEXT:    movb %al, 2(%rdi)
1382; SSE42-NEXT:    pextrb $11, %xmm1, %eax
1383; SSE42-NEXT:    andb $1, %al
1384; SSE42-NEXT:    movb %al, 2(%rdi)
1385; SSE42-NEXT:    pextrb $10, %xmm1, %eax
1386; SSE42-NEXT:    andb $1, %al
1387; SSE42-NEXT:    movb %al, 2(%rdi)
1388; SSE42-NEXT:    pextrb $9, %xmm1, %eax
1389; SSE42-NEXT:    andb $1, %al
1390; SSE42-NEXT:    movb %al, 2(%rdi)
1391; SSE42-NEXT:    pextrb $8, %xmm1, %eax
1392; SSE42-NEXT:    andb $1, %al
1393; SSE42-NEXT:    movb %al, 2(%rdi)
1394; SSE42-NEXT:    pextrb $7, %xmm1, %eax
1395; SSE42-NEXT:    andb $1, %al
1396; SSE42-NEXT:    movb %al, 2(%rdi)
1397; SSE42-NEXT:    pextrb $6, %xmm1, %eax
1398; SSE42-NEXT:    andb $1, %al
1399; SSE42-NEXT:    movb %al, 2(%rdi)
1400; SSE42-NEXT:    pextrb $5, %xmm1, %eax
1401; SSE42-NEXT:    andb $1, %al
1402; SSE42-NEXT:    movb %al, 2(%rdi)
1403; SSE42-NEXT:    pextrb $4, %xmm1, %eax
1404; SSE42-NEXT:    andb $1, %al
1405; SSE42-NEXT:    movb %al, 2(%rdi)
1406; SSE42-NEXT:    pextrb $3, %xmm1, %eax
1407; SSE42-NEXT:    andb $1, %al
1408; SSE42-NEXT:    movb %al, 2(%rdi)
1409; SSE42-NEXT:    pextrb $2, %xmm1, %eax
1410; SSE42-NEXT:    andb $1, %al
1411; SSE42-NEXT:    movb %al, 2(%rdi)
1412; SSE42-NEXT:    pextrb $1, %xmm1, %eax
1413; SSE42-NEXT:    andb $1, %al
1414; SSE42-NEXT:    movb %al, 2(%rdi)
1415; SSE42-NEXT:    pextrb $0, %xmm1, %eax
1416; SSE42-NEXT:    andb $1, %al
1417; SSE42-NEXT:    movb %al, 2(%rdi)
1418; SSE42-NEXT:    pextrb $15, %xmm0, %eax
1419; SSE42-NEXT:    andb $1, %al
1420; SSE42-NEXT:    movb %al, (%rdi)
1421; SSE42-NEXT:    pextrb $14, %xmm0, %eax
1422; SSE42-NEXT:    andb $1, %al
1423; SSE42-NEXT:    movb %al, (%rdi)
1424; SSE42-NEXT:    pextrb $13, %xmm0, %eax
1425; SSE42-NEXT:    andb $1, %al
1426; SSE42-NEXT:    movb %al, (%rdi)
1427; SSE42-NEXT:    pextrb $12, %xmm0, %eax
1428; SSE42-NEXT:    andb $1, %al
1429; SSE42-NEXT:    movb %al, (%rdi)
1430; SSE42-NEXT:    pextrb $11, %xmm0, %eax
1431; SSE42-NEXT:    andb $1, %al
1432; SSE42-NEXT:    movb %al, (%rdi)
1433; SSE42-NEXT:    pextrb $10, %xmm0, %eax
1434; SSE42-NEXT:    andb $1, %al
1435; SSE42-NEXT:    movb %al, (%rdi)
1436; SSE42-NEXT:    pextrb $9, %xmm0, %eax
1437; SSE42-NEXT:    andb $1, %al
1438; SSE42-NEXT:    movb %al, (%rdi)
1439; SSE42-NEXT:    pextrb $8, %xmm0, %eax
1440; SSE42-NEXT:    andb $1, %al
1441; SSE42-NEXT:    movb %al, (%rdi)
1442; SSE42-NEXT:    pextrb $7, %xmm0, %eax
1443; SSE42-NEXT:    andb $1, %al
1444; SSE42-NEXT:    movb %al, (%rdi)
1445; SSE42-NEXT:    pextrb $6, %xmm0, %eax
1446; SSE42-NEXT:    andb $1, %al
1447; SSE42-NEXT:    movb %al, (%rdi)
1448; SSE42-NEXT:    pextrb $5, %xmm0, %eax
1449; SSE42-NEXT:    andb $1, %al
1450; SSE42-NEXT:    movb %al, (%rdi)
1451; SSE42-NEXT:    pextrb $4, %xmm0, %eax
1452; SSE42-NEXT:    andb $1, %al
1453; SSE42-NEXT:    movb %al, (%rdi)
1454; SSE42-NEXT:    pextrb $3, %xmm0, %eax
1455; SSE42-NEXT:    andb $1, %al
1456; SSE42-NEXT:    movb %al, (%rdi)
1457; SSE42-NEXT:    pextrb $2, %xmm0, %eax
1458; SSE42-NEXT:    andb $1, %al
1459; SSE42-NEXT:    movb %al, (%rdi)
1460; SSE42-NEXT:    pextrb $1, %xmm0, %eax
1461; SSE42-NEXT:    andb $1, %al
1462; SSE42-NEXT:    movb %al, (%rdi)
1463; SSE42-NEXT:    pextrb $0, %xmm0, %eax
1464; SSE42-NEXT:    andb $1, %al
1465; SSE42-NEXT:    movb %al, (%rdi)
1466; SSE42-NEXT:    movq %rdi, %rax
1467; SSE42-NEXT:    retq
1468;
1469; AVX1-LABEL: test_cmp_v64i8:
1470; AVX1:       # BB#0:
1471; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm4
1472; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
1473; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1474; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm0
1475; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm2
1476; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
1477; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1478; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm1
1479; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
1480; AVX1-NEXT:    andb $1, %al
1481; AVX1-NEXT:    movb %al, 4(%rdi)
1482; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
1483; AVX1-NEXT:    andb $1, %al
1484; AVX1-NEXT:    movb %al, 4(%rdi)
1485; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
1486; AVX1-NEXT:    andb $1, %al
1487; AVX1-NEXT:    movb %al, 4(%rdi)
1488; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
1489; AVX1-NEXT:    andb $1, %al
1490; AVX1-NEXT:    movb %al, 4(%rdi)
1491; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
1492; AVX1-NEXT:    andb $1, %al
1493; AVX1-NEXT:    movb %al, 4(%rdi)
1494; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
1495; AVX1-NEXT:    andb $1, %al
1496; AVX1-NEXT:    movb %al, 4(%rdi)
1497; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
1498; AVX1-NEXT:    andb $1, %al
1499; AVX1-NEXT:    movb %al, 4(%rdi)
1500; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
1501; AVX1-NEXT:    andb $1, %al
1502; AVX1-NEXT:    movb %al, 4(%rdi)
1503; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
1504; AVX1-NEXT:    andb $1, %al
1505; AVX1-NEXT:    movb %al, 4(%rdi)
1506; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
1507; AVX1-NEXT:    andb $1, %al
1508; AVX1-NEXT:    movb %al, 4(%rdi)
1509; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
1510; AVX1-NEXT:    andb $1, %al
1511; AVX1-NEXT:    movb %al, 4(%rdi)
1512; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
1513; AVX1-NEXT:    andb $1, %al
1514; AVX1-NEXT:    movb %al, 4(%rdi)
1515; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
1516; AVX1-NEXT:    andb $1, %al
1517; AVX1-NEXT:    movb %al, 4(%rdi)
1518; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
1519; AVX1-NEXT:    andb $1, %al
1520; AVX1-NEXT:    movb %al, 4(%rdi)
1521; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
1522; AVX1-NEXT:    andb $1, %al
1523; AVX1-NEXT:    movb %al, 4(%rdi)
1524; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
1525; AVX1-NEXT:    andb $1, %al
1526; AVX1-NEXT:    movb %al, 4(%rdi)
1527; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
1528; AVX1-NEXT:    andb $1, %al
1529; AVX1-NEXT:    movb %al, 4(%rdi)
1530; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
1531; AVX1-NEXT:    andb $1, %al
1532; AVX1-NEXT:    movb %al, 4(%rdi)
1533; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
1534; AVX1-NEXT:    andb $1, %al
1535; AVX1-NEXT:    movb %al, 4(%rdi)
1536; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
1537; AVX1-NEXT:    andb $1, %al
1538; AVX1-NEXT:    movb %al, 4(%rdi)
1539; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
1540; AVX1-NEXT:    andb $1, %al
1541; AVX1-NEXT:    movb %al, 4(%rdi)
1542; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
1543; AVX1-NEXT:    andb $1, %al
1544; AVX1-NEXT:    movb %al, 4(%rdi)
1545; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
1546; AVX1-NEXT:    andb $1, %al
1547; AVX1-NEXT:    movb %al, 4(%rdi)
1548; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
1549; AVX1-NEXT:    andb $1, %al
1550; AVX1-NEXT:    movb %al, 4(%rdi)
1551; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
1552; AVX1-NEXT:    andb $1, %al
1553; AVX1-NEXT:    movb %al, 4(%rdi)
1554; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
1555; AVX1-NEXT:    andb $1, %al
1556; AVX1-NEXT:    movb %al, 4(%rdi)
1557; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
1558; AVX1-NEXT:    andb $1, %al
1559; AVX1-NEXT:    movb %al, 4(%rdi)
1560; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
1561; AVX1-NEXT:    andb $1, %al
1562; AVX1-NEXT:    movb %al, 4(%rdi)
1563; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
1564; AVX1-NEXT:    andb $1, %al
1565; AVX1-NEXT:    movb %al, 4(%rdi)
1566; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
1567; AVX1-NEXT:    andb $1, %al
1568; AVX1-NEXT:    movb %al, 4(%rdi)
1569; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
1570; AVX1-NEXT:    andb $1, %al
1571; AVX1-NEXT:    movb %al, 4(%rdi)
1572; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
1573; AVX1-NEXT:    andb $1, %al
1574; AVX1-NEXT:    movb %al, 4(%rdi)
1575; AVX1-NEXT:    vpextrb $15, %xmm0, %eax
1576; AVX1-NEXT:    andb $1, %al
1577; AVX1-NEXT:    movb %al, (%rdi)
1578; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
1579; AVX1-NEXT:    andb $1, %al
1580; AVX1-NEXT:    movb %al, (%rdi)
1581; AVX1-NEXT:    vpextrb $13, %xmm0, %eax
1582; AVX1-NEXT:    andb $1, %al
1583; AVX1-NEXT:    movb %al, (%rdi)
1584; AVX1-NEXT:    vpextrb $12, %xmm0, %eax
1585; AVX1-NEXT:    andb $1, %al
1586; AVX1-NEXT:    movb %al, (%rdi)
1587; AVX1-NEXT:    vpextrb $11, %xmm0, %eax
1588; AVX1-NEXT:    andb $1, %al
1589; AVX1-NEXT:    movb %al, (%rdi)
1590; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
1591; AVX1-NEXT:    andb $1, %al
1592; AVX1-NEXT:    movb %al, (%rdi)
1593; AVX1-NEXT:    vpextrb $9, %xmm0, %eax
1594; AVX1-NEXT:    andb $1, %al
1595; AVX1-NEXT:    movb %al, (%rdi)
1596; AVX1-NEXT:    vpextrb $8, %xmm0, %eax
1597; AVX1-NEXT:    andb $1, %al
1598; AVX1-NEXT:    movb %al, (%rdi)
1599; AVX1-NEXT:    vpextrb $7, %xmm0, %eax
1600; AVX1-NEXT:    andb $1, %al
1601; AVX1-NEXT:    movb %al, (%rdi)
1602; AVX1-NEXT:    vpextrb $6, %xmm0, %eax
1603; AVX1-NEXT:    andb $1, %al
1604; AVX1-NEXT:    movb %al, (%rdi)
1605; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
1606; AVX1-NEXT:    andb $1, %al
1607; AVX1-NEXT:    movb %al, (%rdi)
1608; AVX1-NEXT:    vpextrb $4, %xmm0, %eax
1609; AVX1-NEXT:    andb $1, %al
1610; AVX1-NEXT:    movb %al, (%rdi)
1611; AVX1-NEXT:    vpextrb $3, %xmm0, %eax
1612; AVX1-NEXT:    andb $1, %al
1613; AVX1-NEXT:    movb %al, (%rdi)
1614; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
1615; AVX1-NEXT:    andb $1, %al
1616; AVX1-NEXT:    movb %al, (%rdi)
1617; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
1618; AVX1-NEXT:    andb $1, %al
1619; AVX1-NEXT:    movb %al, (%rdi)
1620; AVX1-NEXT:    vpextrb $0, %xmm0, %eax
1621; AVX1-NEXT:    andb $1, %al
1622; AVX1-NEXT:    movb %al, (%rdi)
1623; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
1624; AVX1-NEXT:    andb $1, %al
1625; AVX1-NEXT:    movb %al, (%rdi)
1626; AVX1-NEXT:    vpextrb $14, %xmm4, %eax
1627; AVX1-NEXT:    andb $1, %al
1628; AVX1-NEXT:    movb %al, (%rdi)
1629; AVX1-NEXT:    vpextrb $13, %xmm4, %eax
1630; AVX1-NEXT:    andb $1, %al
1631; AVX1-NEXT:    movb %al, (%rdi)
1632; AVX1-NEXT:    vpextrb $12, %xmm4, %eax
1633; AVX1-NEXT:    andb $1, %al
1634; AVX1-NEXT:    movb %al, (%rdi)
1635; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
1636; AVX1-NEXT:    andb $1, %al
1637; AVX1-NEXT:    movb %al, (%rdi)
1638; AVX1-NEXT:    vpextrb $10, %xmm4, %eax
1639; AVX1-NEXT:    andb $1, %al
1640; AVX1-NEXT:    movb %al, (%rdi)
1641; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
1642; AVX1-NEXT:    andb $1, %al
1643; AVX1-NEXT:    movb %al, (%rdi)
1644; AVX1-NEXT:    vpextrb $8, %xmm4, %eax
1645; AVX1-NEXT:    andb $1, %al
1646; AVX1-NEXT:    movb %al, (%rdi)
1647; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
1648; AVX1-NEXT:    andb $1, %al
1649; AVX1-NEXT:    movb %al, (%rdi)
1650; AVX1-NEXT:    vpextrb $6, %xmm4, %eax
1651; AVX1-NEXT:    andb $1, %al
1652; AVX1-NEXT:    movb %al, (%rdi)
1653; AVX1-NEXT:    vpextrb $5, %xmm4, %eax
1654; AVX1-NEXT:    andb $1, %al
1655; AVX1-NEXT:    movb %al, (%rdi)
1656; AVX1-NEXT:    vpextrb $4, %xmm4, %eax
1657; AVX1-NEXT:    andb $1, %al
1658; AVX1-NEXT:    movb %al, (%rdi)
1659; AVX1-NEXT:    vpextrb $3, %xmm4, %eax
1660; AVX1-NEXT:    andb $1, %al
1661; AVX1-NEXT:    movb %al, (%rdi)
1662; AVX1-NEXT:    vpextrb $2, %xmm4, %eax
1663; AVX1-NEXT:    andb $1, %al
1664; AVX1-NEXT:    movb %al, (%rdi)
1665; AVX1-NEXT:    vpextrb $1, %xmm4, %eax
1666; AVX1-NEXT:    andb $1, %al
1667; AVX1-NEXT:    movb %al, (%rdi)
1668; AVX1-NEXT:    vpextrb $0, %xmm4, %eax
1669; AVX1-NEXT:    andb $1, %al
1670; AVX1-NEXT:    movb %al, (%rdi)
1671; AVX1-NEXT:    movq %rdi, %rax
1672; AVX1-NEXT:    vzeroupper
1673; AVX1-NEXT:    retq
1674;
1675; AVX2-LABEL: test_cmp_v64i8:
1676; AVX2:       # BB#0:
1677; AVX2-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
1678; AVX2-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm1
1679; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
1680; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
1681; AVX2-NEXT:    andb $1, %al
1682; AVX2-NEXT:    movb %al, 4(%rdi)
1683; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
1684; AVX2-NEXT:    andb $1, %al
1685; AVX2-NEXT:    movb %al, 4(%rdi)
1686; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
1687; AVX2-NEXT:    andb $1, %al
1688; AVX2-NEXT:    movb %al, 4(%rdi)
1689; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
1690; AVX2-NEXT:    andb $1, %al
1691; AVX2-NEXT:    movb %al, 4(%rdi)
1692; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
1693; AVX2-NEXT:    andb $1, %al
1694; AVX2-NEXT:    movb %al, 4(%rdi)
1695; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
1696; AVX2-NEXT:    andb $1, %al
1697; AVX2-NEXT:    movb %al, 4(%rdi)
1698; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
1699; AVX2-NEXT:    andb $1, %al
1700; AVX2-NEXT:    movb %al, 4(%rdi)
1701; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
1702; AVX2-NEXT:    andb $1, %al
1703; AVX2-NEXT:    movb %al, 4(%rdi)
1704; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
1705; AVX2-NEXT:    andb $1, %al
1706; AVX2-NEXT:    movb %al, 4(%rdi)
1707; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
1708; AVX2-NEXT:    andb $1, %al
1709; AVX2-NEXT:    movb %al, 4(%rdi)
1710; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
1711; AVX2-NEXT:    andb $1, %al
1712; AVX2-NEXT:    movb %al, 4(%rdi)
1713; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
1714; AVX2-NEXT:    andb $1, %al
1715; AVX2-NEXT:    movb %al, 4(%rdi)
1716; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
1717; AVX2-NEXT:    andb $1, %al
1718; AVX2-NEXT:    movb %al, 4(%rdi)
1719; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
1720; AVX2-NEXT:    andb $1, %al
1721; AVX2-NEXT:    movb %al, 4(%rdi)
1722; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
1723; AVX2-NEXT:    andb $1, %al
1724; AVX2-NEXT:    movb %al, 4(%rdi)
1725; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
1726; AVX2-NEXT:    andb $1, %al
1727; AVX2-NEXT:    movb %al, 4(%rdi)
1728; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
1729; AVX2-NEXT:    andb $1, %al
1730; AVX2-NEXT:    movb %al, 4(%rdi)
1731; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
1732; AVX2-NEXT:    andb $1, %al
1733; AVX2-NEXT:    movb %al, 4(%rdi)
1734; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
1735; AVX2-NEXT:    andb $1, %al
1736; AVX2-NEXT:    movb %al, 4(%rdi)
1737; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
1738; AVX2-NEXT:    andb $1, %al
1739; AVX2-NEXT:    movb %al, 4(%rdi)
1740; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
1741; AVX2-NEXT:    andb $1, %al
1742; AVX2-NEXT:    movb %al, 4(%rdi)
1743; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
1744; AVX2-NEXT:    andb $1, %al
1745; AVX2-NEXT:    movb %al, 4(%rdi)
1746; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
1747; AVX2-NEXT:    andb $1, %al
1748; AVX2-NEXT:    movb %al, 4(%rdi)
1749; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
1750; AVX2-NEXT:    andb $1, %al
1751; AVX2-NEXT:    movb %al, 4(%rdi)
1752; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
1753; AVX2-NEXT:    andb $1, %al
1754; AVX2-NEXT:    movb %al, 4(%rdi)
1755; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
1756; AVX2-NEXT:    andb $1, %al
1757; AVX2-NEXT:    movb %al, 4(%rdi)
1758; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
1759; AVX2-NEXT:    andb $1, %al
1760; AVX2-NEXT:    movb %al, 4(%rdi)
1761; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
1762; AVX2-NEXT:    andb $1, %al
1763; AVX2-NEXT:    movb %al, 4(%rdi)
1764; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
1765; AVX2-NEXT:    andb $1, %al
1766; AVX2-NEXT:    movb %al, 4(%rdi)
1767; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
1768; AVX2-NEXT:    andb $1, %al
1769; AVX2-NEXT:    movb %al, 4(%rdi)
1770; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
1771; AVX2-NEXT:    andb $1, %al
1772; AVX2-NEXT:    movb %al, 4(%rdi)
1773; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
1774; AVX2-NEXT:    andb $1, %al
1775; AVX2-NEXT:    movb %al, 4(%rdi)
1776; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1777; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
1778; AVX2-NEXT:    andb $1, %al
1779; AVX2-NEXT:    movb %al, (%rdi)
1780; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
1781; AVX2-NEXT:    andb $1, %al
1782; AVX2-NEXT:    movb %al, (%rdi)
1783; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
1784; AVX2-NEXT:    andb $1, %al
1785; AVX2-NEXT:    movb %al, (%rdi)
1786; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
1787; AVX2-NEXT:    andb $1, %al
1788; AVX2-NEXT:    movb %al, (%rdi)
1789; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
1790; AVX2-NEXT:    andb $1, %al
1791; AVX2-NEXT:    movb %al, (%rdi)
1792; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
1793; AVX2-NEXT:    andb $1, %al
1794; AVX2-NEXT:    movb %al, (%rdi)
1795; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
1796; AVX2-NEXT:    andb $1, %al
1797; AVX2-NEXT:    movb %al, (%rdi)
1798; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
1799; AVX2-NEXT:    andb $1, %al
1800; AVX2-NEXT:    movb %al, (%rdi)
1801; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
1802; AVX2-NEXT:    andb $1, %al
1803; AVX2-NEXT:    movb %al, (%rdi)
1804; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
1805; AVX2-NEXT:    andb $1, %al
1806; AVX2-NEXT:    movb %al, (%rdi)
1807; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
1808; AVX2-NEXT:    andb $1, %al
1809; AVX2-NEXT:    movb %al, (%rdi)
1810; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
1811; AVX2-NEXT:    andb $1, %al
1812; AVX2-NEXT:    movb %al, (%rdi)
1813; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
1814; AVX2-NEXT:    andb $1, %al
1815; AVX2-NEXT:    movb %al, (%rdi)
1816; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
1817; AVX2-NEXT:    andb $1, %al
1818; AVX2-NEXT:    movb %al, (%rdi)
1819; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
1820; AVX2-NEXT:    andb $1, %al
1821; AVX2-NEXT:    movb %al, (%rdi)
1822; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
1823; AVX2-NEXT:    andb $1, %al
1824; AVX2-NEXT:    movb %al, (%rdi)
1825; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
1826; AVX2-NEXT:    andb $1, %al
1827; AVX2-NEXT:    movb %al, (%rdi)
1828; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
1829; AVX2-NEXT:    andb $1, %al
1830; AVX2-NEXT:    movb %al, (%rdi)
1831; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
1832; AVX2-NEXT:    andb $1, %al
1833; AVX2-NEXT:    movb %al, (%rdi)
1834; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
1835; AVX2-NEXT:    andb $1, %al
1836; AVX2-NEXT:    movb %al, (%rdi)
1837; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
1838; AVX2-NEXT:    andb $1, %al
1839; AVX2-NEXT:    movb %al, (%rdi)
1840; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
1841; AVX2-NEXT:    andb $1, %al
1842; AVX2-NEXT:    movb %al, (%rdi)
1843; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
1844; AVX2-NEXT:    andb $1, %al
1845; AVX2-NEXT:    movb %al, (%rdi)
1846; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
1847; AVX2-NEXT:    andb $1, %al
1848; AVX2-NEXT:    movb %al, (%rdi)
1849; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
1850; AVX2-NEXT:    andb $1, %al
1851; AVX2-NEXT:    movb %al, (%rdi)
1852; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
1853; AVX2-NEXT:    andb $1, %al
1854; AVX2-NEXT:    movb %al, (%rdi)
1855; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
1856; AVX2-NEXT:    andb $1, %al
1857; AVX2-NEXT:    movb %al, (%rdi)
1858; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
1859; AVX2-NEXT:    andb $1, %al
1860; AVX2-NEXT:    movb %al, (%rdi)
1861; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
1862; AVX2-NEXT:    andb $1, %al
1863; AVX2-NEXT:    movb %al, (%rdi)
1864; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
1865; AVX2-NEXT:    andb $1, %al
1866; AVX2-NEXT:    movb %al, (%rdi)
1867; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
1868; AVX2-NEXT:    andb $1, %al
1869; AVX2-NEXT:    movb %al, (%rdi)
1870; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
1871; AVX2-NEXT:    andb $1, %al
1872; AVX2-NEXT:    movb %al, (%rdi)
1873; AVX2-NEXT:    movq %rdi, %rax
1874; AVX2-NEXT:    vzeroupper
1875; AVX2-NEXT:    retq
1876;
1877; AVX512-LABEL: test_cmp_v64i8:
1878; AVX512:       # BB#0:
1879; AVX512-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm4
1880; AVX512-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
1881; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
1882; AVX512-NEXT:    vextracti128 $1, %ymm4, %xmm3
1883; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1884; AVX512-NEXT:    vmovdqa %xmm4, %xmm2
1885; AVX512-NEXT:    retq
1886  %1 = icmp sgt <64 x i8> %a0, %a1
1887  ret <64 x i1> %1
1888}
1889
1890;
1891; 1024-bit vector comparisons
1892;
1893
1894define <16 x i1> @test_cmp_v16f64(<16 x double> %a0, <16 x double> %a1) nounwind {
1895; SSE-LABEL: test_cmp_v16f64:
1896; SSE:       # BB#0:
1897; SSE-NEXT:    movapd %xmm0, %xmm8
1898; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
1899; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm11
1900; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm10
1901; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm12
1902; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm9
1903; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm13
1904; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm14
1905; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm15
1906; SSE-NEXT:    cmpltpd %xmm7, %xmm15
1907; SSE-NEXT:    cmpltpd %xmm6, %xmm14
1908; SSE-NEXT:    packsswb %xmm15, %xmm14
1909; SSE-NEXT:    cmpltpd %xmm5, %xmm13
1910; SSE-NEXT:    cmpltpd %xmm4, %xmm9
1911; SSE-NEXT:    packsswb %xmm13, %xmm9
1912; SSE-NEXT:    packsswb %xmm14, %xmm9
1913; SSE-NEXT:    cmpltpd %xmm3, %xmm12
1914; SSE-NEXT:    cmpltpd %xmm2, %xmm10
1915; SSE-NEXT:    packsswb %xmm12, %xmm10
1916; SSE-NEXT:    cmpltpd %xmm1, %xmm11
1917; SSE-NEXT:    cmpltpd %xmm8, %xmm0
1918; SSE-NEXT:    packsswb %xmm11, %xmm0
1919; SSE-NEXT:    packsswb %xmm10, %xmm0
1920; SSE-NEXT:    packsswb %xmm9, %xmm0
1921; SSE-NEXT:    retq
1922;
1923; AVX1-LABEL: test_cmp_v16f64:
1924; AVX1:       # BB#0:
1925; AVX1-NEXT:    vcmpltpd %ymm3, %ymm7, %ymm3
1926; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
1927; AVX1-NEXT:    vpacksswb %xmm7, %xmm3, %xmm3
1928; AVX1-NEXT:    vcmpltpd %ymm2, %ymm6, %ymm2
1929; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
1930; AVX1-NEXT:    vpacksswb %xmm6, %xmm2, %xmm2
1931; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
1932; AVX1-NEXT:    vcmpltpd %ymm1, %ymm5, %ymm1
1933; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1934; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
1935; AVX1-NEXT:    vcmpltpd %ymm0, %ymm4, %ymm0
1936; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1937; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
1938; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
1939; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
1940; AVX1-NEXT:    vzeroupper
1941; AVX1-NEXT:    retq
1942;
1943; AVX2-LABEL: test_cmp_v16f64:
1944; AVX2:       # BB#0:
1945; AVX2-NEXT:    vcmpltpd %ymm3, %ymm7, %ymm3
1946; AVX2-NEXT:    vcmpltpd %ymm2, %ymm6, %ymm2
1947; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
1948; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
1949; AVX2-NEXT:    vcmpltpd %ymm1, %ymm5, %ymm1
1950; AVX2-NEXT:    vcmpltpd %ymm0, %ymm4, %ymm0
1951; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
1952; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1953; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
1954; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1955; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1956; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
1957; AVX2-NEXT:    vzeroupper
1958; AVX2-NEXT:    retq
1959;
1960; AVX512-LABEL: test_cmp_v16f64:
1961; AVX512:       # BB#0:
1962; AVX512-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
1963; AVX512-NEXT:    vextractf32x4 $3, %zmm0, %xmm5
1964; AVX512-NEXT:    xorl %eax, %eax
1965; AVX512-NEXT:    vucomisd %xmm4, %xmm5
1966; AVX512-NEXT:    movq $-1, %rcx
1967; AVX512-NEXT:    movl $0, %edx
1968; AVX512-NEXT:    cmovaq %rcx, %rdx
1969; AVX512-NEXT:    vmovq %rdx, %xmm6
1970; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
1971; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
1972; AVX512-NEXT:    vucomisd %xmm4, %xmm5
1973; AVX512-NEXT:    movl $0, %edx
1974; AVX512-NEXT:    cmovaq %rcx, %rdx
1975; AVX512-NEXT:    vmovq %rdx, %xmm4
1976; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
1977; AVX512-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
1978; AVX512-NEXT:    vextractf32x4 $2, %zmm0, %xmm6
1979; AVX512-NEXT:    vucomisd %xmm5, %xmm6
1980; AVX512-NEXT:    movl $0, %edx
1981; AVX512-NEXT:    cmovaq %rcx, %rdx
1982; AVX512-NEXT:    vmovq %rdx, %xmm7
1983; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
1984; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
1985; AVX512-NEXT:    vucomisd %xmm5, %xmm6
1986; AVX512-NEXT:    movl $0, %edx
1987; AVX512-NEXT:    cmovaq %rcx, %rdx
1988; AVX512-NEXT:    vmovq %rdx, %xmm5
1989; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
1990; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
1991; AVX512-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
1992; AVX512-NEXT:    vextractf32x4 $1, %zmm0, %xmm6
1993; AVX512-NEXT:    vucomisd %xmm5, %xmm6
1994; AVX512-NEXT:    movl $0, %edx
1995; AVX512-NEXT:    cmovaq %rcx, %rdx
1996; AVX512-NEXT:    vmovq %rdx, %xmm7
1997; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
1998; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
1999; AVX512-NEXT:    vucomisd %xmm5, %xmm6
2000; AVX512-NEXT:    movl $0, %edx
2001; AVX512-NEXT:    cmovaq %rcx, %rdx
2002; AVX512-NEXT:    vmovq %rdx, %xmm5
2003; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2004; AVX512-NEXT:    vucomisd %xmm2, %xmm0
2005; AVX512-NEXT:    movl $0, %edx
2006; AVX512-NEXT:    cmovaq %rcx, %rdx
2007; AVX512-NEXT:    vmovq %rdx, %xmm6
2008; AVX512-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2009; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2010; AVX512-NEXT:    vucomisd %xmm2, %xmm0
2011; AVX512-NEXT:    movl $0, %edx
2012; AVX512-NEXT:    cmovaq %rcx, %rdx
2013; AVX512-NEXT:    vmovq %rdx, %xmm0
2014; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm6[0],xmm0[0]
2015; AVX512-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
2016; AVX512-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
2017; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
2018; AVX512-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
2019; AVX512-NEXT:    vextractf32x4 $3, %zmm1, %xmm4
2020; AVX512-NEXT:    vucomisd %xmm2, %xmm4
2021; AVX512-NEXT:    movl $0, %edx
2022; AVX512-NEXT:    cmovaq %rcx, %rdx
2023; AVX512-NEXT:    vmovq %rdx, %xmm5
2024; AVX512-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2025; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2026; AVX512-NEXT:    vucomisd %xmm2, %xmm4
2027; AVX512-NEXT:    movl $0, %edx
2028; AVX512-NEXT:    cmovaq %rcx, %rdx
2029; AVX512-NEXT:    vmovq %rdx, %xmm2
2030; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
2031; AVX512-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
2032; AVX512-NEXT:    vextractf32x4 $2, %zmm1, %xmm5
2033; AVX512-NEXT:    vucomisd %xmm4, %xmm5
2034; AVX512-NEXT:    movl $0, %edx
2035; AVX512-NEXT:    cmovaq %rcx, %rdx
2036; AVX512-NEXT:    vmovq %rdx, %xmm6
2037; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2038; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2039; AVX512-NEXT:    vucomisd %xmm4, %xmm5
2040; AVX512-NEXT:    movl $0, %edx
2041; AVX512-NEXT:    cmovaq %rcx, %rdx
2042; AVX512-NEXT:    vmovq %rdx, %xmm4
2043; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2044; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
2045; AVX512-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
2046; AVX512-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
2047; AVX512-NEXT:    vucomisd %xmm4, %xmm5
2048; AVX512-NEXT:    movl $0, %edx
2049; AVX512-NEXT:    cmovaq %rcx, %rdx
2050; AVX512-NEXT:    vmovq %rdx, %xmm6
2051; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2052; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2053; AVX512-NEXT:    vucomisd %xmm4, %xmm5
2054; AVX512-NEXT:    movl $0, %edx
2055; AVX512-NEXT:    cmovaq %rcx, %rdx
2056; AVX512-NEXT:    vmovq %rdx, %xmm4
2057; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2058; AVX512-NEXT:    vucomisd %xmm3, %xmm1
2059; AVX512-NEXT:    movl $0, %edx
2060; AVX512-NEXT:    cmovaq %rcx, %rdx
2061; AVX512-NEXT:    vmovq %rdx, %xmm5
2062; AVX512-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
2063; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
2064; AVX512-NEXT:    vucomisd %xmm3, %xmm1
2065; AVX512-NEXT:    cmovaq %rcx, %rax
2066; AVX512-NEXT:    vmovq %rax, %xmm1
2067; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
2068; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
2069; AVX512-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
2070; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
2071; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2072; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
2073; AVX512-NEXT:    retq
2074  %1 = fcmp ogt <16 x double> %a0, %a1
2075  ret <16 x i1> %1
2076}
2077
2078define <32 x i1> @test_cmp_v32f32(<32 x float> %a0, <32 x float> %a1) nounwind {
2079; SSE2-LABEL: test_cmp_v32f32:
2080; SSE2:       # BB#0:
2081; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
2082; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
2083; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
2084; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
2085; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
2086; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
2087; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
2088; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
2089; SSE2-NEXT:    cmpltps %xmm3, %xmm15
2090; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm15[0,2,2,3,4,5,6,7]
2091; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
2092; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
2093; SSE2-NEXT:    cmpltps %xmm2, %xmm14
2094; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm14[0,2,2,3,4,5,6,7]
2095; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
2096; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2097; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
2098; SSE2-NEXT:    psllw $15, %xmm2
2099; SSE2-NEXT:    psraw $15, %xmm2
2100; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
2101; SSE2-NEXT:    pand %xmm3, %xmm2
2102; SSE2-NEXT:    cmpltps %xmm1, %xmm13
2103; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm13[0,2,2,3,4,5,6,7]
2104; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2105; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2106; SSE2-NEXT:    cmpltps %xmm0, %xmm12
2107; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm12[0,2,2,3,4,5,6,7]
2108; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
2109; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2110; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2111; SSE2-NEXT:    psllw $15, %xmm0
2112; SSE2-NEXT:    psraw $15, %xmm0
2113; SSE2-NEXT:    pand %xmm3, %xmm0
2114; SSE2-NEXT:    packuswb %xmm2, %xmm0
2115; SSE2-NEXT:    cmpltps %xmm7, %xmm11
2116; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm11[0,2,2,3,4,5,6,7]
2117; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2118; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2119; SSE2-NEXT:    cmpltps %xmm6, %xmm10
2120; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm10[0,2,2,3,4,5,6,7]
2121; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
2122; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2123; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
2124; SSE2-NEXT:    psllw $15, %xmm2
2125; SSE2-NEXT:    psraw $15, %xmm2
2126; SSE2-NEXT:    pand %xmm3, %xmm2
2127; SSE2-NEXT:    cmpltps %xmm5, %xmm9
2128; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm9[0,2,2,3,4,5,6,7]
2129; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2130; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2131; SSE2-NEXT:    cmpltps %xmm4, %xmm8
2132; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm8[0,2,2,3,4,5,6,7]
2133; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
2134; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
2135; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm1[0]
2136; SSE2-NEXT:    psllw $15, %xmm4
2137; SSE2-NEXT:    psraw $15, %xmm4
2138; SSE2-NEXT:    pand %xmm3, %xmm4
2139; SSE2-NEXT:    packuswb %xmm2, %xmm4
2140; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
2141; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2142; SSE2-NEXT:    andb $1, %al
2143; SSE2-NEXT:    movb %al, 2(%rdi)
2144; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
2145; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2146; SSE2-NEXT:    andb $1, %al
2147; SSE2-NEXT:    movb %al, (%rdi)
2148; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2149; SSE2-NEXT:    andb $1, %al
2150; SSE2-NEXT:    movb %al, 2(%rdi)
2151; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2152; SSE2-NEXT:    andb $1, %al
2153; SSE2-NEXT:    movb %al, (%rdi)
2154; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2155; SSE2-NEXT:    andb $1, %al
2156; SSE2-NEXT:    movb %al, 2(%rdi)
2157; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2158; SSE2-NEXT:    andb $1, %al
2159; SSE2-NEXT:    movb %al, (%rdi)
2160; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2161; SSE2-NEXT:    andb $1, %al
2162; SSE2-NEXT:    movb %al, 2(%rdi)
2163; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2164; SSE2-NEXT:    andb $1, %al
2165; SSE2-NEXT:    movb %al, (%rdi)
2166; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2167; SSE2-NEXT:    andb $1, %al
2168; SSE2-NEXT:    movb %al, 2(%rdi)
2169; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2170; SSE2-NEXT:    andb $1, %al
2171; SSE2-NEXT:    movb %al, (%rdi)
2172; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2173; SSE2-NEXT:    andb $1, %al
2174; SSE2-NEXT:    movb %al, 2(%rdi)
2175; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2176; SSE2-NEXT:    andb $1, %al
2177; SSE2-NEXT:    movb %al, (%rdi)
2178; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2179; SSE2-NEXT:    andb $1, %al
2180; SSE2-NEXT:    movb %al, 2(%rdi)
2181; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2182; SSE2-NEXT:    andb $1, %al
2183; SSE2-NEXT:    movb %al, (%rdi)
2184; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2185; SSE2-NEXT:    andb $1, %al
2186; SSE2-NEXT:    movb %al, 2(%rdi)
2187; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2188; SSE2-NEXT:    andb $1, %al
2189; SSE2-NEXT:    movb %al, (%rdi)
2190; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2191; SSE2-NEXT:    andb $1, %al
2192; SSE2-NEXT:    movb %al, 2(%rdi)
2193; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2194; SSE2-NEXT:    andb $1, %al
2195; SSE2-NEXT:    movb %al, (%rdi)
2196; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2197; SSE2-NEXT:    andb $1, %al
2198; SSE2-NEXT:    movb %al, 2(%rdi)
2199; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2200; SSE2-NEXT:    andb $1, %al
2201; SSE2-NEXT:    movb %al, (%rdi)
2202; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2203; SSE2-NEXT:    andb $1, %al
2204; SSE2-NEXT:    movb %al, 2(%rdi)
2205; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2206; SSE2-NEXT:    andb $1, %al
2207; SSE2-NEXT:    movb %al, (%rdi)
2208; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2209; SSE2-NEXT:    andb $1, %al
2210; SSE2-NEXT:    movb %al, 2(%rdi)
2211; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2212; SSE2-NEXT:    andb $1, %al
2213; SSE2-NEXT:    movb %al, (%rdi)
2214; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2215; SSE2-NEXT:    andb $1, %al
2216; SSE2-NEXT:    movb %al, 2(%rdi)
2217; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2218; SSE2-NEXT:    andb $1, %al
2219; SSE2-NEXT:    movb %al, (%rdi)
2220; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2221; SSE2-NEXT:    andb $1, %al
2222; SSE2-NEXT:    movb %al, 2(%rdi)
2223; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2224; SSE2-NEXT:    andb $1, %al
2225; SSE2-NEXT:    movb %al, (%rdi)
2226; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2227; SSE2-NEXT:    andb $1, %al
2228; SSE2-NEXT:    movb %al, 2(%rdi)
2229; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2230; SSE2-NEXT:    andb $1, %al
2231; SSE2-NEXT:    movb %al, (%rdi)
2232; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2233; SSE2-NEXT:    andb $1, %al
2234; SSE2-NEXT:    movb %al, 2(%rdi)
2235; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2236; SSE2-NEXT:    andb $1, %al
2237; SSE2-NEXT:    movb %al, (%rdi)
2238; SSE2-NEXT:    movq %rdi, %rax
2239; SSE2-NEXT:    retq
2240;
2241; SSE42-LABEL: test_cmp_v32f32:
2242; SSE42:       # BB#0:
2243; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
2244; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
2245; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
2246; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
2247; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
2248; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
2249; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
2250; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
2251; SSE42-NEXT:    cmpltps %xmm3, %xmm15
2252; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2253; SSE42-NEXT:    pshufb %xmm3, %xmm15
2254; SSE42-NEXT:    cmpltps %xmm2, %xmm13
2255; SSE42-NEXT:    pshufb %xmm3, %xmm13
2256; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm13 = xmm13[0],xmm15[0]
2257; SSE42-NEXT:    psllw $15, %xmm13
2258; SSE42-NEXT:    psraw $15, %xmm13
2259; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2260; SSE42-NEXT:    pshufb %xmm2, %xmm13
2261; SSE42-NEXT:    cmpltps %xmm1, %xmm14
2262; SSE42-NEXT:    pshufb %xmm3, %xmm14
2263; SSE42-NEXT:    cmpltps %xmm0, %xmm8
2264; SSE42-NEXT:    pshufb %xmm3, %xmm8
2265; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm14[0]
2266; SSE42-NEXT:    psllw $15, %xmm8
2267; SSE42-NEXT:    psraw $15, %xmm8
2268; SSE42-NEXT:    pshufb %xmm2, %xmm8
2269; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm13[0]
2270; SSE42-NEXT:    cmpltps %xmm7, %xmm12
2271; SSE42-NEXT:    pshufb %xmm3, %xmm12
2272; SSE42-NEXT:    cmpltps %xmm6, %xmm10
2273; SSE42-NEXT:    pshufb %xmm3, %xmm10
2274; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm10 = xmm10[0],xmm12[0]
2275; SSE42-NEXT:    psllw $15, %xmm10
2276; SSE42-NEXT:    psraw $15, %xmm10
2277; SSE42-NEXT:    pshufb %xmm2, %xmm10
2278; SSE42-NEXT:    cmpltps %xmm5, %xmm11
2279; SSE42-NEXT:    pshufb %xmm3, %xmm11
2280; SSE42-NEXT:    cmpltps %xmm4, %xmm9
2281; SSE42-NEXT:    pshufb %xmm3, %xmm9
2282; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
2283; SSE42-NEXT:    psllw $15, %xmm9
2284; SSE42-NEXT:    psraw $15, %xmm9
2285; SSE42-NEXT:    pshufb %xmm2, %xmm9
2286; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm10[0]
2287; SSE42-NEXT:    pextrb $15, %xmm9, %eax
2288; SSE42-NEXT:    andb $1, %al
2289; SSE42-NEXT:    movb %al, 2(%rdi)
2290; SSE42-NEXT:    pextrb $14, %xmm9, %eax
2291; SSE42-NEXT:    andb $1, %al
2292; SSE42-NEXT:    movb %al, 2(%rdi)
2293; SSE42-NEXT:    pextrb $13, %xmm9, %eax
2294; SSE42-NEXT:    andb $1, %al
2295; SSE42-NEXT:    movb %al, 2(%rdi)
2296; SSE42-NEXT:    pextrb $12, %xmm9, %eax
2297; SSE42-NEXT:    andb $1, %al
2298; SSE42-NEXT:    movb %al, 2(%rdi)
2299; SSE42-NEXT:    pextrb $11, %xmm9, %eax
2300; SSE42-NEXT:    andb $1, %al
2301; SSE42-NEXT:    movb %al, 2(%rdi)
2302; SSE42-NEXT:    pextrb $10, %xmm9, %eax
2303; SSE42-NEXT:    andb $1, %al
2304; SSE42-NEXT:    movb %al, 2(%rdi)
2305; SSE42-NEXT:    pextrb $9, %xmm9, %eax
2306; SSE42-NEXT:    andb $1, %al
2307; SSE42-NEXT:    movb %al, 2(%rdi)
2308; SSE42-NEXT:    pextrb $8, %xmm9, %eax
2309; SSE42-NEXT:    andb $1, %al
2310; SSE42-NEXT:    movb %al, 2(%rdi)
2311; SSE42-NEXT:    pextrb $7, %xmm9, %eax
2312; SSE42-NEXT:    andb $1, %al
2313; SSE42-NEXT:    movb %al, 2(%rdi)
2314; SSE42-NEXT:    pextrb $6, %xmm9, %eax
2315; SSE42-NEXT:    andb $1, %al
2316; SSE42-NEXT:    movb %al, 2(%rdi)
2317; SSE42-NEXT:    pextrb $5, %xmm9, %eax
2318; SSE42-NEXT:    andb $1, %al
2319; SSE42-NEXT:    movb %al, 2(%rdi)
2320; SSE42-NEXT:    pextrb $4, %xmm9, %eax
2321; SSE42-NEXT:    andb $1, %al
2322; SSE42-NEXT:    movb %al, 2(%rdi)
2323; SSE42-NEXT:    pextrb $3, %xmm9, %eax
2324; SSE42-NEXT:    andb $1, %al
2325; SSE42-NEXT:    movb %al, 2(%rdi)
2326; SSE42-NEXT:    pextrb $2, %xmm9, %eax
2327; SSE42-NEXT:    andb $1, %al
2328; SSE42-NEXT:    movb %al, 2(%rdi)
2329; SSE42-NEXT:    pextrb $1, %xmm9, %eax
2330; SSE42-NEXT:    andb $1, %al
2331; SSE42-NEXT:    movb %al, 2(%rdi)
2332; SSE42-NEXT:    pextrb $0, %xmm9, %eax
2333; SSE42-NEXT:    andb $1, %al
2334; SSE42-NEXT:    movb %al, 2(%rdi)
2335; SSE42-NEXT:    pextrb $15, %xmm8, %eax
2336; SSE42-NEXT:    andb $1, %al
2337; SSE42-NEXT:    movb %al, (%rdi)
2338; SSE42-NEXT:    pextrb $14, %xmm8, %eax
2339; SSE42-NEXT:    andb $1, %al
2340; SSE42-NEXT:    movb %al, (%rdi)
2341; SSE42-NEXT:    pextrb $13, %xmm8, %eax
2342; SSE42-NEXT:    andb $1, %al
2343; SSE42-NEXT:    movb %al, (%rdi)
2344; SSE42-NEXT:    pextrb $12, %xmm8, %eax
2345; SSE42-NEXT:    andb $1, %al
2346; SSE42-NEXT:    movb %al, (%rdi)
2347; SSE42-NEXT:    pextrb $11, %xmm8, %eax
2348; SSE42-NEXT:    andb $1, %al
2349; SSE42-NEXT:    movb %al, (%rdi)
2350; SSE42-NEXT:    pextrb $10, %xmm8, %eax
2351; SSE42-NEXT:    andb $1, %al
2352; SSE42-NEXT:    movb %al, (%rdi)
2353; SSE42-NEXT:    pextrb $9, %xmm8, %eax
2354; SSE42-NEXT:    andb $1, %al
2355; SSE42-NEXT:    movb %al, (%rdi)
2356; SSE42-NEXT:    pextrb $8, %xmm8, %eax
2357; SSE42-NEXT:    andb $1, %al
2358; SSE42-NEXT:    movb %al, (%rdi)
2359; SSE42-NEXT:    pextrb $7, %xmm8, %eax
2360; SSE42-NEXT:    andb $1, %al
2361; SSE42-NEXT:    movb %al, (%rdi)
2362; SSE42-NEXT:    pextrb $6, %xmm8, %eax
2363; SSE42-NEXT:    andb $1, %al
2364; SSE42-NEXT:    movb %al, (%rdi)
2365; SSE42-NEXT:    pextrb $5, %xmm8, %eax
2366; SSE42-NEXT:    andb $1, %al
2367; SSE42-NEXT:    movb %al, (%rdi)
2368; SSE42-NEXT:    pextrb $4, %xmm8, %eax
2369; SSE42-NEXT:    andb $1, %al
2370; SSE42-NEXT:    movb %al, (%rdi)
2371; SSE42-NEXT:    pextrb $3, %xmm8, %eax
2372; SSE42-NEXT:    andb $1, %al
2373; SSE42-NEXT:    movb %al, (%rdi)
2374; SSE42-NEXT:    pextrb $2, %xmm8, %eax
2375; SSE42-NEXT:    andb $1, %al
2376; SSE42-NEXT:    movb %al, (%rdi)
2377; SSE42-NEXT:    pextrb $1, %xmm8, %eax
2378; SSE42-NEXT:    andb $1, %al
2379; SSE42-NEXT:    movb %al, (%rdi)
2380; SSE42-NEXT:    pextrb $0, %xmm8, %eax
2381; SSE42-NEXT:    andb $1, %al
2382; SSE42-NEXT:    movb %al, (%rdi)
2383; SSE42-NEXT:    movq %rdi, %rax
2384; SSE42-NEXT:    retq
2385;
2386; AVX1-LABEL: test_cmp_v32f32:
2387; AVX1:       # BB#0:
2388; AVX1-NEXT:    vcmpltps %ymm3, %ymm7, %ymm3
2389; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
2390; AVX1-NEXT:    vpacksswb %xmm7, %xmm3, %xmm3
2391; AVX1-NEXT:    vcmpltps %ymm2, %ymm6, %ymm2
2392; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
2393; AVX1-NEXT:    vpacksswb %xmm6, %xmm2, %xmm2
2394; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
2395; AVX1-NEXT:    vcmpltps %ymm1, %ymm5, %ymm1
2396; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
2397; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
2398; AVX1-NEXT:    vcmpltps %ymm0, %ymm4, %ymm0
2399; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2400; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
2401; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2402; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2403; AVX1-NEXT:    retq
2404;
2405; AVX2-LABEL: test_cmp_v32f32:
2406; AVX2:       # BB#0:
2407; AVX2-NEXT:    vcmpltps %ymm3, %ymm7, %ymm3
2408; AVX2-NEXT:    vcmpltps %ymm2, %ymm6, %ymm2
2409; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
2410; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2411; AVX2-NEXT:    vcmpltps %ymm1, %ymm5, %ymm1
2412; AVX2-NEXT:    vcmpltps %ymm0, %ymm4, %ymm0
2413; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
2414; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2415; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
2416; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2417; AVX2-NEXT:    retq
2418;
2419; AVX512-LABEL: test_cmp_v32f32:
2420; AVX512:       # BB#0:
2421; AVX512-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2422; AVX512-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
2423; AVX512-NEXT:    vextractf32x4 $3, %zmm0, %xmm6
2424; AVX512-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
2425; AVX512-NEXT:    xorl %eax, %eax
2426; AVX512-NEXT:    vucomiss %xmm5, %xmm7
2427; AVX512-NEXT:    movl $-1, %ecx
2428; AVX512-NEXT:    movl $0, %edx
2429; AVX512-NEXT:    cmoval %ecx, %edx
2430; AVX512-NEXT:    vucomiss %xmm4, %xmm6
2431; AVX512-NEXT:    movl $0, %esi
2432; AVX512-NEXT:    cmoval %ecx, %esi
2433; AVX512-NEXT:    vmovd %esi, %xmm5
2434; AVX512-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm8
2435; AVX512-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
2436; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
2437; AVX512-NEXT:    vucomiss %xmm7, %xmm5
2438; AVX512-NEXT:    movl $0, %edx
2439; AVX512-NEXT:    cmoval %ecx, %edx
2440; AVX512-NEXT:    vpinsrd $2, %edx, %xmm8, %xmm5
2441; AVX512-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
2442; AVX512-NEXT:    vpermilps {{.*#+}} xmm6 = xmm6[3,1,2,3]
2443; AVX512-NEXT:    vucomiss %xmm4, %xmm6
2444; AVX512-NEXT:    movl $0, %edx
2445; AVX512-NEXT:    cmoval %ecx, %edx
2446; AVX512-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm8
2447; AVX512-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2448; AVX512-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2449; AVX512-NEXT:    vextractf32x4 $2, %zmm0, %xmm7
2450; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2451; AVX512-NEXT:    vucomiss %xmm6, %xmm4
2452; AVX512-NEXT:    movl $0, %edx
2453; AVX512-NEXT:    cmoval %ecx, %edx
2454; AVX512-NEXT:    vucomiss %xmm5, %xmm7
2455; AVX512-NEXT:    movl $0, %esi
2456; AVX512-NEXT:    cmoval %ecx, %esi
2457; AVX512-NEXT:    vmovd %esi, %xmm4
2458; AVX512-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
2459; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
2460; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
2461; AVX512-NEXT:    vucomiss %xmm6, %xmm4
2462; AVX512-NEXT:    movl $0, %edx
2463; AVX512-NEXT:    cmoval %ecx, %edx
2464; AVX512-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
2465; AVX512-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2466; AVX512-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
2467; AVX512-NEXT:    vucomiss %xmm5, %xmm6
2468; AVX512-NEXT:    movl $0, %edx
2469; AVX512-NEXT:    cmoval %ecx, %edx
2470; AVX512-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
2471; AVX512-NEXT:    vinserti128 $1, %xmm8, %ymm4, %ymm8
2472; AVX512-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
2473; AVX512-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2474; AVX512-NEXT:    vextractf32x4 $1, %zmm0, %xmm7
2475; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2476; AVX512-NEXT:    vucomiss %xmm6, %xmm4
2477; AVX512-NEXT:    movl $0, %edx
2478; AVX512-NEXT:    cmoval %ecx, %edx
2479; AVX512-NEXT:    vucomiss %xmm5, %xmm7
2480; AVX512-NEXT:    movl $0, %esi
2481; AVX512-NEXT:    cmoval %ecx, %esi
2482; AVX512-NEXT:    vmovd %esi, %xmm4
2483; AVX512-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
2484; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
2485; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
2486; AVX512-NEXT:    vucomiss %xmm6, %xmm4
2487; AVX512-NEXT:    movl $0, %edx
2488; AVX512-NEXT:    cmoval %ecx, %edx
2489; AVX512-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
2490; AVX512-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2491; AVX512-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
2492; AVX512-NEXT:    vucomiss %xmm5, %xmm6
2493; AVX512-NEXT:    movl $0, %edx
2494; AVX512-NEXT:    cmoval %ecx, %edx
2495; AVX512-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
2496; AVX512-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]
2497; AVX512-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
2498; AVX512-NEXT:    vucomiss %xmm5, %xmm6
2499; AVX512-NEXT:    movl $0, %edx
2500; AVX512-NEXT:    cmoval %ecx, %edx
2501; AVX512-NEXT:    vucomiss %xmm2, %xmm0
2502; AVX512-NEXT:    movl $0, %esi
2503; AVX512-NEXT:    cmoval %ecx, %esi
2504; AVX512-NEXT:    vmovd %esi, %xmm5
2505; AVX512-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
2506; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
2507; AVX512-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm0[1,0]
2508; AVX512-NEXT:    vucomiss %xmm6, %xmm7
2509; AVX512-NEXT:    movl $0, %edx
2510; AVX512-NEXT:    cmoval %ecx, %edx
2511; AVX512-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
2512; AVX512-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
2513; AVX512-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2514; AVX512-NEXT:    vucomiss %xmm2, %xmm0
2515; AVX512-NEXT:    movl $0, %edx
2516; AVX512-NEXT:    cmoval %ecx, %edx
2517; AVX512-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm0
2518; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
2519; AVX512-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
2520; AVX512-NEXT:    vpmovdb %zmm0, %xmm8
2521; AVX512-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
2522; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]
2523; AVX512-NEXT:    vextractf32x4 $3, %zmm1, %xmm5
2524; AVX512-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2525; AVX512-NEXT:    vucomiss %xmm4, %xmm6
2526; AVX512-NEXT:    movl $0, %edx
2527; AVX512-NEXT:    cmoval %ecx, %edx
2528; AVX512-NEXT:    vucomiss %xmm2, %xmm5
2529; AVX512-NEXT:    movl $0, %esi
2530; AVX512-NEXT:    cmoval %ecx, %esi
2531; AVX512-NEXT:    vmovd %esi, %xmm4
2532; AVX512-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2533; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
2534; AVX512-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
2535; AVX512-NEXT:    vucomiss %xmm6, %xmm7
2536; AVX512-NEXT:    movl $0, %edx
2537; AVX512-NEXT:    cmoval %ecx, %edx
2538; AVX512-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2539; AVX512-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
2540; AVX512-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2541; AVX512-NEXT:    vucomiss %xmm2, %xmm5
2542; AVX512-NEXT:    movl $0, %edx
2543; AVX512-NEXT:    cmoval %ecx, %edx
2544; AVX512-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm2
2545; AVX512-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
2546; AVX512-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
2547; AVX512-NEXT:    vextractf32x4 $2, %zmm1, %xmm6
2548; AVX512-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
2549; AVX512-NEXT:    vucomiss %xmm5, %xmm7
2550; AVX512-NEXT:    movl $0, %edx
2551; AVX512-NEXT:    cmoval %ecx, %edx
2552; AVX512-NEXT:    vucomiss %xmm4, %xmm6
2553; AVX512-NEXT:    movl $0, %esi
2554; AVX512-NEXT:    cmoval %ecx, %esi
2555; AVX512-NEXT:    vmovd %esi, %xmm5
2556; AVX512-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
2557; AVX512-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
2558; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm6[1,0]
2559; AVX512-NEXT:    vucomiss %xmm7, %xmm0
2560; AVX512-NEXT:    movl $0, %edx
2561; AVX512-NEXT:    cmoval %ecx, %edx
2562; AVX512-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm0
2563; AVX512-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
2564; AVX512-NEXT:    vpermilps {{.*#+}} xmm5 = xmm6[3,1,2,3]
2565; AVX512-NEXT:    vucomiss %xmm4, %xmm5
2566; AVX512-NEXT:    movl $0, %edx
2567; AVX512-NEXT:    cmoval %ecx, %edx
2568; AVX512-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm0
2569; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2570; AVX512-NEXT:    vextractf32x4 $1, %zmm3, %xmm0
2571; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
2572; AVX512-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
2573; AVX512-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2574; AVX512-NEXT:    vucomiss %xmm4, %xmm6
2575; AVX512-NEXT:    movl $0, %edx
2576; AVX512-NEXT:    cmoval %ecx, %edx
2577; AVX512-NEXT:    vucomiss %xmm0, %xmm5
2578; AVX512-NEXT:    movl $0, %esi
2579; AVX512-NEXT:    cmoval %ecx, %esi
2580; AVX512-NEXT:    vmovd %esi, %xmm4
2581; AVX512-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2582; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm0[1,0]
2583; AVX512-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
2584; AVX512-NEXT:    vucomiss %xmm6, %xmm7
2585; AVX512-NEXT:    movl $0, %edx
2586; AVX512-NEXT:    cmoval %ecx, %edx
2587; AVX512-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2588; AVX512-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2589; AVX512-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2590; AVX512-NEXT:    vucomiss %xmm0, %xmm5
2591; AVX512-NEXT:    movl $0, %edx
2592; AVX512-NEXT:    cmoval %ecx, %edx
2593; AVX512-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm0
2594; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
2595; AVX512-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]
2596; AVX512-NEXT:    vucomiss %xmm4, %xmm5
2597; AVX512-NEXT:    movl $0, %edx
2598; AVX512-NEXT:    cmoval %ecx, %edx
2599; AVX512-NEXT:    vucomiss %xmm3, %xmm1
2600; AVX512-NEXT:    movl $0, %esi
2601; AVX512-NEXT:    cmoval %ecx, %esi
2602; AVX512-NEXT:    vmovd %esi, %xmm4
2603; AVX512-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2604; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm3[1,0]
2605; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm1[1,0]
2606; AVX512-NEXT:    vucomiss %xmm5, %xmm6
2607; AVX512-NEXT:    movl $0, %edx
2608; AVX512-NEXT:    cmoval %ecx, %edx
2609; AVX512-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2610; AVX512-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[3,1,2,3]
2611; AVX512-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
2612; AVX512-NEXT:    vucomiss %xmm3, %xmm1
2613; AVX512-NEXT:    cmoval %ecx, %eax
2614; AVX512-NEXT:    vpinsrd $3, %eax, %xmm4, %xmm1
2615; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
2616; AVX512-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
2617; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
2618; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
2619; AVX512-NEXT:    retq
2620  %1 = fcmp ogt <32 x float> %a0, %a1
2621  ret <32 x i1> %1
2622}
2623
2624define <16 x i1> @test_cmp_v16i64(<16 x i64> %a0, <16 x i64> %a1) nounwind {
2625; SSE2-LABEL: test_cmp_v16i64:
2626; SSE2:       # BB#0:
2627; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
2628; SSE2-NEXT:    pxor %xmm8, %xmm7
2629; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
2630; SSE2-NEXT:    pxor %xmm8, %xmm9
2631; SSE2-NEXT:    movdqa %xmm7, %xmm10
2632; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
2633; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
2634; SSE2-NEXT:    pcmpeqd %xmm7, %xmm9
2635; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
2636; SSE2-NEXT:    pand %xmm11, %xmm7
2637; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
2638; SSE2-NEXT:    por %xmm7, %xmm9
2639; SSE2-NEXT:    pxor %xmm8, %xmm6
2640; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
2641; SSE2-NEXT:    pxor %xmm8, %xmm7
2642; SSE2-NEXT:    movdqa %xmm6, %xmm10
2643; SSE2-NEXT:    pcmpgtd %xmm7, %xmm10
2644; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
2645; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
2646; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
2647; SSE2-NEXT:    pand %xmm11, %xmm7
2648; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
2649; SSE2-NEXT:    por %xmm7, %xmm10
2650; SSE2-NEXT:    packsswb %xmm9, %xmm10
2651; SSE2-NEXT:    pxor %xmm8, %xmm5
2652; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
2653; SSE2-NEXT:    pxor %xmm8, %xmm7
2654; SSE2-NEXT:    movdqa %xmm5, %xmm6
2655; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
2656; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2]
2657; SSE2-NEXT:    pcmpeqd %xmm5, %xmm7
2658; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
2659; SSE2-NEXT:    pand %xmm9, %xmm5
2660; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2661; SSE2-NEXT:    por %xmm5, %xmm6
2662; SSE2-NEXT:    pxor %xmm8, %xmm4
2663; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
2664; SSE2-NEXT:    pxor %xmm8, %xmm5
2665; SSE2-NEXT:    movdqa %xmm4, %xmm7
2666; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
2667; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,0,2,2]
2668; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
2669; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2670; SSE2-NEXT:    pand %xmm9, %xmm5
2671; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
2672; SSE2-NEXT:    por %xmm5, %xmm4
2673; SSE2-NEXT:    packsswb %xmm6, %xmm4
2674; SSE2-NEXT:    packsswb %xmm10, %xmm4
2675; SSE2-NEXT:    pxor %xmm8, %xmm3
2676; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
2677; SSE2-NEXT:    pxor %xmm8, %xmm5
2678; SSE2-NEXT:    movdqa %xmm3, %xmm6
2679; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2680; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2681; SSE2-NEXT:    pcmpeqd %xmm3, %xmm5
2682; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
2683; SSE2-NEXT:    pand %xmm7, %xmm3
2684; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
2685; SSE2-NEXT:    por %xmm3, %xmm5
2686; SSE2-NEXT:    pxor %xmm8, %xmm2
2687; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
2688; SSE2-NEXT:    pxor %xmm8, %xmm3
2689; SSE2-NEXT:    movdqa %xmm2, %xmm6
2690; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
2691; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2692; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
2693; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2694; SSE2-NEXT:    pand %xmm7, %xmm3
2695; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
2696; SSE2-NEXT:    por %xmm3, %xmm2
2697; SSE2-NEXT:    packsswb %xmm5, %xmm2
2698; SSE2-NEXT:    pxor %xmm8, %xmm1
2699; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
2700; SSE2-NEXT:    pxor %xmm8, %xmm3
2701; SSE2-NEXT:    movdqa %xmm1, %xmm5
2702; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
2703; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
2704; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
2705; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
2706; SSE2-NEXT:    pand %xmm6, %xmm1
2707; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
2708; SSE2-NEXT:    por %xmm1, %xmm3
2709; SSE2-NEXT:    pxor %xmm8, %xmm0
2710; SSE2-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm8
2711; SSE2-NEXT:    movdqa %xmm0, %xmm1
2712; SSE2-NEXT:    pcmpgtd %xmm8, %xmm1
2713; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
2714; SSE2-NEXT:    pcmpeqd %xmm0, %xmm8
2715; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[1,1,3,3]
2716; SSE2-NEXT:    pand %xmm5, %xmm6
2717; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
2718; SSE2-NEXT:    por %xmm6, %xmm0
2719; SSE2-NEXT:    packsswb %xmm3, %xmm0
2720; SSE2-NEXT:    packsswb %xmm2, %xmm0
2721; SSE2-NEXT:    packsswb %xmm4, %xmm0
2722; SSE2-NEXT:    retq
2723;
2724; SSE42-LABEL: test_cmp_v16i64:
2725; SSE42:       # BB#0:
2726; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm7
2727; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm6
2728; SSE42-NEXT:    packsswb %xmm7, %xmm6
2729; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm5
2730; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm4
2731; SSE42-NEXT:    packsswb %xmm5, %xmm4
2732; SSE42-NEXT:    packsswb %xmm6, %xmm4
2733; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm3
2734; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm2
2735; SSE42-NEXT:    packsswb %xmm3, %xmm2
2736; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
2737; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm0
2738; SSE42-NEXT:    packsswb %xmm1, %xmm0
2739; SSE42-NEXT:    packsswb %xmm2, %xmm0
2740; SSE42-NEXT:    packsswb %xmm4, %xmm0
2741; SSE42-NEXT:    retq
2742;
2743; AVX1-LABEL: test_cmp_v16i64:
2744; AVX1:       # BB#0:
2745; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm8
2746; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm9
2747; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm9, %xmm8
2748; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm3, %xmm3
2749; AVX1-NEXT:    vpacksswb %xmm8, %xmm3, %xmm8
2750; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
2751; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
2752; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm3, %xmm3
2753; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm2, %xmm2
2754; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
2755; AVX1-NEXT:    vpacksswb %xmm8, %xmm2, %xmm2
2756; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
2757; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
2758; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm3
2759; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm1, %xmm1
2760; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
2761; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm3
2762; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
2763; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3
2764; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm0
2765; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
2766; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2767; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
2768; AVX1-NEXT:    vzeroupper
2769; AVX1-NEXT:    retq
2770;
2771; AVX2-LABEL: test_cmp_v16i64:
2772; AVX2:       # BB#0:
2773; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm3, %ymm3
2774; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm2, %ymm2
2775; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
2776; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2777; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm1, %ymm1
2778; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm0
2779; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
2780; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2781; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
2782; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2783; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2784; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
2785; AVX2-NEXT:    vzeroupper
2786; AVX2-NEXT:    retq
2787;
2788; AVX512-LABEL: test_cmp_v16i64:
2789; AVX512:       # BB#0:
2790; AVX512-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
2791; AVX512-NEXT:    vpextrq $1, %xmm4, %rcx
2792; AVX512-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
2793; AVX512-NEXT:    vpextrq $1, %xmm5, %rdx
2794; AVX512-NEXT:    xorl %eax, %eax
2795; AVX512-NEXT:    cmpq %rcx, %rdx
2796; AVX512-NEXT:    movq $-1, %rcx
2797; AVX512-NEXT:    movl $0, %edx
2798; AVX512-NEXT:    cmovgq %rcx, %rdx
2799; AVX512-NEXT:    vmovq %rdx, %xmm6
2800; AVX512-NEXT:    vmovq %xmm4, %rdx
2801; AVX512-NEXT:    vmovq %xmm5, %rsi
2802; AVX512-NEXT:    cmpq %rdx, %rsi
2803; AVX512-NEXT:    movl $0, %edx
2804; AVX512-NEXT:    cmovgq %rcx, %rdx
2805; AVX512-NEXT:    vmovq %rdx, %xmm4
2806; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
2807; AVX512-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
2808; AVX512-NEXT:    vpextrq $1, %xmm5, %rdx
2809; AVX512-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
2810; AVX512-NEXT:    vpextrq $1, %xmm6, %rsi
2811; AVX512-NEXT:    cmpq %rdx, %rsi
2812; AVX512-NEXT:    movl $0, %edx
2813; AVX512-NEXT:    cmovgq %rcx, %rdx
2814; AVX512-NEXT:    vmovq %rdx, %xmm7
2815; AVX512-NEXT:    vmovq %xmm5, %rdx
2816; AVX512-NEXT:    vmovq %xmm6, %rsi
2817; AVX512-NEXT:    cmpq %rdx, %rsi
2818; AVX512-NEXT:    movl $0, %edx
2819; AVX512-NEXT:    cmovgq %rcx, %rdx
2820; AVX512-NEXT:    vmovq %rdx, %xmm5
2821; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
2822; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
2823; AVX512-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
2824; AVX512-NEXT:    vpextrq $1, %xmm5, %rdx
2825; AVX512-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
2826; AVX512-NEXT:    vpextrq $1, %xmm6, %rsi
2827; AVX512-NEXT:    cmpq %rdx, %rsi
2828; AVX512-NEXT:    movl $0, %edx
2829; AVX512-NEXT:    cmovgq %rcx, %rdx
2830; AVX512-NEXT:    vmovq %rdx, %xmm7
2831; AVX512-NEXT:    vmovq %xmm5, %rdx
2832; AVX512-NEXT:    vmovq %xmm6, %rsi
2833; AVX512-NEXT:    cmpq %rdx, %rsi
2834; AVX512-NEXT:    movl $0, %edx
2835; AVX512-NEXT:    cmovgq %rcx, %rdx
2836; AVX512-NEXT:    vmovq %rdx, %xmm5
2837; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
2838; AVX512-NEXT:    vpextrq $1, %xmm2, %rdx
2839; AVX512-NEXT:    vpextrq $1, %xmm0, %rsi
2840; AVX512-NEXT:    cmpq %rdx, %rsi
2841; AVX512-NEXT:    movl $0, %edx
2842; AVX512-NEXT:    cmovgq %rcx, %rdx
2843; AVX512-NEXT:    vmovq %rdx, %xmm6
2844; AVX512-NEXT:    vmovq %xmm2, %rdx
2845; AVX512-NEXT:    vmovq %xmm0, %rsi
2846; AVX512-NEXT:    cmpq %rdx, %rsi
2847; AVX512-NEXT:    movl $0, %edx
2848; AVX512-NEXT:    cmovgq %rcx, %rdx
2849; AVX512-NEXT:    vmovq %rdx, %xmm0
2850; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
2851; AVX512-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
2852; AVX512-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
2853; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
2854; AVX512-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
2855; AVX512-NEXT:    vpextrq $1, %xmm2, %rdx
2856; AVX512-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
2857; AVX512-NEXT:    vpextrq $1, %xmm4, %rsi
2858; AVX512-NEXT:    cmpq %rdx, %rsi
2859; AVX512-NEXT:    movl $0, %edx
2860; AVX512-NEXT:    cmovgq %rcx, %rdx
2861; AVX512-NEXT:    vmovq %rdx, %xmm5
2862; AVX512-NEXT:    vmovq %xmm2, %rdx
2863; AVX512-NEXT:    vmovq %xmm4, %rsi
2864; AVX512-NEXT:    cmpq %rdx, %rsi
2865; AVX512-NEXT:    movl $0, %edx
2866; AVX512-NEXT:    cmovgq %rcx, %rdx
2867; AVX512-NEXT:    vmovq %rdx, %xmm2
2868; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
2869; AVX512-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
2870; AVX512-NEXT:    vpextrq $1, %xmm4, %rdx
2871; AVX512-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
2872; AVX512-NEXT:    vpextrq $1, %xmm5, %rsi
2873; AVX512-NEXT:    cmpq %rdx, %rsi
2874; AVX512-NEXT:    movl $0, %edx
2875; AVX512-NEXT:    cmovgq %rcx, %rdx
2876; AVX512-NEXT:    vmovq %rdx, %xmm6
2877; AVX512-NEXT:    vmovq %xmm4, %rdx
2878; AVX512-NEXT:    vmovq %xmm5, %rsi
2879; AVX512-NEXT:    cmpq %rdx, %rsi
2880; AVX512-NEXT:    movl $0, %edx
2881; AVX512-NEXT:    cmovgq %rcx, %rdx
2882; AVX512-NEXT:    vmovq %rdx, %xmm4
2883; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
2884; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
2885; AVX512-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
2886; AVX512-NEXT:    vpextrq $1, %xmm4, %rdx
2887; AVX512-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
2888; AVX512-NEXT:    vpextrq $1, %xmm5, %rsi
2889; AVX512-NEXT:    cmpq %rdx, %rsi
2890; AVX512-NEXT:    movl $0, %edx
2891; AVX512-NEXT:    cmovgq %rcx, %rdx
2892; AVX512-NEXT:    vmovq %rdx, %xmm6
2893; AVX512-NEXT:    vmovq %xmm4, %rdx
2894; AVX512-NEXT:    vmovq %xmm5, %rsi
2895; AVX512-NEXT:    cmpq %rdx, %rsi
2896; AVX512-NEXT:    movl $0, %edx
2897; AVX512-NEXT:    cmovgq %rcx, %rdx
2898; AVX512-NEXT:    vmovq %rdx, %xmm4
2899; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
2900; AVX512-NEXT:    vpextrq $1, %xmm3, %rdx
2901; AVX512-NEXT:    vpextrq $1, %xmm1, %rsi
2902; AVX512-NEXT:    cmpq %rdx, %rsi
2903; AVX512-NEXT:    movl $0, %edx
2904; AVX512-NEXT:    cmovgq %rcx, %rdx
2905; AVX512-NEXT:    vmovq %rdx, %xmm5
2906; AVX512-NEXT:    vmovq %xmm3, %rdx
2907; AVX512-NEXT:    vmovq %xmm1, %rsi
2908; AVX512-NEXT:    cmpq %rdx, %rsi
2909; AVX512-NEXT:    cmovgq %rcx, %rax
2910; AVX512-NEXT:    vmovq %rax, %xmm1
2911; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
2912; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
2913; AVX512-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
2914; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
2915; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2916; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
2917; AVX512-NEXT:    retq
2918  %1 = icmp sgt <16 x i64> %a0, %a1
2919  ret <16 x i1> %1
2920}
2921
2922define <32 x i1> @test_cmp_v32i32(<32 x i32> %a0, <32 x i32> %a1) nounwind {
2923; SSE2-LABEL: test_cmp_v32i32:
2924; SSE2:       # BB#0:
2925; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
2926; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
2927; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
2928; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
2929; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
2930; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
2931; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
2932; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2933; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
2934; SSE2-NEXT:    psllw $15, %xmm2
2935; SSE2-NEXT:    psraw $15, %xmm2
2936; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
2937; SSE2-NEXT:    pand %xmm3, %xmm2
2938; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
2939; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
2940; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2941; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2942; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
2943; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
2944; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
2945; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2946; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2947; SSE2-NEXT:    psllw $15, %xmm0
2948; SSE2-NEXT:    psraw $15, %xmm0
2949; SSE2-NEXT:    pand %xmm3, %xmm0
2950; SSE2-NEXT:    packuswb %xmm2, %xmm0
2951; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
2952; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm7[0,2,2,3,4,5,6,7]
2953; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2954; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2955; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
2956; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm6[0,2,2,3,4,5,6,7]
2957; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
2958; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2959; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
2960; SSE2-NEXT:    psllw $15, %xmm2
2961; SSE2-NEXT:    psraw $15, %xmm2
2962; SSE2-NEXT:    pand %xmm3, %xmm2
2963; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
2964; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm5[0,2,2,3,4,5,6,7]
2965; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2966; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2967; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
2968; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,2,2,3,4,5,6,7]
2969; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
2970; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
2971; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm1[0]
2972; SSE2-NEXT:    psllw $15, %xmm4
2973; SSE2-NEXT:    psraw $15, %xmm4
2974; SSE2-NEXT:    pand %xmm3, %xmm4
2975; SSE2-NEXT:    packuswb %xmm2, %xmm4
2976; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
2977; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2978; SSE2-NEXT:    andb $1, %al
2979; SSE2-NEXT:    movb %al, 2(%rdi)
2980; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
2981; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2982; SSE2-NEXT:    andb $1, %al
2983; SSE2-NEXT:    movb %al, (%rdi)
2984; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2985; SSE2-NEXT:    andb $1, %al
2986; SSE2-NEXT:    movb %al, 2(%rdi)
2987; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2988; SSE2-NEXT:    andb $1, %al
2989; SSE2-NEXT:    movb %al, (%rdi)
2990; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2991; SSE2-NEXT:    andb $1, %al
2992; SSE2-NEXT:    movb %al, 2(%rdi)
2993; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2994; SSE2-NEXT:    andb $1, %al
2995; SSE2-NEXT:    movb %al, (%rdi)
2996; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2997; SSE2-NEXT:    andb $1, %al
2998; SSE2-NEXT:    movb %al, 2(%rdi)
2999; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3000; SSE2-NEXT:    andb $1, %al
3001; SSE2-NEXT:    movb %al, (%rdi)
3002; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3003; SSE2-NEXT:    andb $1, %al
3004; SSE2-NEXT:    movb %al, 2(%rdi)
3005; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3006; SSE2-NEXT:    andb $1, %al
3007; SSE2-NEXT:    movb %al, (%rdi)
3008; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3009; SSE2-NEXT:    andb $1, %al
3010; SSE2-NEXT:    movb %al, 2(%rdi)
3011; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3012; SSE2-NEXT:    andb $1, %al
3013; SSE2-NEXT:    movb %al, (%rdi)
3014; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3015; SSE2-NEXT:    andb $1, %al
3016; SSE2-NEXT:    movb %al, 2(%rdi)
3017; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3018; SSE2-NEXT:    andb $1, %al
3019; SSE2-NEXT:    movb %al, (%rdi)
3020; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3021; SSE2-NEXT:    andb $1, %al
3022; SSE2-NEXT:    movb %al, 2(%rdi)
3023; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3024; SSE2-NEXT:    andb $1, %al
3025; SSE2-NEXT:    movb %al, (%rdi)
3026; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3027; SSE2-NEXT:    andb $1, %al
3028; SSE2-NEXT:    movb %al, 2(%rdi)
3029; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3030; SSE2-NEXT:    andb $1, %al
3031; SSE2-NEXT:    movb %al, (%rdi)
3032; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3033; SSE2-NEXT:    andb $1, %al
3034; SSE2-NEXT:    movb %al, 2(%rdi)
3035; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3036; SSE2-NEXT:    andb $1, %al
3037; SSE2-NEXT:    movb %al, (%rdi)
3038; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3039; SSE2-NEXT:    andb $1, %al
3040; SSE2-NEXT:    movb %al, 2(%rdi)
3041; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3042; SSE2-NEXT:    andb $1, %al
3043; SSE2-NEXT:    movb %al, (%rdi)
3044; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3045; SSE2-NEXT:    andb $1, %al
3046; SSE2-NEXT:    movb %al, 2(%rdi)
3047; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3048; SSE2-NEXT:    andb $1, %al
3049; SSE2-NEXT:    movb %al, (%rdi)
3050; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3051; SSE2-NEXT:    andb $1, %al
3052; SSE2-NEXT:    movb %al, 2(%rdi)
3053; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3054; SSE2-NEXT:    andb $1, %al
3055; SSE2-NEXT:    movb %al, (%rdi)
3056; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3057; SSE2-NEXT:    andb $1, %al
3058; SSE2-NEXT:    movb %al, 2(%rdi)
3059; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3060; SSE2-NEXT:    andb $1, %al
3061; SSE2-NEXT:    movb %al, (%rdi)
3062; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3063; SSE2-NEXT:    andb $1, %al
3064; SSE2-NEXT:    movb %al, 2(%rdi)
3065; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3066; SSE2-NEXT:    andb $1, %al
3067; SSE2-NEXT:    movb %al, (%rdi)
3068; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3069; SSE2-NEXT:    andb $1, %al
3070; SSE2-NEXT:    movb %al, 2(%rdi)
3071; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3072; SSE2-NEXT:    andb $1, %al
3073; SSE2-NEXT:    movb %al, (%rdi)
3074; SSE2-NEXT:    movq %rdi, %rax
3075; SSE2-NEXT:    retq
3076;
3077; SSE42-LABEL: test_cmp_v32i32:
3078; SSE42:       # BB#0:
3079; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
3080; SSE42-NEXT:    movdqa {{.*#+}} xmm8 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
3081; SSE42-NEXT:    pshufb %xmm8, %xmm3
3082; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
3083; SSE42-NEXT:    pshufb %xmm8, %xmm2
3084; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
3085; SSE42-NEXT:    psllw $15, %xmm2
3086; SSE42-NEXT:    psraw $15, %xmm2
3087; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3088; SSE42-NEXT:    pshufb %xmm3, %xmm2
3089; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
3090; SSE42-NEXT:    pshufb %xmm8, %xmm1
3091; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
3092; SSE42-NEXT:    pshufb %xmm8, %xmm0
3093; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3094; SSE42-NEXT:    psllw $15, %xmm0
3095; SSE42-NEXT:    psraw $15, %xmm0
3096; SSE42-NEXT:    pshufb %xmm3, %xmm0
3097; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
3098; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
3099; SSE42-NEXT:    pshufb %xmm8, %xmm7
3100; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
3101; SSE42-NEXT:    pshufb %xmm8, %xmm6
3102; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]
3103; SSE42-NEXT:    psllw $15, %xmm6
3104; SSE42-NEXT:    psraw $15, %xmm6
3105; SSE42-NEXT:    pshufb %xmm3, %xmm6
3106; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
3107; SSE42-NEXT:    pshufb %xmm8, %xmm5
3108; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
3109; SSE42-NEXT:    pshufb %xmm8, %xmm4
3110; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
3111; SSE42-NEXT:    psllw $15, %xmm4
3112; SSE42-NEXT:    psraw $15, %xmm4
3113; SSE42-NEXT:    pshufb %xmm3, %xmm4
3114; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3115; SSE42-NEXT:    pextrb $15, %xmm4, %eax
3116; SSE42-NEXT:    andb $1, %al
3117; SSE42-NEXT:    movb %al, 2(%rdi)
3118; SSE42-NEXT:    pextrb $14, %xmm4, %eax
3119; SSE42-NEXT:    andb $1, %al
3120; SSE42-NEXT:    movb %al, 2(%rdi)
3121; SSE42-NEXT:    pextrb $13, %xmm4, %eax
3122; SSE42-NEXT:    andb $1, %al
3123; SSE42-NEXT:    movb %al, 2(%rdi)
3124; SSE42-NEXT:    pextrb $12, %xmm4, %eax
3125; SSE42-NEXT:    andb $1, %al
3126; SSE42-NEXT:    movb %al, 2(%rdi)
3127; SSE42-NEXT:    pextrb $11, %xmm4, %eax
3128; SSE42-NEXT:    andb $1, %al
3129; SSE42-NEXT:    movb %al, 2(%rdi)
3130; SSE42-NEXT:    pextrb $10, %xmm4, %eax
3131; SSE42-NEXT:    andb $1, %al
3132; SSE42-NEXT:    movb %al, 2(%rdi)
3133; SSE42-NEXT:    pextrb $9, %xmm4, %eax
3134; SSE42-NEXT:    andb $1, %al
3135; SSE42-NEXT:    movb %al, 2(%rdi)
3136; SSE42-NEXT:    pextrb $8, %xmm4, %eax
3137; SSE42-NEXT:    andb $1, %al
3138; SSE42-NEXT:    movb %al, 2(%rdi)
3139; SSE42-NEXT:    pextrb $7, %xmm4, %eax
3140; SSE42-NEXT:    andb $1, %al
3141; SSE42-NEXT:    movb %al, 2(%rdi)
3142; SSE42-NEXT:    pextrb $6, %xmm4, %eax
3143; SSE42-NEXT:    andb $1, %al
3144; SSE42-NEXT:    movb %al, 2(%rdi)
3145; SSE42-NEXT:    pextrb $5, %xmm4, %eax
3146; SSE42-NEXT:    andb $1, %al
3147; SSE42-NEXT:    movb %al, 2(%rdi)
3148; SSE42-NEXT:    pextrb $4, %xmm4, %eax
3149; SSE42-NEXT:    andb $1, %al
3150; SSE42-NEXT:    movb %al, 2(%rdi)
3151; SSE42-NEXT:    pextrb $3, %xmm4, %eax
3152; SSE42-NEXT:    andb $1, %al
3153; SSE42-NEXT:    movb %al, 2(%rdi)
3154; SSE42-NEXT:    pextrb $2, %xmm4, %eax
3155; SSE42-NEXT:    andb $1, %al
3156; SSE42-NEXT:    movb %al, 2(%rdi)
3157; SSE42-NEXT:    pextrb $1, %xmm4, %eax
3158; SSE42-NEXT:    andb $1, %al
3159; SSE42-NEXT:    movb %al, 2(%rdi)
3160; SSE42-NEXT:    pextrb $0, %xmm4, %eax
3161; SSE42-NEXT:    andb $1, %al
3162; SSE42-NEXT:    movb %al, 2(%rdi)
3163; SSE42-NEXT:    pextrb $15, %xmm0, %eax
3164; SSE42-NEXT:    andb $1, %al
3165; SSE42-NEXT:    movb %al, (%rdi)
3166; SSE42-NEXT:    pextrb $14, %xmm0, %eax
3167; SSE42-NEXT:    andb $1, %al
3168; SSE42-NEXT:    movb %al, (%rdi)
3169; SSE42-NEXT:    pextrb $13, %xmm0, %eax
3170; SSE42-NEXT:    andb $1, %al
3171; SSE42-NEXT:    movb %al, (%rdi)
3172; SSE42-NEXT:    pextrb $12, %xmm0, %eax
3173; SSE42-NEXT:    andb $1, %al
3174; SSE42-NEXT:    movb %al, (%rdi)
3175; SSE42-NEXT:    pextrb $11, %xmm0, %eax
3176; SSE42-NEXT:    andb $1, %al
3177; SSE42-NEXT:    movb %al, (%rdi)
3178; SSE42-NEXT:    pextrb $10, %xmm0, %eax
3179; SSE42-NEXT:    andb $1, %al
3180; SSE42-NEXT:    movb %al, (%rdi)
3181; SSE42-NEXT:    pextrb $9, %xmm0, %eax
3182; SSE42-NEXT:    andb $1, %al
3183; SSE42-NEXT:    movb %al, (%rdi)
3184; SSE42-NEXT:    pextrb $8, %xmm0, %eax
3185; SSE42-NEXT:    andb $1, %al
3186; SSE42-NEXT:    movb %al, (%rdi)
3187; SSE42-NEXT:    pextrb $7, %xmm0, %eax
3188; SSE42-NEXT:    andb $1, %al
3189; SSE42-NEXT:    movb %al, (%rdi)
3190; SSE42-NEXT:    pextrb $6, %xmm0, %eax
3191; SSE42-NEXT:    andb $1, %al
3192; SSE42-NEXT:    movb %al, (%rdi)
3193; SSE42-NEXT:    pextrb $5, %xmm0, %eax
3194; SSE42-NEXT:    andb $1, %al
3195; SSE42-NEXT:    movb %al, (%rdi)
3196; SSE42-NEXT:    pextrb $4, %xmm0, %eax
3197; SSE42-NEXT:    andb $1, %al
3198; SSE42-NEXT:    movb %al, (%rdi)
3199; SSE42-NEXT:    pextrb $3, %xmm0, %eax
3200; SSE42-NEXT:    andb $1, %al
3201; SSE42-NEXT:    movb %al, (%rdi)
3202; SSE42-NEXT:    pextrb $2, %xmm0, %eax
3203; SSE42-NEXT:    andb $1, %al
3204; SSE42-NEXT:    movb %al, (%rdi)
3205; SSE42-NEXT:    pextrb $1, %xmm0, %eax
3206; SSE42-NEXT:    andb $1, %al
3207; SSE42-NEXT:    movb %al, (%rdi)
3208; SSE42-NEXT:    pextrb $0, %xmm0, %eax
3209; SSE42-NEXT:    andb $1, %al
3210; SSE42-NEXT:    movb %al, (%rdi)
3211; SSE42-NEXT:    movq %rdi, %rax
3212; SSE42-NEXT:    retq
3213;
3214; AVX1-LABEL: test_cmp_v32i32:
3215; AVX1:       # BB#0:
3216; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm8
3217; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm9
3218; AVX1-NEXT:    vpcmpgtd %xmm8, %xmm9, %xmm8
3219; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm3, %xmm3
3220; AVX1-NEXT:    vpacksswb %xmm8, %xmm3, %xmm8
3221; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
3222; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
3223; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm3, %xmm3
3224; AVX1-NEXT:    vpcmpgtd %xmm6, %xmm2, %xmm2
3225; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
3226; AVX1-NEXT:    vpacksswb %xmm8, %xmm2, %xmm2
3227; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
3228; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
3229; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm6, %xmm3
3230; AVX1-NEXT:    vpcmpgtd %xmm5, %xmm1, %xmm1
3231; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
3232; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm3
3233; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3234; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm5, %xmm3
3235; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm0, %xmm0
3236; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
3237; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
3238; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3239; AVX1-NEXT:    retq
3240;
3241; AVX2-LABEL: test_cmp_v32i32:
3242; AVX2:       # BB#0:
3243; AVX2-NEXT:    vpcmpgtd %ymm7, %ymm3, %ymm3
3244; AVX2-NEXT:    vpcmpgtd %ymm6, %ymm2, %ymm2
3245; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
3246; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
3247; AVX2-NEXT:    vpcmpgtd %ymm5, %ymm1, %ymm1
3248; AVX2-NEXT:    vpcmpgtd %ymm4, %ymm0, %ymm0
3249; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
3250; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3251; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
3252; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3253; AVX2-NEXT:    retq
3254;
3255; AVX512-LABEL: test_cmp_v32i32:
3256; AVX512:       # BB#0:
3257; AVX512-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
3258; AVX512-NEXT:    vpextrd $1, %xmm4, %ecx
3259; AVX512-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
3260; AVX512-NEXT:    vpextrd $1, %xmm5, %edx
3261; AVX512-NEXT:    xorl %eax, %eax
3262; AVX512-NEXT:    cmpl %ecx, %edx
3263; AVX512-NEXT:    movl $-1, %ecx
3264; AVX512-NEXT:    movl $0, %edx
3265; AVX512-NEXT:    cmovgl %ecx, %edx
3266; AVX512-NEXT:    vmovd %xmm4, %esi
3267; AVX512-NEXT:    vmovd %xmm5, %edi
3268; AVX512-NEXT:    cmpl %esi, %edi
3269; AVX512-NEXT:    movl $0, %esi
3270; AVX512-NEXT:    cmovgl %ecx, %esi
3271; AVX512-NEXT:    vmovd %esi, %xmm6
3272; AVX512-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
3273; AVX512-NEXT:    vpextrd $2, %xmm4, %edx
3274; AVX512-NEXT:    vpextrd $2, %xmm5, %esi
3275; AVX512-NEXT:    cmpl %edx, %esi
3276; AVX512-NEXT:    movl $0, %edx
3277; AVX512-NEXT:    cmovgl %ecx, %edx
3278; AVX512-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
3279; AVX512-NEXT:    vpextrd $3, %xmm4, %edx
3280; AVX512-NEXT:    vpextrd $3, %xmm5, %esi
3281; AVX512-NEXT:    cmpl %edx, %esi
3282; AVX512-NEXT:    movl $0, %edx
3283; AVX512-NEXT:    cmovgl %ecx, %edx
3284; AVX512-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
3285; AVX512-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
3286; AVX512-NEXT:    vpextrd $1, %xmm5, %edx
3287; AVX512-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
3288; AVX512-NEXT:    vpextrd $1, %xmm6, %esi
3289; AVX512-NEXT:    cmpl %edx, %esi
3290; AVX512-NEXT:    movl $0, %edx
3291; AVX512-NEXT:    cmovgl %ecx, %edx
3292; AVX512-NEXT:    vmovd %xmm5, %esi
3293; AVX512-NEXT:    vmovd %xmm6, %edi
3294; AVX512-NEXT:    cmpl %esi, %edi
3295; AVX512-NEXT:    movl $0, %esi
3296; AVX512-NEXT:    cmovgl %ecx, %esi
3297; AVX512-NEXT:    vmovd %esi, %xmm7
3298; AVX512-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
3299; AVX512-NEXT:    vpextrd $2, %xmm5, %edx
3300; AVX512-NEXT:    vpextrd $2, %xmm6, %esi
3301; AVX512-NEXT:    cmpl %edx, %esi
3302; AVX512-NEXT:    movl $0, %edx
3303; AVX512-NEXT:    cmovgl %ecx, %edx
3304; AVX512-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
3305; AVX512-NEXT:    vpextrd $3, %xmm5, %edx
3306; AVX512-NEXT:    vpextrd $3, %xmm6, %esi
3307; AVX512-NEXT:    cmpl %edx, %esi
3308; AVX512-NEXT:    movl $0, %edx
3309; AVX512-NEXT:    cmovgl %ecx, %edx
3310; AVX512-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
3311; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
3312; AVX512-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
3313; AVX512-NEXT:    vpextrd $1, %xmm5, %edx
3314; AVX512-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
3315; AVX512-NEXT:    vpextrd $1, %xmm6, %esi
3316; AVX512-NEXT:    cmpl %edx, %esi
3317; AVX512-NEXT:    movl $0, %edx
3318; AVX512-NEXT:    cmovgl %ecx, %edx
3319; AVX512-NEXT:    vmovd %xmm5, %esi
3320; AVX512-NEXT:    vmovd %xmm6, %edi
3321; AVX512-NEXT:    cmpl %esi, %edi
3322; AVX512-NEXT:    movl $0, %esi
3323; AVX512-NEXT:    cmovgl %ecx, %esi
3324; AVX512-NEXT:    vmovd %esi, %xmm7
3325; AVX512-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
3326; AVX512-NEXT:    vpextrd $2, %xmm5, %edx
3327; AVX512-NEXT:    vpextrd $2, %xmm6, %esi
3328; AVX512-NEXT:    cmpl %edx, %esi
3329; AVX512-NEXT:    movl $0, %edx
3330; AVX512-NEXT:    cmovgl %ecx, %edx
3331; AVX512-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
3332; AVX512-NEXT:    vpextrd $3, %xmm5, %edx
3333; AVX512-NEXT:    vpextrd $3, %xmm6, %esi
3334; AVX512-NEXT:    cmpl %edx, %esi
3335; AVX512-NEXT:    movl $0, %edx
3336; AVX512-NEXT:    cmovgl %ecx, %edx
3337; AVX512-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
3338; AVX512-NEXT:    vpextrd $1, %xmm2, %edx
3339; AVX512-NEXT:    vpextrd $1, %xmm0, %esi
3340; AVX512-NEXT:    cmpl %edx, %esi
3341; AVX512-NEXT:    movl $0, %edx
3342; AVX512-NEXT:    cmovgl %ecx, %edx
3343; AVX512-NEXT:    vmovd %xmm2, %esi
3344; AVX512-NEXT:    vmovd %xmm0, %edi
3345; AVX512-NEXT:    cmpl %esi, %edi
3346; AVX512-NEXT:    movl $0, %esi
3347; AVX512-NEXT:    cmovgl %ecx, %esi
3348; AVX512-NEXT:    vmovd %esi, %xmm6
3349; AVX512-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
3350; AVX512-NEXT:    vpextrd $2, %xmm2, %edx
3351; AVX512-NEXT:    vpextrd $2, %xmm0, %esi
3352; AVX512-NEXT:    cmpl %edx, %esi
3353; AVX512-NEXT:    movl $0, %edx
3354; AVX512-NEXT:    cmovgl %ecx, %edx
3355; AVX512-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
3356; AVX512-NEXT:    vpextrd $3, %xmm2, %edx
3357; AVX512-NEXT:    vpextrd $3, %xmm0, %esi
3358; AVX512-NEXT:    cmpl %edx, %esi
3359; AVX512-NEXT:    movl $0, %edx
3360; AVX512-NEXT:    cmovgl %ecx, %edx
3361; AVX512-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm0
3362; AVX512-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
3363; AVX512-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
3364; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
3365; AVX512-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
3366; AVX512-NEXT:    vpextrd $1, %xmm2, %edx
3367; AVX512-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
3368; AVX512-NEXT:    vpextrd $1, %xmm4, %esi
3369; AVX512-NEXT:    cmpl %edx, %esi
3370; AVX512-NEXT:    movl $0, %edx
3371; AVX512-NEXT:    cmovgl %ecx, %edx
3372; AVX512-NEXT:    vmovd %xmm2, %esi
3373; AVX512-NEXT:    vmovd %xmm4, %edi
3374; AVX512-NEXT:    cmpl %esi, %edi
3375; AVX512-NEXT:    movl $0, %esi
3376; AVX512-NEXT:    cmovgl %ecx, %esi
3377; AVX512-NEXT:    vmovd %esi, %xmm5
3378; AVX512-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3379; AVX512-NEXT:    vpextrd $2, %xmm2, %edx
3380; AVX512-NEXT:    vpextrd $2, %xmm4, %esi
3381; AVX512-NEXT:    cmpl %edx, %esi
3382; AVX512-NEXT:    movl $0, %edx
3383; AVX512-NEXT:    cmovgl %ecx, %edx
3384; AVX512-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
3385; AVX512-NEXT:    vpextrd $3, %xmm2, %edx
3386; AVX512-NEXT:    vpextrd $3, %xmm4, %esi
3387; AVX512-NEXT:    cmpl %edx, %esi
3388; AVX512-NEXT:    movl $0, %edx
3389; AVX512-NEXT:    cmovgl %ecx, %edx
3390; AVX512-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm2
3391; AVX512-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
3392; AVX512-NEXT:    vpextrd $1, %xmm4, %edx
3393; AVX512-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
3394; AVX512-NEXT:    vpextrd $1, %xmm5, %esi
3395; AVX512-NEXT:    cmpl %edx, %esi
3396; AVX512-NEXT:    movl $0, %edx
3397; AVX512-NEXT:    cmovgl %ecx, %edx
3398; AVX512-NEXT:    vmovd %xmm4, %esi
3399; AVX512-NEXT:    vmovd %xmm5, %edi
3400; AVX512-NEXT:    cmpl %esi, %edi
3401; AVX512-NEXT:    movl $0, %esi
3402; AVX512-NEXT:    cmovgl %ecx, %esi
3403; AVX512-NEXT:    vmovd %esi, %xmm6
3404; AVX512-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
3405; AVX512-NEXT:    vpextrd $2, %xmm4, %edx
3406; AVX512-NEXT:    vpextrd $2, %xmm5, %esi
3407; AVX512-NEXT:    cmpl %edx, %esi
3408; AVX512-NEXT:    movl $0, %edx
3409; AVX512-NEXT:    cmovgl %ecx, %edx
3410; AVX512-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
3411; AVX512-NEXT:    vpextrd $3, %xmm4, %edx
3412; AVX512-NEXT:    vpextrd $3, %xmm5, %esi
3413; AVX512-NEXT:    cmpl %edx, %esi
3414; AVX512-NEXT:    movl $0, %edx
3415; AVX512-NEXT:    cmovgl %ecx, %edx
3416; AVX512-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
3417; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
3418; AVX512-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
3419; AVX512-NEXT:    vpextrd $1, %xmm4, %edx
3420; AVX512-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
3421; AVX512-NEXT:    vpextrd $1, %xmm5, %esi
3422; AVX512-NEXT:    cmpl %edx, %esi
3423; AVX512-NEXT:    movl $0, %edx
3424; AVX512-NEXT:    cmovgl %ecx, %edx
3425; AVX512-NEXT:    vmovd %xmm4, %esi
3426; AVX512-NEXT:    vmovd %xmm5, %edi
3427; AVX512-NEXT:    cmpl %esi, %edi
3428; AVX512-NEXT:    movl $0, %esi
3429; AVX512-NEXT:    cmovgl %ecx, %esi
3430; AVX512-NEXT:    vmovd %esi, %xmm6
3431; AVX512-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
3432; AVX512-NEXT:    vpextrd $2, %xmm4, %edx
3433; AVX512-NEXT:    vpextrd $2, %xmm5, %esi
3434; AVX512-NEXT:    cmpl %edx, %esi
3435; AVX512-NEXT:    movl $0, %edx
3436; AVX512-NEXT:    cmovgl %ecx, %edx
3437; AVX512-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
3438; AVX512-NEXT:    vpextrd $3, %xmm4, %edx
3439; AVX512-NEXT:    vpextrd $3, %xmm5, %esi
3440; AVX512-NEXT:    cmpl %edx, %esi
3441; AVX512-NEXT:    movl $0, %edx
3442; AVX512-NEXT:    cmovgl %ecx, %edx
3443; AVX512-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
3444; AVX512-NEXT:    vpextrd $1, %xmm3, %edx
3445; AVX512-NEXT:    vpextrd $1, %xmm1, %esi
3446; AVX512-NEXT:    cmpl %edx, %esi
3447; AVX512-NEXT:    movl $0, %edx
3448; AVX512-NEXT:    cmovgl %ecx, %edx
3449; AVX512-NEXT:    vmovd %xmm3, %esi
3450; AVX512-NEXT:    vmovd %xmm1, %edi
3451; AVX512-NEXT:    cmpl %esi, %edi
3452; AVX512-NEXT:    movl $0, %esi
3453; AVX512-NEXT:    cmovgl %ecx, %esi
3454; AVX512-NEXT:    vmovd %esi, %xmm5
3455; AVX512-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3456; AVX512-NEXT:    vpextrd $2, %xmm3, %edx
3457; AVX512-NEXT:    vpextrd $2, %xmm1, %esi
3458; AVX512-NEXT:    cmpl %edx, %esi
3459; AVX512-NEXT:    movl $0, %edx
3460; AVX512-NEXT:    cmovgl %ecx, %edx
3461; AVX512-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
3462; AVX512-NEXT:    vpextrd $3, %xmm3, %edx
3463; AVX512-NEXT:    vpextrd $3, %xmm1, %esi
3464; AVX512-NEXT:    cmpl %edx, %esi
3465; AVX512-NEXT:    cmovgl %ecx, %eax
3466; AVX512-NEXT:    vpinsrd $3, %eax, %xmm5, %xmm1
3467; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
3468; AVX512-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
3469; AVX512-NEXT:    vpmovdb %zmm1, %xmm1
3470; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3471; AVX512-NEXT:    retq
3472  %1 = icmp sgt <32 x i32> %a0, %a1
3473  ret <32 x i1> %1
3474}
3475
3476define <64 x i1> @test_cmp_v64i16(<64 x i16> %a0, <64 x i16> %a1) nounwind {
3477; SSE2-LABEL: test_cmp_v64i16:
3478; SSE2:       # BB#0:
3479; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
3480; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [255,255,255,255,255,255,255,255]
3481; SSE2-NEXT:    pand %xmm8, %xmm1
3482; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
3483; SSE2-NEXT:    pand %xmm8, %xmm0
3484; SSE2-NEXT:    packuswb %xmm1, %xmm0
3485; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
3486; SSE2-NEXT:    pand %xmm8, %xmm3
3487; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
3488; SSE2-NEXT:    pand %xmm8, %xmm2
3489; SSE2-NEXT:    packuswb %xmm3, %xmm2
3490; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
3491; SSE2-NEXT:    pand %xmm8, %xmm5
3492; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
3493; SSE2-NEXT:    pand %xmm8, %xmm4
3494; SSE2-NEXT:    packuswb %xmm5, %xmm4
3495; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
3496; SSE2-NEXT:    pand %xmm8, %xmm7
3497; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
3498; SSE2-NEXT:    pand %xmm8, %xmm6
3499; SSE2-NEXT:    packuswb %xmm7, %xmm6
3500; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
3501; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3502; SSE2-NEXT:    andb $1, %al
3503; SSE2-NEXT:    movb %al, 6(%rdi)
3504; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
3505; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3506; SSE2-NEXT:    andb $1, %al
3507; SSE2-NEXT:    movb %al, 4(%rdi)
3508; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
3509; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3510; SSE2-NEXT:    andb $1, %al
3511; SSE2-NEXT:    movb %al, 2(%rdi)
3512; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
3513; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3514; SSE2-NEXT:    andb $1, %al
3515; SSE2-NEXT:    movb %al, (%rdi)
3516; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3517; SSE2-NEXT:    andb $1, %al
3518; SSE2-NEXT:    movb %al, 6(%rdi)
3519; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3520; SSE2-NEXT:    andb $1, %al
3521; SSE2-NEXT:    movb %al, 4(%rdi)
3522; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3523; SSE2-NEXT:    andb $1, %al
3524; SSE2-NEXT:    movb %al, 2(%rdi)
3525; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3526; SSE2-NEXT:    andb $1, %al
3527; SSE2-NEXT:    movb %al, (%rdi)
3528; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3529; SSE2-NEXT:    andb $1, %al
3530; SSE2-NEXT:    movb %al, 6(%rdi)
3531; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3532; SSE2-NEXT:    andb $1, %al
3533; SSE2-NEXT:    movb %al, 4(%rdi)
3534; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3535; SSE2-NEXT:    andb $1, %al
3536; SSE2-NEXT:    movb %al, 2(%rdi)
3537; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3538; SSE2-NEXT:    andb $1, %al
3539; SSE2-NEXT:    movb %al, (%rdi)
3540; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3541; SSE2-NEXT:    andb $1, %al
3542; SSE2-NEXT:    movb %al, 6(%rdi)
3543; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3544; SSE2-NEXT:    andb $1, %al
3545; SSE2-NEXT:    movb %al, 4(%rdi)
3546; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3547; SSE2-NEXT:    andb $1, %al
3548; SSE2-NEXT:    movb %al, 2(%rdi)
3549; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3550; SSE2-NEXT:    andb $1, %al
3551; SSE2-NEXT:    movb %al, (%rdi)
3552; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3553; SSE2-NEXT:    andb $1, %al
3554; SSE2-NEXT:    movb %al, 6(%rdi)
3555; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3556; SSE2-NEXT:    andb $1, %al
3557; SSE2-NEXT:    movb %al, 4(%rdi)
3558; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3559; SSE2-NEXT:    andb $1, %al
3560; SSE2-NEXT:    movb %al, 2(%rdi)
3561; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3562; SSE2-NEXT:    andb $1, %al
3563; SSE2-NEXT:    movb %al, (%rdi)
3564; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3565; SSE2-NEXT:    andb $1, %al
3566; SSE2-NEXT:    movb %al, 6(%rdi)
3567; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3568; SSE2-NEXT:    andb $1, %al
3569; SSE2-NEXT:    movb %al, 4(%rdi)
3570; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3571; SSE2-NEXT:    andb $1, %al
3572; SSE2-NEXT:    movb %al, 2(%rdi)
3573; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3574; SSE2-NEXT:    andb $1, %al
3575; SSE2-NEXT:    movb %al, (%rdi)
3576; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3577; SSE2-NEXT:    andb $1, %al
3578; SSE2-NEXT:    movb %al, 6(%rdi)
3579; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3580; SSE2-NEXT:    andb $1, %al
3581; SSE2-NEXT:    movb %al, 4(%rdi)
3582; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3583; SSE2-NEXT:    andb $1, %al
3584; SSE2-NEXT:    movb %al, 2(%rdi)
3585; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3586; SSE2-NEXT:    andb $1, %al
3587; SSE2-NEXT:    movb %al, (%rdi)
3588; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3589; SSE2-NEXT:    andb $1, %al
3590; SSE2-NEXT:    movb %al, 6(%rdi)
3591; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3592; SSE2-NEXT:    andb $1, %al
3593; SSE2-NEXT:    movb %al, 4(%rdi)
3594; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3595; SSE2-NEXT:    andb $1, %al
3596; SSE2-NEXT:    movb %al, 2(%rdi)
3597; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3598; SSE2-NEXT:    andb $1, %al
3599; SSE2-NEXT:    movb %al, (%rdi)
3600; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3601; SSE2-NEXT:    andb $1, %al
3602; SSE2-NEXT:    movb %al, 6(%rdi)
3603; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3604; SSE2-NEXT:    andb $1, %al
3605; SSE2-NEXT:    movb %al, 4(%rdi)
3606; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3607; SSE2-NEXT:    andb $1, %al
3608; SSE2-NEXT:    movb %al, 2(%rdi)
3609; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3610; SSE2-NEXT:    andb $1, %al
3611; SSE2-NEXT:    movb %al, (%rdi)
3612; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3613; SSE2-NEXT:    andb $1, %al
3614; SSE2-NEXT:    movb %al, 6(%rdi)
3615; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3616; SSE2-NEXT:    andb $1, %al
3617; SSE2-NEXT:    movb %al, 4(%rdi)
3618; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3619; SSE2-NEXT:    andb $1, %al
3620; SSE2-NEXT:    movb %al, 2(%rdi)
3621; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3622; SSE2-NEXT:    andb $1, %al
3623; SSE2-NEXT:    movb %al, (%rdi)
3624; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3625; SSE2-NEXT:    andb $1, %al
3626; SSE2-NEXT:    movb %al, 6(%rdi)
3627; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3628; SSE2-NEXT:    andb $1, %al
3629; SSE2-NEXT:    movb %al, 4(%rdi)
3630; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3631; SSE2-NEXT:    andb $1, %al
3632; SSE2-NEXT:    movb %al, 2(%rdi)
3633; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3634; SSE2-NEXT:    andb $1, %al
3635; SSE2-NEXT:    movb %al, (%rdi)
3636; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3637; SSE2-NEXT:    andb $1, %al
3638; SSE2-NEXT:    movb %al, 6(%rdi)
3639; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3640; SSE2-NEXT:    andb $1, %al
3641; SSE2-NEXT:    movb %al, 4(%rdi)
3642; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3643; SSE2-NEXT:    andb $1, %al
3644; SSE2-NEXT:    movb %al, 2(%rdi)
3645; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3646; SSE2-NEXT:    andb $1, %al
3647; SSE2-NEXT:    movb %al, (%rdi)
3648; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3649; SSE2-NEXT:    andb $1, %al
3650; SSE2-NEXT:    movb %al, 6(%rdi)
3651; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3652; SSE2-NEXT:    andb $1, %al
3653; SSE2-NEXT:    movb %al, 4(%rdi)
3654; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3655; SSE2-NEXT:    andb $1, %al
3656; SSE2-NEXT:    movb %al, 2(%rdi)
3657; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3658; SSE2-NEXT:    andb $1, %al
3659; SSE2-NEXT:    movb %al, (%rdi)
3660; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3661; SSE2-NEXT:    andb $1, %al
3662; SSE2-NEXT:    movb %al, 6(%rdi)
3663; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3664; SSE2-NEXT:    andb $1, %al
3665; SSE2-NEXT:    movb %al, 4(%rdi)
3666; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3667; SSE2-NEXT:    andb $1, %al
3668; SSE2-NEXT:    movb %al, 2(%rdi)
3669; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3670; SSE2-NEXT:    andb $1, %al
3671; SSE2-NEXT:    movb %al, (%rdi)
3672; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3673; SSE2-NEXT:    andb $1, %al
3674; SSE2-NEXT:    movb %al, 6(%rdi)
3675; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3676; SSE2-NEXT:    andb $1, %al
3677; SSE2-NEXT:    movb %al, 4(%rdi)
3678; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3679; SSE2-NEXT:    andb $1, %al
3680; SSE2-NEXT:    movb %al, 2(%rdi)
3681; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3682; SSE2-NEXT:    andb $1, %al
3683; SSE2-NEXT:    movb %al, (%rdi)
3684; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3685; SSE2-NEXT:    andb $1, %al
3686; SSE2-NEXT:    movb %al, 6(%rdi)
3687; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3688; SSE2-NEXT:    andb $1, %al
3689; SSE2-NEXT:    movb %al, 4(%rdi)
3690; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3691; SSE2-NEXT:    andb $1, %al
3692; SSE2-NEXT:    movb %al, 2(%rdi)
3693; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3694; SSE2-NEXT:    andb $1, %al
3695; SSE2-NEXT:    movb %al, (%rdi)
3696; SSE2-NEXT:    movq %rdi, %rax
3697; SSE2-NEXT:    retq
3698;
3699; SSE42-LABEL: test_cmp_v64i16:
3700; SSE42:       # BB#0:
3701; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
3702; SSE42-NEXT:    movdqa {{.*#+}} xmm8 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3703; SSE42-NEXT:    pshufb %xmm8, %xmm1
3704; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
3705; SSE42-NEXT:    pshufb %xmm8, %xmm0
3706; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3707; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
3708; SSE42-NEXT:    pshufb %xmm8, %xmm3
3709; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
3710; SSE42-NEXT:    pshufb %xmm8, %xmm2
3711; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
3712; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
3713; SSE42-NEXT:    pshufb %xmm8, %xmm5
3714; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
3715; SSE42-NEXT:    pshufb %xmm8, %xmm4
3716; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
3717; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
3718; SSE42-NEXT:    pshufb %xmm8, %xmm7
3719; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
3720; SSE42-NEXT:    pshufb %xmm8, %xmm6
3721; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]
3722; SSE42-NEXT:    pextrb $15, %xmm6, %eax
3723; SSE42-NEXT:    andb $1, %al
3724; SSE42-NEXT:    movb %al, 6(%rdi)
3725; SSE42-NEXT:    pextrb $14, %xmm6, %eax
3726; SSE42-NEXT:    andb $1, %al
3727; SSE42-NEXT:    movb %al, 6(%rdi)
3728; SSE42-NEXT:    pextrb $13, %xmm6, %eax
3729; SSE42-NEXT:    andb $1, %al
3730; SSE42-NEXT:    movb %al, 6(%rdi)
3731; SSE42-NEXT:    pextrb $12, %xmm6, %eax
3732; SSE42-NEXT:    andb $1, %al
3733; SSE42-NEXT:    movb %al, 6(%rdi)
3734; SSE42-NEXT:    pextrb $11, %xmm6, %eax
3735; SSE42-NEXT:    andb $1, %al
3736; SSE42-NEXT:    movb %al, 6(%rdi)
3737; SSE42-NEXT:    pextrb $10, %xmm6, %eax
3738; SSE42-NEXT:    andb $1, %al
3739; SSE42-NEXT:    movb %al, 6(%rdi)
3740; SSE42-NEXT:    pextrb $9, %xmm6, %eax
3741; SSE42-NEXT:    andb $1, %al
3742; SSE42-NEXT:    movb %al, 6(%rdi)
3743; SSE42-NEXT:    pextrb $8, %xmm6, %eax
3744; SSE42-NEXT:    andb $1, %al
3745; SSE42-NEXT:    movb %al, 6(%rdi)
3746; SSE42-NEXT:    pextrb $7, %xmm6, %eax
3747; SSE42-NEXT:    andb $1, %al
3748; SSE42-NEXT:    movb %al, 6(%rdi)
3749; SSE42-NEXT:    pextrb $6, %xmm6, %eax
3750; SSE42-NEXT:    andb $1, %al
3751; SSE42-NEXT:    movb %al, 6(%rdi)
3752; SSE42-NEXT:    pextrb $5, %xmm6, %eax
3753; SSE42-NEXT:    andb $1, %al
3754; SSE42-NEXT:    movb %al, 6(%rdi)
3755; SSE42-NEXT:    pextrb $4, %xmm6, %eax
3756; SSE42-NEXT:    andb $1, %al
3757; SSE42-NEXT:    movb %al, 6(%rdi)
3758; SSE42-NEXT:    pextrb $3, %xmm6, %eax
3759; SSE42-NEXT:    andb $1, %al
3760; SSE42-NEXT:    movb %al, 6(%rdi)
3761; SSE42-NEXT:    pextrb $2, %xmm6, %eax
3762; SSE42-NEXT:    andb $1, %al
3763; SSE42-NEXT:    movb %al, 6(%rdi)
3764; SSE42-NEXT:    pextrb $1, %xmm6, %eax
3765; SSE42-NEXT:    andb $1, %al
3766; SSE42-NEXT:    movb %al, 6(%rdi)
3767; SSE42-NEXT:    pextrb $0, %xmm6, %eax
3768; SSE42-NEXT:    andb $1, %al
3769; SSE42-NEXT:    movb %al, 6(%rdi)
3770; SSE42-NEXT:    pextrb $15, %xmm4, %eax
3771; SSE42-NEXT:    andb $1, %al
3772; SSE42-NEXT:    movb %al, 4(%rdi)
3773; SSE42-NEXT:    pextrb $14, %xmm4, %eax
3774; SSE42-NEXT:    andb $1, %al
3775; SSE42-NEXT:    movb %al, 4(%rdi)
3776; SSE42-NEXT:    pextrb $13, %xmm4, %eax
3777; SSE42-NEXT:    andb $1, %al
3778; SSE42-NEXT:    movb %al, 4(%rdi)
3779; SSE42-NEXT:    pextrb $12, %xmm4, %eax
3780; SSE42-NEXT:    andb $1, %al
3781; SSE42-NEXT:    movb %al, 4(%rdi)
3782; SSE42-NEXT:    pextrb $11, %xmm4, %eax
3783; SSE42-NEXT:    andb $1, %al
3784; SSE42-NEXT:    movb %al, 4(%rdi)
3785; SSE42-NEXT:    pextrb $10, %xmm4, %eax
3786; SSE42-NEXT:    andb $1, %al
3787; SSE42-NEXT:    movb %al, 4(%rdi)
3788; SSE42-NEXT:    pextrb $9, %xmm4, %eax
3789; SSE42-NEXT:    andb $1, %al
3790; SSE42-NEXT:    movb %al, 4(%rdi)
3791; SSE42-NEXT:    pextrb $8, %xmm4, %eax
3792; SSE42-NEXT:    andb $1, %al
3793; SSE42-NEXT:    movb %al, 4(%rdi)
3794; SSE42-NEXT:    pextrb $7, %xmm4, %eax
3795; SSE42-NEXT:    andb $1, %al
3796; SSE42-NEXT:    movb %al, 4(%rdi)
3797; SSE42-NEXT:    pextrb $6, %xmm4, %eax
3798; SSE42-NEXT:    andb $1, %al
3799; SSE42-NEXT:    movb %al, 4(%rdi)
3800; SSE42-NEXT:    pextrb $5, %xmm4, %eax
3801; SSE42-NEXT:    andb $1, %al
3802; SSE42-NEXT:    movb %al, 4(%rdi)
3803; SSE42-NEXT:    pextrb $4, %xmm4, %eax
3804; SSE42-NEXT:    andb $1, %al
3805; SSE42-NEXT:    movb %al, 4(%rdi)
3806; SSE42-NEXT:    pextrb $3, %xmm4, %eax
3807; SSE42-NEXT:    andb $1, %al
3808; SSE42-NEXT:    movb %al, 4(%rdi)
3809; SSE42-NEXT:    pextrb $2, %xmm4, %eax
3810; SSE42-NEXT:    andb $1, %al
3811; SSE42-NEXT:    movb %al, 4(%rdi)
3812; SSE42-NEXT:    pextrb $1, %xmm4, %eax
3813; SSE42-NEXT:    andb $1, %al
3814; SSE42-NEXT:    movb %al, 4(%rdi)
3815; SSE42-NEXT:    pextrb $0, %xmm4, %eax
3816; SSE42-NEXT:    andb $1, %al
3817; SSE42-NEXT:    movb %al, 4(%rdi)
3818; SSE42-NEXT:    pextrb $15, %xmm2, %eax
3819; SSE42-NEXT:    andb $1, %al
3820; SSE42-NEXT:    movb %al, 2(%rdi)
3821; SSE42-NEXT:    pextrb $14, %xmm2, %eax
3822; SSE42-NEXT:    andb $1, %al
3823; SSE42-NEXT:    movb %al, 2(%rdi)
3824; SSE42-NEXT:    pextrb $13, %xmm2, %eax
3825; SSE42-NEXT:    andb $1, %al
3826; SSE42-NEXT:    movb %al, 2(%rdi)
3827; SSE42-NEXT:    pextrb $12, %xmm2, %eax
3828; SSE42-NEXT:    andb $1, %al
3829; SSE42-NEXT:    movb %al, 2(%rdi)
3830; SSE42-NEXT:    pextrb $11, %xmm2, %eax
3831; SSE42-NEXT:    andb $1, %al
3832; SSE42-NEXT:    movb %al, 2(%rdi)
3833; SSE42-NEXT:    pextrb $10, %xmm2, %eax
3834; SSE42-NEXT:    andb $1, %al
3835; SSE42-NEXT:    movb %al, 2(%rdi)
3836; SSE42-NEXT:    pextrb $9, %xmm2, %eax
3837; SSE42-NEXT:    andb $1, %al
3838; SSE42-NEXT:    movb %al, 2(%rdi)
3839; SSE42-NEXT:    pextrb $8, %xmm2, %eax
3840; SSE42-NEXT:    andb $1, %al
3841; SSE42-NEXT:    movb %al, 2(%rdi)
3842; SSE42-NEXT:    pextrb $7, %xmm2, %eax
3843; SSE42-NEXT:    andb $1, %al
3844; SSE42-NEXT:    movb %al, 2(%rdi)
3845; SSE42-NEXT:    pextrb $6, %xmm2, %eax
3846; SSE42-NEXT:    andb $1, %al
3847; SSE42-NEXT:    movb %al, 2(%rdi)
3848; SSE42-NEXT:    pextrb $5, %xmm2, %eax
3849; SSE42-NEXT:    andb $1, %al
3850; SSE42-NEXT:    movb %al, 2(%rdi)
3851; SSE42-NEXT:    pextrb $4, %xmm2, %eax
3852; SSE42-NEXT:    andb $1, %al
3853; SSE42-NEXT:    movb %al, 2(%rdi)
3854; SSE42-NEXT:    pextrb $3, %xmm2, %eax
3855; SSE42-NEXT:    andb $1, %al
3856; SSE42-NEXT:    movb %al, 2(%rdi)
3857; SSE42-NEXT:    pextrb $2, %xmm2, %eax
3858; SSE42-NEXT:    andb $1, %al
3859; SSE42-NEXT:    movb %al, 2(%rdi)
3860; SSE42-NEXT:    pextrb $1, %xmm2, %eax
3861; SSE42-NEXT:    andb $1, %al
3862; SSE42-NEXT:    movb %al, 2(%rdi)
3863; SSE42-NEXT:    pextrb $0, %xmm2, %eax
3864; SSE42-NEXT:    andb $1, %al
3865; SSE42-NEXT:    movb %al, 2(%rdi)
3866; SSE42-NEXT:    pextrb $15, %xmm0, %eax
3867; SSE42-NEXT:    andb $1, %al
3868; SSE42-NEXT:    movb %al, (%rdi)
3869; SSE42-NEXT:    pextrb $14, %xmm0, %eax
3870; SSE42-NEXT:    andb $1, %al
3871; SSE42-NEXT:    movb %al, (%rdi)
3872; SSE42-NEXT:    pextrb $13, %xmm0, %eax
3873; SSE42-NEXT:    andb $1, %al
3874; SSE42-NEXT:    movb %al, (%rdi)
3875; SSE42-NEXT:    pextrb $12, %xmm0, %eax
3876; SSE42-NEXT:    andb $1, %al
3877; SSE42-NEXT:    movb %al, (%rdi)
3878; SSE42-NEXT:    pextrb $11, %xmm0, %eax
3879; SSE42-NEXT:    andb $1, %al
3880; SSE42-NEXT:    movb %al, (%rdi)
3881; SSE42-NEXT:    pextrb $10, %xmm0, %eax
3882; SSE42-NEXT:    andb $1, %al
3883; SSE42-NEXT:    movb %al, (%rdi)
3884; SSE42-NEXT:    pextrb $9, %xmm0, %eax
3885; SSE42-NEXT:    andb $1, %al
3886; SSE42-NEXT:    movb %al, (%rdi)
3887; SSE42-NEXT:    pextrb $8, %xmm0, %eax
3888; SSE42-NEXT:    andb $1, %al
3889; SSE42-NEXT:    movb %al, (%rdi)
3890; SSE42-NEXT:    pextrb $7, %xmm0, %eax
3891; SSE42-NEXT:    andb $1, %al
3892; SSE42-NEXT:    movb %al, (%rdi)
3893; SSE42-NEXT:    pextrb $6, %xmm0, %eax
3894; SSE42-NEXT:    andb $1, %al
3895; SSE42-NEXT:    movb %al, (%rdi)
3896; SSE42-NEXT:    pextrb $5, %xmm0, %eax
3897; SSE42-NEXT:    andb $1, %al
3898; SSE42-NEXT:    movb %al, (%rdi)
3899; SSE42-NEXT:    pextrb $4, %xmm0, %eax
3900; SSE42-NEXT:    andb $1, %al
3901; SSE42-NEXT:    movb %al, (%rdi)
3902; SSE42-NEXT:    pextrb $3, %xmm0, %eax
3903; SSE42-NEXT:    andb $1, %al
3904; SSE42-NEXT:    movb %al, (%rdi)
3905; SSE42-NEXT:    pextrb $2, %xmm0, %eax
3906; SSE42-NEXT:    andb $1, %al
3907; SSE42-NEXT:    movb %al, (%rdi)
3908; SSE42-NEXT:    pextrb $1, %xmm0, %eax
3909; SSE42-NEXT:    andb $1, %al
3910; SSE42-NEXT:    movb %al, (%rdi)
3911; SSE42-NEXT:    pextrb $0, %xmm0, %eax
3912; SSE42-NEXT:    andb $1, %al
3913; SSE42-NEXT:    movb %al, (%rdi)
3914; SSE42-NEXT:    movq %rdi, %rax
3915; SSE42-NEXT:    retq
3916;
3917; AVX1-LABEL: test_cmp_v64i16:
3918; AVX1:       # BB#0:
3919; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm8
3920; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm9
3921; AVX1-NEXT:    vpcmpgtw %xmm8, %xmm9, %xmm8
3922; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm0, %xmm0
3923; AVX1-NEXT:    vpacksswb %xmm8, %xmm0, %xmm8
3924; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm4
3925; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
3926; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm0, %xmm0
3927; AVX1-NEXT:    vpcmpgtw %xmm5, %xmm1, %xmm1
3928; AVX1-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
3929; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm0
3930; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3931; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm4, %xmm0
3932; AVX1-NEXT:    vpcmpgtw %xmm6, %xmm2, %xmm2
3933; AVX1-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
3934; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm0
3935; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
3936; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm4, %xmm0
3937; AVX1-NEXT:    vpcmpgtw %xmm7, %xmm3, %xmm3
3938; AVX1-NEXT:    vpacksswb %xmm0, %xmm3, %xmm3
3939; AVX1-NEXT:    vpextrb $15, %xmm3, %eax
3940; AVX1-NEXT:    andb $1, %al
3941; AVX1-NEXT:    movb %al, 4(%rdi)
3942; AVX1-NEXT:    vpextrb $14, %xmm3, %eax
3943; AVX1-NEXT:    andb $1, %al
3944; AVX1-NEXT:    movb %al, 4(%rdi)
3945; AVX1-NEXT:    vpextrb $13, %xmm3, %eax
3946; AVX1-NEXT:    andb $1, %al
3947; AVX1-NEXT:    movb %al, 4(%rdi)
3948; AVX1-NEXT:    vpextrb $12, %xmm3, %eax
3949; AVX1-NEXT:    andb $1, %al
3950; AVX1-NEXT:    movb %al, 4(%rdi)
3951; AVX1-NEXT:    vpextrb $11, %xmm3, %eax
3952; AVX1-NEXT:    andb $1, %al
3953; AVX1-NEXT:    movb %al, 4(%rdi)
3954; AVX1-NEXT:    vpextrb $10, %xmm3, %eax
3955; AVX1-NEXT:    andb $1, %al
3956; AVX1-NEXT:    movb %al, 4(%rdi)
3957; AVX1-NEXT:    vpextrb $9, %xmm3, %eax
3958; AVX1-NEXT:    andb $1, %al
3959; AVX1-NEXT:    movb %al, 4(%rdi)
3960; AVX1-NEXT:    vpextrb $8, %xmm3, %eax
3961; AVX1-NEXT:    andb $1, %al
3962; AVX1-NEXT:    movb %al, 4(%rdi)
3963; AVX1-NEXT:    vpextrb $7, %xmm3, %eax
3964; AVX1-NEXT:    andb $1, %al
3965; AVX1-NEXT:    movb %al, 4(%rdi)
3966; AVX1-NEXT:    vpextrb $6, %xmm3, %eax
3967; AVX1-NEXT:    andb $1, %al
3968; AVX1-NEXT:    movb %al, 4(%rdi)
3969; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
3970; AVX1-NEXT:    andb $1, %al
3971; AVX1-NEXT:    movb %al, 4(%rdi)
3972; AVX1-NEXT:    vpextrb $4, %xmm3, %eax
3973; AVX1-NEXT:    andb $1, %al
3974; AVX1-NEXT:    movb %al, 4(%rdi)
3975; AVX1-NEXT:    vpextrb $3, %xmm3, %eax
3976; AVX1-NEXT:    andb $1, %al
3977; AVX1-NEXT:    movb %al, 4(%rdi)
3978; AVX1-NEXT:    vpextrb $2, %xmm3, %eax
3979; AVX1-NEXT:    andb $1, %al
3980; AVX1-NEXT:    movb %al, 4(%rdi)
3981; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
3982; AVX1-NEXT:    andb $1, %al
3983; AVX1-NEXT:    movb %al, 4(%rdi)
3984; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
3985; AVX1-NEXT:    andb $1, %al
3986; AVX1-NEXT:    movb %al, 4(%rdi)
3987; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
3988; AVX1-NEXT:    andb $1, %al
3989; AVX1-NEXT:    movb %al, 4(%rdi)
3990; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
3991; AVX1-NEXT:    andb $1, %al
3992; AVX1-NEXT:    movb %al, 4(%rdi)
3993; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
3994; AVX1-NEXT:    andb $1, %al
3995; AVX1-NEXT:    movb %al, 4(%rdi)
3996; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
3997; AVX1-NEXT:    andb $1, %al
3998; AVX1-NEXT:    movb %al, 4(%rdi)
3999; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
4000; AVX1-NEXT:    andb $1, %al
4001; AVX1-NEXT:    movb %al, 4(%rdi)
4002; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
4003; AVX1-NEXT:    andb $1, %al
4004; AVX1-NEXT:    movb %al, 4(%rdi)
4005; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
4006; AVX1-NEXT:    andb $1, %al
4007; AVX1-NEXT:    movb %al, 4(%rdi)
4008; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
4009; AVX1-NEXT:    andb $1, %al
4010; AVX1-NEXT:    movb %al, 4(%rdi)
4011; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
4012; AVX1-NEXT:    andb $1, %al
4013; AVX1-NEXT:    movb %al, 4(%rdi)
4014; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
4015; AVX1-NEXT:    andb $1, %al
4016; AVX1-NEXT:    movb %al, 4(%rdi)
4017; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
4018; AVX1-NEXT:    andb $1, %al
4019; AVX1-NEXT:    movb %al, 4(%rdi)
4020; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
4021; AVX1-NEXT:    andb $1, %al
4022; AVX1-NEXT:    movb %al, 4(%rdi)
4023; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
4024; AVX1-NEXT:    andb $1, %al
4025; AVX1-NEXT:    movb %al, 4(%rdi)
4026; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
4027; AVX1-NEXT:    andb $1, %al
4028; AVX1-NEXT:    movb %al, 4(%rdi)
4029; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
4030; AVX1-NEXT:    andb $1, %al
4031; AVX1-NEXT:    movb %al, 4(%rdi)
4032; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
4033; AVX1-NEXT:    andb $1, %al
4034; AVX1-NEXT:    movb %al, 4(%rdi)
4035; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
4036; AVX1-NEXT:    andb $1, %al
4037; AVX1-NEXT:    movb %al, (%rdi)
4038; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
4039; AVX1-NEXT:    andb $1, %al
4040; AVX1-NEXT:    movb %al, (%rdi)
4041; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
4042; AVX1-NEXT:    andb $1, %al
4043; AVX1-NEXT:    movb %al, (%rdi)
4044; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
4045; AVX1-NEXT:    andb $1, %al
4046; AVX1-NEXT:    movb %al, (%rdi)
4047; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
4048; AVX1-NEXT:    andb $1, %al
4049; AVX1-NEXT:    movb %al, (%rdi)
4050; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
4051; AVX1-NEXT:    andb $1, %al
4052; AVX1-NEXT:    movb %al, (%rdi)
4053; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
4054; AVX1-NEXT:    andb $1, %al
4055; AVX1-NEXT:    movb %al, (%rdi)
4056; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
4057; AVX1-NEXT:    andb $1, %al
4058; AVX1-NEXT:    movb %al, (%rdi)
4059; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
4060; AVX1-NEXT:    andb $1, %al
4061; AVX1-NEXT:    movb %al, (%rdi)
4062; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
4063; AVX1-NEXT:    andb $1, %al
4064; AVX1-NEXT:    movb %al, (%rdi)
4065; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
4066; AVX1-NEXT:    andb $1, %al
4067; AVX1-NEXT:    movb %al, (%rdi)
4068; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
4069; AVX1-NEXT:    andb $1, %al
4070; AVX1-NEXT:    movb %al, (%rdi)
4071; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
4072; AVX1-NEXT:    andb $1, %al
4073; AVX1-NEXT:    movb %al, (%rdi)
4074; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
4075; AVX1-NEXT:    andb $1, %al
4076; AVX1-NEXT:    movb %al, (%rdi)
4077; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
4078; AVX1-NEXT:    andb $1, %al
4079; AVX1-NEXT:    movb %al, (%rdi)
4080; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
4081; AVX1-NEXT:    andb $1, %al
4082; AVX1-NEXT:    movb %al, (%rdi)
4083; AVX1-NEXT:    vpextrb $15, %xmm8, %eax
4084; AVX1-NEXT:    andb $1, %al
4085; AVX1-NEXT:    movb %al, (%rdi)
4086; AVX1-NEXT:    vpextrb $14, %xmm8, %eax
4087; AVX1-NEXT:    andb $1, %al
4088; AVX1-NEXT:    movb %al, (%rdi)
4089; AVX1-NEXT:    vpextrb $13, %xmm8, %eax
4090; AVX1-NEXT:    andb $1, %al
4091; AVX1-NEXT:    movb %al, (%rdi)
4092; AVX1-NEXT:    vpextrb $12, %xmm8, %eax
4093; AVX1-NEXT:    andb $1, %al
4094; AVX1-NEXT:    movb %al, (%rdi)
4095; AVX1-NEXT:    vpextrb $11, %xmm8, %eax
4096; AVX1-NEXT:    andb $1, %al
4097; AVX1-NEXT:    movb %al, (%rdi)
4098; AVX1-NEXT:    vpextrb $10, %xmm8, %eax
4099; AVX1-NEXT:    andb $1, %al
4100; AVX1-NEXT:    movb %al, (%rdi)
4101; AVX1-NEXT:    vpextrb $9, %xmm8, %eax
4102; AVX1-NEXT:    andb $1, %al
4103; AVX1-NEXT:    movb %al, (%rdi)
4104; AVX1-NEXT:    vpextrb $8, %xmm8, %eax
4105; AVX1-NEXT:    andb $1, %al
4106; AVX1-NEXT:    movb %al, (%rdi)
4107; AVX1-NEXT:    vpextrb $7, %xmm8, %eax
4108; AVX1-NEXT:    andb $1, %al
4109; AVX1-NEXT:    movb %al, (%rdi)
4110; AVX1-NEXT:    vpextrb $6, %xmm8, %eax
4111; AVX1-NEXT:    andb $1, %al
4112; AVX1-NEXT:    movb %al, (%rdi)
4113; AVX1-NEXT:    vpextrb $5, %xmm8, %eax
4114; AVX1-NEXT:    andb $1, %al
4115; AVX1-NEXT:    movb %al, (%rdi)
4116; AVX1-NEXT:    vpextrb $4, %xmm8, %eax
4117; AVX1-NEXT:    andb $1, %al
4118; AVX1-NEXT:    movb %al, (%rdi)
4119; AVX1-NEXT:    vpextrb $3, %xmm8, %eax
4120; AVX1-NEXT:    andb $1, %al
4121; AVX1-NEXT:    movb %al, (%rdi)
4122; AVX1-NEXT:    vpextrb $2, %xmm8, %eax
4123; AVX1-NEXT:    andb $1, %al
4124; AVX1-NEXT:    movb %al, (%rdi)
4125; AVX1-NEXT:    vpextrb $1, %xmm8, %eax
4126; AVX1-NEXT:    andb $1, %al
4127; AVX1-NEXT:    movb %al, (%rdi)
4128; AVX1-NEXT:    vpextrb $0, %xmm8, %eax
4129; AVX1-NEXT:    andb $1, %al
4130; AVX1-NEXT:    movb %al, (%rdi)
4131; AVX1-NEXT:    movq %rdi, %rax
4132; AVX1-NEXT:    vzeroupper
4133; AVX1-NEXT:    retq
4134;
4135; AVX2-LABEL: test_cmp_v64i16:
4136; AVX2:       # BB#0:
4137; AVX2-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
4138; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
4139; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm0
4140; AVX2-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
4141; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm4
4142; AVX2-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
4143; AVX2-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
4144; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm4
4145; AVX2-NEXT:    vpacksswb %xmm4, %xmm2, %xmm2
4146; AVX2-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
4147; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4
4148; AVX2-NEXT:    vpacksswb %xmm4, %xmm3, %xmm3
4149; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
4150; AVX2-NEXT:    andb $1, %al
4151; AVX2-NEXT:    movb %al, 4(%rdi)
4152; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
4153; AVX2-NEXT:    andb $1, %al
4154; AVX2-NEXT:    movb %al, 4(%rdi)
4155; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
4156; AVX2-NEXT:    andb $1, %al
4157; AVX2-NEXT:    movb %al, 4(%rdi)
4158; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
4159; AVX2-NEXT:    andb $1, %al
4160; AVX2-NEXT:    movb %al, 4(%rdi)
4161; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
4162; AVX2-NEXT:    andb $1, %al
4163; AVX2-NEXT:    movb %al, 4(%rdi)
4164; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
4165; AVX2-NEXT:    andb $1, %al
4166; AVX2-NEXT:    movb %al, 4(%rdi)
4167; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
4168; AVX2-NEXT:    andb $1, %al
4169; AVX2-NEXT:    movb %al, 4(%rdi)
4170; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
4171; AVX2-NEXT:    andb $1, %al
4172; AVX2-NEXT:    movb %al, 4(%rdi)
4173; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
4174; AVX2-NEXT:    andb $1, %al
4175; AVX2-NEXT:    movb %al, 4(%rdi)
4176; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
4177; AVX2-NEXT:    andb $1, %al
4178; AVX2-NEXT:    movb %al, 4(%rdi)
4179; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
4180; AVX2-NEXT:    andb $1, %al
4181; AVX2-NEXT:    movb %al, 4(%rdi)
4182; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
4183; AVX2-NEXT:    andb $1, %al
4184; AVX2-NEXT:    movb %al, 4(%rdi)
4185; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
4186; AVX2-NEXT:    andb $1, %al
4187; AVX2-NEXT:    movb %al, 4(%rdi)
4188; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
4189; AVX2-NEXT:    andb $1, %al
4190; AVX2-NEXT:    movb %al, 4(%rdi)
4191; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
4192; AVX2-NEXT:    andb $1, %al
4193; AVX2-NEXT:    movb %al, 4(%rdi)
4194; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
4195; AVX2-NEXT:    andb $1, %al
4196; AVX2-NEXT:    movb %al, 4(%rdi)
4197; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
4198; AVX2-NEXT:    andb $1, %al
4199; AVX2-NEXT:    movb %al, 4(%rdi)
4200; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
4201; AVX2-NEXT:    andb $1, %al
4202; AVX2-NEXT:    movb %al, 4(%rdi)
4203; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
4204; AVX2-NEXT:    andb $1, %al
4205; AVX2-NEXT:    movb %al, 4(%rdi)
4206; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
4207; AVX2-NEXT:    andb $1, %al
4208; AVX2-NEXT:    movb %al, 4(%rdi)
4209; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
4210; AVX2-NEXT:    andb $1, %al
4211; AVX2-NEXT:    movb %al, 4(%rdi)
4212; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
4213; AVX2-NEXT:    andb $1, %al
4214; AVX2-NEXT:    movb %al, 4(%rdi)
4215; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
4216; AVX2-NEXT:    andb $1, %al
4217; AVX2-NEXT:    movb %al, 4(%rdi)
4218; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
4219; AVX2-NEXT:    andb $1, %al
4220; AVX2-NEXT:    movb %al, 4(%rdi)
4221; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
4222; AVX2-NEXT:    andb $1, %al
4223; AVX2-NEXT:    movb %al, 4(%rdi)
4224; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
4225; AVX2-NEXT:    andb $1, %al
4226; AVX2-NEXT:    movb %al, 4(%rdi)
4227; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
4228; AVX2-NEXT:    andb $1, %al
4229; AVX2-NEXT:    movb %al, 4(%rdi)
4230; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
4231; AVX2-NEXT:    andb $1, %al
4232; AVX2-NEXT:    movb %al, 4(%rdi)
4233; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
4234; AVX2-NEXT:    andb $1, %al
4235; AVX2-NEXT:    movb %al, 4(%rdi)
4236; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
4237; AVX2-NEXT:    andb $1, %al
4238; AVX2-NEXT:    movb %al, 4(%rdi)
4239; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
4240; AVX2-NEXT:    andb $1, %al
4241; AVX2-NEXT:    movb %al, 4(%rdi)
4242; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
4243; AVX2-NEXT:    andb $1, %al
4244; AVX2-NEXT:    movb %al, 4(%rdi)
4245; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
4246; AVX2-NEXT:    andb $1, %al
4247; AVX2-NEXT:    movb %al, (%rdi)
4248; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
4249; AVX2-NEXT:    andb $1, %al
4250; AVX2-NEXT:    movb %al, (%rdi)
4251; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
4252; AVX2-NEXT:    andb $1, %al
4253; AVX2-NEXT:    movb %al, (%rdi)
4254; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
4255; AVX2-NEXT:    andb $1, %al
4256; AVX2-NEXT:    movb %al, (%rdi)
4257; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
4258; AVX2-NEXT:    andb $1, %al
4259; AVX2-NEXT:    movb %al, (%rdi)
4260; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
4261; AVX2-NEXT:    andb $1, %al
4262; AVX2-NEXT:    movb %al, (%rdi)
4263; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
4264; AVX2-NEXT:    andb $1, %al
4265; AVX2-NEXT:    movb %al, (%rdi)
4266; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
4267; AVX2-NEXT:    andb $1, %al
4268; AVX2-NEXT:    movb %al, (%rdi)
4269; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
4270; AVX2-NEXT:    andb $1, %al
4271; AVX2-NEXT:    movb %al, (%rdi)
4272; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
4273; AVX2-NEXT:    andb $1, %al
4274; AVX2-NEXT:    movb %al, (%rdi)
4275; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
4276; AVX2-NEXT:    andb $1, %al
4277; AVX2-NEXT:    movb %al, (%rdi)
4278; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
4279; AVX2-NEXT:    andb $1, %al
4280; AVX2-NEXT:    movb %al, (%rdi)
4281; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
4282; AVX2-NEXT:    andb $1, %al
4283; AVX2-NEXT:    movb %al, (%rdi)
4284; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
4285; AVX2-NEXT:    andb $1, %al
4286; AVX2-NEXT:    movb %al, (%rdi)
4287; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
4288; AVX2-NEXT:    andb $1, %al
4289; AVX2-NEXT:    movb %al, (%rdi)
4290; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
4291; AVX2-NEXT:    andb $1, %al
4292; AVX2-NEXT:    movb %al, (%rdi)
4293; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
4294; AVX2-NEXT:    andb $1, %al
4295; AVX2-NEXT:    movb %al, (%rdi)
4296; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
4297; AVX2-NEXT:    andb $1, %al
4298; AVX2-NEXT:    movb %al, (%rdi)
4299; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
4300; AVX2-NEXT:    andb $1, %al
4301; AVX2-NEXT:    movb %al, (%rdi)
4302; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
4303; AVX2-NEXT:    andb $1, %al
4304; AVX2-NEXT:    movb %al, (%rdi)
4305; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
4306; AVX2-NEXT:    andb $1, %al
4307; AVX2-NEXT:    movb %al, (%rdi)
4308; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
4309; AVX2-NEXT:    andb $1, %al
4310; AVX2-NEXT:    movb %al, (%rdi)
4311; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
4312; AVX2-NEXT:    andb $1, %al
4313; AVX2-NEXT:    movb %al, (%rdi)
4314; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
4315; AVX2-NEXT:    andb $1, %al
4316; AVX2-NEXT:    movb %al, (%rdi)
4317; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
4318; AVX2-NEXT:    andb $1, %al
4319; AVX2-NEXT:    movb %al, (%rdi)
4320; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
4321; AVX2-NEXT:    andb $1, %al
4322; AVX2-NEXT:    movb %al, (%rdi)
4323; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
4324; AVX2-NEXT:    andb $1, %al
4325; AVX2-NEXT:    movb %al, (%rdi)
4326; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
4327; AVX2-NEXT:    andb $1, %al
4328; AVX2-NEXT:    movb %al, (%rdi)
4329; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
4330; AVX2-NEXT:    andb $1, %al
4331; AVX2-NEXT:    movb %al, (%rdi)
4332; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
4333; AVX2-NEXT:    andb $1, %al
4334; AVX2-NEXT:    movb %al, (%rdi)
4335; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
4336; AVX2-NEXT:    andb $1, %al
4337; AVX2-NEXT:    movb %al, (%rdi)
4338; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
4339; AVX2-NEXT:    andb $1, %al
4340; AVX2-NEXT:    movb %al, (%rdi)
4341; AVX2-NEXT:    movq %rdi, %rax
4342; AVX2-NEXT:    vzeroupper
4343; AVX2-NEXT:    retq
4344;
4345; AVX512-LABEL: test_cmp_v64i16:
4346; AVX512:       # BB#0:
4347; AVX512-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
4348; AVX512-NEXT:    vpmovsxwd %ymm3, %zmm3
4349; AVX512-NEXT:    vpslld $31, %zmm3, %zmm3
4350; AVX512-NEXT:    vptestmd %zmm3, %zmm3, %k0
4351; AVX512-NEXT:    kshiftlw $14, %k0, %k1
4352; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4353; AVX512-NEXT:    kmovw %k1, %eax
4354; AVX512-NEXT:    kshiftlw $15, %k0, %k1
4355; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4356; AVX512-NEXT:    kmovw %k1, %ecx
4357; AVX512-NEXT:    vmovd %ecx, %xmm3
4358; AVX512-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
4359; AVX512-NEXT:    kshiftlw $13, %k0, %k1
4360; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4361; AVX512-NEXT:    kmovw %k1, %eax
4362; AVX512-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
4363; AVX512-NEXT:    kshiftlw $12, %k0, %k1
4364; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4365; AVX512-NEXT:    kmovw %k1, %eax
4366; AVX512-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
4367; AVX512-NEXT:    kshiftlw $11, %k0, %k1
4368; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4369; AVX512-NEXT:    kmovw %k1, %eax
4370; AVX512-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
4371; AVX512-NEXT:    kshiftlw $10, %k0, %k1
4372; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4373; AVX512-NEXT:    kmovw %k1, %eax
4374; AVX512-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
4375; AVX512-NEXT:    kshiftlw $9, %k0, %k1
4376; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4377; AVX512-NEXT:    kmovw %k1, %eax
4378; AVX512-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
4379; AVX512-NEXT:    kshiftlw $8, %k0, %k1
4380; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4381; AVX512-NEXT:    kmovw %k1, %eax
4382; AVX512-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
4383; AVX512-NEXT:    kshiftlw $7, %k0, %k1
4384; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4385; AVX512-NEXT:    kmovw %k1, %eax
4386; AVX512-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
4387; AVX512-NEXT:    kshiftlw $6, %k0, %k1
4388; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4389; AVX512-NEXT:    kmovw %k1, %eax
4390; AVX512-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
4391; AVX512-NEXT:    kshiftlw $5, %k0, %k1
4392; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4393; AVX512-NEXT:    kmovw %k1, %eax
4394; AVX512-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
4395; AVX512-NEXT:    kshiftlw $4, %k0, %k1
4396; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4397; AVX512-NEXT:    kmovw %k1, %eax
4398; AVX512-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
4399; AVX512-NEXT:    kshiftlw $3, %k0, %k1
4400; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4401; AVX512-NEXT:    kmovw %k1, %eax
4402; AVX512-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
4403; AVX512-NEXT:    kshiftlw $2, %k0, %k1
4404; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4405; AVX512-NEXT:    kmovw %k1, %eax
4406; AVX512-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
4407; AVX512-NEXT:    kshiftlw $1, %k0, %k1
4408; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4409; AVX512-NEXT:    kmovw %k1, %eax
4410; AVX512-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
4411; AVX512-NEXT:    kshiftrw $15, %k0, %k0
4412; AVX512-NEXT:    kmovw %k0, %eax
4413; AVX512-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm3
4414; AVX512-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
4415; AVX512-NEXT:    vpmovsxwd %ymm2, %zmm2
4416; AVX512-NEXT:    vpslld $31, %zmm2, %zmm2
4417; AVX512-NEXT:    vptestmd %zmm2, %zmm2, %k0
4418; AVX512-NEXT:    kshiftlw $14, %k0, %k1
4419; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4420; AVX512-NEXT:    kmovw %k1, %eax
4421; AVX512-NEXT:    kshiftlw $15, %k0, %k1
4422; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4423; AVX512-NEXT:    kmovw %k1, %ecx
4424; AVX512-NEXT:    vmovd %ecx, %xmm2
4425; AVX512-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm2
4426; AVX512-NEXT:    kshiftlw $13, %k0, %k1
4427; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4428; AVX512-NEXT:    kmovw %k1, %eax
4429; AVX512-NEXT:    vpinsrb $2, %eax, %xmm2, %xmm2
4430; AVX512-NEXT:    kshiftlw $12, %k0, %k1
4431; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4432; AVX512-NEXT:    kmovw %k1, %eax
4433; AVX512-NEXT:    vpinsrb $3, %eax, %xmm2, %xmm2
4434; AVX512-NEXT:    kshiftlw $11, %k0, %k1
4435; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4436; AVX512-NEXT:    kmovw %k1, %eax
4437; AVX512-NEXT:    vpinsrb $4, %eax, %xmm2, %xmm2
4438; AVX512-NEXT:    kshiftlw $10, %k0, %k1
4439; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4440; AVX512-NEXT:    kmovw %k1, %eax
4441; AVX512-NEXT:    vpinsrb $5, %eax, %xmm2, %xmm2
4442; AVX512-NEXT:    kshiftlw $9, %k0, %k1
4443; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4444; AVX512-NEXT:    kmovw %k1, %eax
4445; AVX512-NEXT:    vpinsrb $6, %eax, %xmm2, %xmm2
4446; AVX512-NEXT:    kshiftlw $8, %k0, %k1
4447; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4448; AVX512-NEXT:    kmovw %k1, %eax
4449; AVX512-NEXT:    vpinsrb $7, %eax, %xmm2, %xmm2
4450; AVX512-NEXT:    kshiftlw $7, %k0, %k1
4451; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4452; AVX512-NEXT:    kmovw %k1, %eax
4453; AVX512-NEXT:    vpinsrb $8, %eax, %xmm2, %xmm2
4454; AVX512-NEXT:    kshiftlw $6, %k0, %k1
4455; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4456; AVX512-NEXT:    kmovw %k1, %eax
4457; AVX512-NEXT:    vpinsrb $9, %eax, %xmm2, %xmm2
4458; AVX512-NEXT:    kshiftlw $5, %k0, %k1
4459; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4460; AVX512-NEXT:    kmovw %k1, %eax
4461; AVX512-NEXT:    vpinsrb $10, %eax, %xmm2, %xmm2
4462; AVX512-NEXT:    kshiftlw $4, %k0, %k1
4463; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4464; AVX512-NEXT:    kmovw %k1, %eax
4465; AVX512-NEXT:    vpinsrb $11, %eax, %xmm2, %xmm2
4466; AVX512-NEXT:    kshiftlw $3, %k0, %k1
4467; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4468; AVX512-NEXT:    kmovw %k1, %eax
4469; AVX512-NEXT:    vpinsrb $12, %eax, %xmm2, %xmm2
4470; AVX512-NEXT:    kshiftlw $2, %k0, %k1
4471; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4472; AVX512-NEXT:    kmovw %k1, %eax
4473; AVX512-NEXT:    vpinsrb $13, %eax, %xmm2, %xmm2
4474; AVX512-NEXT:    kshiftlw $1, %k0, %k1
4475; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4476; AVX512-NEXT:    kmovw %k1, %eax
4477; AVX512-NEXT:    vpinsrb $14, %eax, %xmm2, %xmm2
4478; AVX512-NEXT:    kshiftrw $15, %k0, %k0
4479; AVX512-NEXT:    kmovw %k0, %eax
4480; AVX512-NEXT:    vpinsrb $15, %eax, %xmm2, %xmm2
4481; AVX512-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
4482; AVX512-NEXT:    vpsllw $7, %ymm2, %ymm2
4483; AVX512-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]
4484; AVX512-NEXT:    vpand %ymm3, %ymm2, %ymm2
4485; AVX512-NEXT:    vpxor %ymm6, %ymm6, %ymm6
4486; AVX512-NEXT:    vpcmpgtb %ymm2, %ymm6, %ymm2
4487; AVX512-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
4488; AVX512-NEXT:    vpmovsxwd %ymm1, %zmm1
4489; AVX512-NEXT:    vpslld $31, %zmm1, %zmm1
4490; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k0
4491; AVX512-NEXT:    kshiftlw $14, %k0, %k1
4492; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4493; AVX512-NEXT:    kmovw %k1, %eax
4494; AVX512-NEXT:    kshiftlw $15, %k0, %k1
4495; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4496; AVX512-NEXT:    kmovw %k1, %ecx
4497; AVX512-NEXT:    vmovd %ecx, %xmm1
4498; AVX512-NEXT:    vpinsrb $1, %eax, %xmm1, %xmm1
4499; AVX512-NEXT:    kshiftlw $13, %k0, %k1
4500; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4501; AVX512-NEXT:    kmovw %k1, %eax
4502; AVX512-NEXT:    vpinsrb $2, %eax, %xmm1, %xmm1
4503; AVX512-NEXT:    kshiftlw $12, %k0, %k1
4504; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4505; AVX512-NEXT:    kmovw %k1, %eax
4506; AVX512-NEXT:    vpinsrb $3, %eax, %xmm1, %xmm1
4507; AVX512-NEXT:    kshiftlw $11, %k0, %k1
4508; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4509; AVX512-NEXT:    kmovw %k1, %eax
4510; AVX512-NEXT:    vpinsrb $4, %eax, %xmm1, %xmm1
4511; AVX512-NEXT:    kshiftlw $10, %k0, %k1
4512; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4513; AVX512-NEXT:    kmovw %k1, %eax
4514; AVX512-NEXT:    vpinsrb $5, %eax, %xmm1, %xmm1
4515; AVX512-NEXT:    kshiftlw $9, %k0, %k1
4516; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4517; AVX512-NEXT:    kmovw %k1, %eax
4518; AVX512-NEXT:    vpinsrb $6, %eax, %xmm1, %xmm1
4519; AVX512-NEXT:    kshiftlw $8, %k0, %k1
4520; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4521; AVX512-NEXT:    kmovw %k1, %eax
4522; AVX512-NEXT:    vpinsrb $7, %eax, %xmm1, %xmm1
4523; AVX512-NEXT:    kshiftlw $7, %k0, %k1
4524; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4525; AVX512-NEXT:    kmovw %k1, %eax
4526; AVX512-NEXT:    vpinsrb $8, %eax, %xmm1, %xmm1
4527; AVX512-NEXT:    kshiftlw $6, %k0, %k1
4528; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4529; AVX512-NEXT:    kmovw %k1, %eax
4530; AVX512-NEXT:    vpinsrb $9, %eax, %xmm1, %xmm1
4531; AVX512-NEXT:    kshiftlw $5, %k0, %k1
4532; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4533; AVX512-NEXT:    kmovw %k1, %eax
4534; AVX512-NEXT:    vpinsrb $10, %eax, %xmm1, %xmm1
4535; AVX512-NEXT:    kshiftlw $4, %k0, %k1
4536; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4537; AVX512-NEXT:    kmovw %k1, %eax
4538; AVX512-NEXT:    vpinsrb $11, %eax, %xmm1, %xmm1
4539; AVX512-NEXT:    kshiftlw $3, %k0, %k1
4540; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4541; AVX512-NEXT:    kmovw %k1, %eax
4542; AVX512-NEXT:    vpinsrb $12, %eax, %xmm1, %xmm1
4543; AVX512-NEXT:    kshiftlw $2, %k0, %k1
4544; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4545; AVX512-NEXT:    kmovw %k1, %eax
4546; AVX512-NEXT:    vpinsrb $13, %eax, %xmm1, %xmm1
4547; AVX512-NEXT:    kshiftlw $1, %k0, %k1
4548; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4549; AVX512-NEXT:    kmovw %k1, %eax
4550; AVX512-NEXT:    vpinsrb $14, %eax, %xmm1, %xmm1
4551; AVX512-NEXT:    kshiftrw $15, %k0, %k0
4552; AVX512-NEXT:    kmovw %k0, %eax
4553; AVX512-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm1
4554; AVX512-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
4555; AVX512-NEXT:    vpmovsxwd %ymm0, %zmm0
4556; AVX512-NEXT:    vpslld $31, %zmm0, %zmm0
4557; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k0
4558; AVX512-NEXT:    kshiftlw $14, %k0, %k1
4559; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4560; AVX512-NEXT:    kmovw %k1, %eax
4561; AVX512-NEXT:    kshiftlw $15, %k0, %k1
4562; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4563; AVX512-NEXT:    kmovw %k1, %ecx
4564; AVX512-NEXT:    vmovd %ecx, %xmm0
4565; AVX512-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0
4566; AVX512-NEXT:    kshiftlw $13, %k0, %k1
4567; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4568; AVX512-NEXT:    kmovw %k1, %eax
4569; AVX512-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0
4570; AVX512-NEXT:    kshiftlw $12, %k0, %k1
4571; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4572; AVX512-NEXT:    kmovw %k1, %eax
4573; AVX512-NEXT:    vpinsrb $3, %eax, %xmm0, %xmm0
4574; AVX512-NEXT:    kshiftlw $11, %k0, %k1
4575; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4576; AVX512-NEXT:    kmovw %k1, %eax
4577; AVX512-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0
4578; AVX512-NEXT:    kshiftlw $10, %k0, %k1
4579; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4580; AVX512-NEXT:    kmovw %k1, %eax
4581; AVX512-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0
4582; AVX512-NEXT:    kshiftlw $9, %k0, %k1
4583; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4584; AVX512-NEXT:    kmovw %k1, %eax
4585; AVX512-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0
4586; AVX512-NEXT:    kshiftlw $8, %k0, %k1
4587; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4588; AVX512-NEXT:    kmovw %k1, %eax
4589; AVX512-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0
4590; AVX512-NEXT:    kshiftlw $7, %k0, %k1
4591; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4592; AVX512-NEXT:    kmovw %k1, %eax
4593; AVX512-NEXT:    vpinsrb $8, %eax, %xmm0, %xmm0
4594; AVX512-NEXT:    kshiftlw $6, %k0, %k1
4595; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4596; AVX512-NEXT:    kmovw %k1, %eax
4597; AVX512-NEXT:    vpinsrb $9, %eax, %xmm0, %xmm0
4598; AVX512-NEXT:    kshiftlw $5, %k0, %k1
4599; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4600; AVX512-NEXT:    kmovw %k1, %eax
4601; AVX512-NEXT:    vpinsrb $10, %eax, %xmm0, %xmm0
4602; AVX512-NEXT:    kshiftlw $4, %k0, %k1
4603; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4604; AVX512-NEXT:    kmovw %k1, %eax
4605; AVX512-NEXT:    vpinsrb $11, %eax, %xmm0, %xmm0
4606; AVX512-NEXT:    kshiftlw $3, %k0, %k1
4607; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4608; AVX512-NEXT:    kmovw %k1, %eax
4609; AVX512-NEXT:    vpinsrb $12, %eax, %xmm0, %xmm0
4610; AVX512-NEXT:    kshiftlw $2, %k0, %k1
4611; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4612; AVX512-NEXT:    kmovw %k1, %eax
4613; AVX512-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0
4614; AVX512-NEXT:    kshiftlw $1, %k0, %k1
4615; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4616; AVX512-NEXT:    kmovw %k1, %eax
4617; AVX512-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0
4618; AVX512-NEXT:    kshiftrw $15, %k0, %k0
4619; AVX512-NEXT:    kmovw %k0, %eax
4620; AVX512-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0
4621; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4622; AVX512-NEXT:    vpsllw $7, %ymm0, %ymm0
4623; AVX512-NEXT:    vpand %ymm3, %ymm0, %ymm0
4624; AVX512-NEXT:    vpcmpgtb %ymm0, %ymm6, %ymm0
4625; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
4626; AVX512-NEXT:    vextracti128 $1, %ymm2, %xmm3
4627; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4628; AVX512-NEXT:    # kill: %XMM2<def> %XMM2<kill> %YMM2<kill>
4629; AVX512-NEXT:    retq
4630  %1 = icmp sgt <64 x i16> %a0, %a1
4631  ret <64 x i1> %1
4632}
4633
4634define <128 x i1> @test_cmp_v128i8(<128 x i8> %a0, <128 x i8> %a1) nounwind {
4635; SSE2-LABEL: test_cmp_v128i8:
4636; SSE2:       # BB#0:
4637; SSE2-NEXT:    pushq %rax
4638; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
4639; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
4640; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
4641; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
4642; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
4643; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
4644; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
4645; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
4646; SSE2-NEXT:    movdqa %xmm7, -{{[0-9]+}}(%rsp)
4647; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4648; SSE2-NEXT:    andb $1, %al
4649; SSE2-NEXT:    movb %al, 14(%rdi)
4650; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
4651; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4652; SSE2-NEXT:    andb $1, %al
4653; SSE2-NEXT:    movb %al, 12(%rdi)
4654; SSE2-NEXT:    movdqa %xmm5, -{{[0-9]+}}(%rsp)
4655; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4656; SSE2-NEXT:    andb $1, %al
4657; SSE2-NEXT:    movb %al, 10(%rdi)
4658; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
4659; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4660; SSE2-NEXT:    andb $1, %al
4661; SSE2-NEXT:    movb %al, 8(%rdi)
4662; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
4663; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4664; SSE2-NEXT:    andb $1, %al
4665; SSE2-NEXT:    movb %al, 6(%rdi)
4666; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
4667; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4668; SSE2-NEXT:    andb $1, %al
4669; SSE2-NEXT:    movb %al, 4(%rdi)
4670; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
4671; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4672; SSE2-NEXT:    andb $1, %al
4673; SSE2-NEXT:    movb %al, 2(%rdi)
4674; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
4675; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4676; SSE2-NEXT:    andb $1, %al
4677; SSE2-NEXT:    movb %al, (%rdi)
4678; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4679; SSE2-NEXT:    andb $1, %al
4680; SSE2-NEXT:    movb %al, 14(%rdi)
4681; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4682; SSE2-NEXT:    andb $1, %al
4683; SSE2-NEXT:    movb %al, 12(%rdi)
4684; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4685; SSE2-NEXT:    andb $1, %al
4686; SSE2-NEXT:    movb %al, 10(%rdi)
4687; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4688; SSE2-NEXT:    andb $1, %al
4689; SSE2-NEXT:    movb %al, 8(%rdi)
4690; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4691; SSE2-NEXT:    andb $1, %al
4692; SSE2-NEXT:    movb %al, 6(%rdi)
4693; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4694; SSE2-NEXT:    andb $1, %al
4695; SSE2-NEXT:    movb %al, 4(%rdi)
4696; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4697; SSE2-NEXT:    andb $1, %al
4698; SSE2-NEXT:    movb %al, 2(%rdi)
4699; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4700; SSE2-NEXT:    andb $1, %al
4701; SSE2-NEXT:    movb %al, (%rdi)
4702; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4703; SSE2-NEXT:    andb $1, %al
4704; SSE2-NEXT:    movb %al, 14(%rdi)
4705; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4706; SSE2-NEXT:    andb $1, %al
4707; SSE2-NEXT:    movb %al, 12(%rdi)
4708; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4709; SSE2-NEXT:    andb $1, %al
4710; SSE2-NEXT:    movb %al, 10(%rdi)
4711; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4712; SSE2-NEXT:    andb $1, %al
4713; SSE2-NEXT:    movb %al, 8(%rdi)
4714; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4715; SSE2-NEXT:    andb $1, %al
4716; SSE2-NEXT:    movb %al, 6(%rdi)
4717; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4718; SSE2-NEXT:    andb $1, %al
4719; SSE2-NEXT:    movb %al, 4(%rdi)
4720; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4721; SSE2-NEXT:    andb $1, %al
4722; SSE2-NEXT:    movb %al, 2(%rdi)
4723; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4724; SSE2-NEXT:    andb $1, %al
4725; SSE2-NEXT:    movb %al, (%rdi)
4726; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4727; SSE2-NEXT:    andb $1, %al
4728; SSE2-NEXT:    movb %al, 14(%rdi)
4729; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4730; SSE2-NEXT:    andb $1, %al
4731; SSE2-NEXT:    movb %al, 12(%rdi)
4732; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4733; SSE2-NEXT:    andb $1, %al
4734; SSE2-NEXT:    movb %al, 10(%rdi)
4735; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4736; SSE2-NEXT:    andb $1, %al
4737; SSE2-NEXT:    movb %al, 8(%rdi)
4738; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4739; SSE2-NEXT:    andb $1, %al
4740; SSE2-NEXT:    movb %al, 6(%rdi)
4741; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4742; SSE2-NEXT:    andb $1, %al
4743; SSE2-NEXT:    movb %al, 4(%rdi)
4744; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4745; SSE2-NEXT:    andb $1, %al
4746; SSE2-NEXT:    movb %al, 2(%rdi)
4747; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4748; SSE2-NEXT:    andb $1, %al
4749; SSE2-NEXT:    movb %al, (%rdi)
4750; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4751; SSE2-NEXT:    andb $1, %al
4752; SSE2-NEXT:    movb %al, 14(%rdi)
4753; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4754; SSE2-NEXT:    andb $1, %al
4755; SSE2-NEXT:    movb %al, 12(%rdi)
4756; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4757; SSE2-NEXT:    andb $1, %al
4758; SSE2-NEXT:    movb %al, 10(%rdi)
4759; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4760; SSE2-NEXT:    andb $1, %al
4761; SSE2-NEXT:    movb %al, 8(%rdi)
4762; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4763; SSE2-NEXT:    andb $1, %al
4764; SSE2-NEXT:    movb %al, 6(%rdi)
4765; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4766; SSE2-NEXT:    andb $1, %al
4767; SSE2-NEXT:    movb %al, 4(%rdi)
4768; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4769; SSE2-NEXT:    andb $1, %al
4770; SSE2-NEXT:    movb %al, 2(%rdi)
4771; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4772; SSE2-NEXT:    andb $1, %al
4773; SSE2-NEXT:    movb %al, (%rdi)
4774; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4775; SSE2-NEXT:    andb $1, %al
4776; SSE2-NEXT:    movb %al, 14(%rdi)
4777; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4778; SSE2-NEXT:    andb $1, %al
4779; SSE2-NEXT:    movb %al, 12(%rdi)
4780; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4781; SSE2-NEXT:    andb $1, %al
4782; SSE2-NEXT:    movb %al, 10(%rdi)
4783; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4784; SSE2-NEXT:    andb $1, %al
4785; SSE2-NEXT:    movb %al, 8(%rdi)
4786; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4787; SSE2-NEXT:    andb $1, %al
4788; SSE2-NEXT:    movb %al, 6(%rdi)
4789; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4790; SSE2-NEXT:    andb $1, %al
4791; SSE2-NEXT:    movb %al, 4(%rdi)
4792; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4793; SSE2-NEXT:    andb $1, %al
4794; SSE2-NEXT:    movb %al, 2(%rdi)
4795; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4796; SSE2-NEXT:    andb $1, %al
4797; SSE2-NEXT:    movb %al, (%rdi)
4798; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4799; SSE2-NEXT:    andb $1, %al
4800; SSE2-NEXT:    movb %al, 14(%rdi)
4801; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4802; SSE2-NEXT:    andb $1, %al
4803; SSE2-NEXT:    movb %al, 12(%rdi)
4804; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4805; SSE2-NEXT:    andb $1, %al
4806; SSE2-NEXT:    movb %al, 10(%rdi)
4807; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4808; SSE2-NEXT:    andb $1, %al
4809; SSE2-NEXT:    movb %al, 8(%rdi)
4810; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4811; SSE2-NEXT:    andb $1, %al
4812; SSE2-NEXT:    movb %al, 6(%rdi)
4813; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4814; SSE2-NEXT:    andb $1, %al
4815; SSE2-NEXT:    movb %al, 4(%rdi)
4816; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4817; SSE2-NEXT:    andb $1, %al
4818; SSE2-NEXT:    movb %al, 2(%rdi)
4819; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4820; SSE2-NEXT:    andb $1, %al
4821; SSE2-NEXT:    movb %al, (%rdi)
4822; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4823; SSE2-NEXT:    andb $1, %al
4824; SSE2-NEXT:    movb %al, 14(%rdi)
4825; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4826; SSE2-NEXT:    andb $1, %al
4827; SSE2-NEXT:    movb %al, 12(%rdi)
4828; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4829; SSE2-NEXT:    andb $1, %al
4830; SSE2-NEXT:    movb %al, 10(%rdi)
4831; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4832; SSE2-NEXT:    andb $1, %al
4833; SSE2-NEXT:    movb %al, 8(%rdi)
4834; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4835; SSE2-NEXT:    andb $1, %al
4836; SSE2-NEXT:    movb %al, 6(%rdi)
4837; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4838; SSE2-NEXT:    andb $1, %al
4839; SSE2-NEXT:    movb %al, 4(%rdi)
4840; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4841; SSE2-NEXT:    andb $1, %al
4842; SSE2-NEXT:    movb %al, 2(%rdi)
4843; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4844; SSE2-NEXT:    andb $1, %al
4845; SSE2-NEXT:    movb %al, (%rdi)
4846; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4847; SSE2-NEXT:    andb $1, %al
4848; SSE2-NEXT:    movb %al, 14(%rdi)
4849; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4850; SSE2-NEXT:    andb $1, %al
4851; SSE2-NEXT:    movb %al, 12(%rdi)
4852; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4853; SSE2-NEXT:    andb $1, %al
4854; SSE2-NEXT:    movb %al, 10(%rdi)
4855; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4856; SSE2-NEXT:    andb $1, %al
4857; SSE2-NEXT:    movb %al, 8(%rdi)
4858; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4859; SSE2-NEXT:    andb $1, %al
4860; SSE2-NEXT:    movb %al, 6(%rdi)
4861; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4862; SSE2-NEXT:    andb $1, %al
4863; SSE2-NEXT:    movb %al, 4(%rdi)
4864; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4865; SSE2-NEXT:    andb $1, %al
4866; SSE2-NEXT:    movb %al, 2(%rdi)
4867; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4868; SSE2-NEXT:    andb $1, %al
4869; SSE2-NEXT:    movb %al, (%rdi)
4870; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4871; SSE2-NEXT:    andb $1, %al
4872; SSE2-NEXT:    movb %al, 14(%rdi)
4873; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4874; SSE2-NEXT:    andb $1, %al
4875; SSE2-NEXT:    movb %al, 12(%rdi)
4876; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4877; SSE2-NEXT:    andb $1, %al
4878; SSE2-NEXT:    movb %al, 10(%rdi)
4879; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4880; SSE2-NEXT:    andb $1, %al
4881; SSE2-NEXT:    movb %al, 8(%rdi)
4882; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4883; SSE2-NEXT:    andb $1, %al
4884; SSE2-NEXT:    movb %al, 6(%rdi)
4885; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4886; SSE2-NEXT:    andb $1, %al
4887; SSE2-NEXT:    movb %al, 4(%rdi)
4888; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4889; SSE2-NEXT:    andb $1, %al
4890; SSE2-NEXT:    movb %al, 2(%rdi)
4891; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4892; SSE2-NEXT:    andb $1, %al
4893; SSE2-NEXT:    movb %al, (%rdi)
4894; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4895; SSE2-NEXT:    andb $1, %al
4896; SSE2-NEXT:    movb %al, 14(%rdi)
4897; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4898; SSE2-NEXT:    andb $1, %al
4899; SSE2-NEXT:    movb %al, 12(%rdi)
4900; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4901; SSE2-NEXT:    andb $1, %al
4902; SSE2-NEXT:    movb %al, 10(%rdi)
4903; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4904; SSE2-NEXT:    andb $1, %al
4905; SSE2-NEXT:    movb %al, 8(%rdi)
4906; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4907; SSE2-NEXT:    andb $1, %al
4908; SSE2-NEXT:    movb %al, 6(%rdi)
4909; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4910; SSE2-NEXT:    andb $1, %al
4911; SSE2-NEXT:    movb %al, 4(%rdi)
4912; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4913; SSE2-NEXT:    andb $1, %al
4914; SSE2-NEXT:    movb %al, 2(%rdi)
4915; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4916; SSE2-NEXT:    andb $1, %al
4917; SSE2-NEXT:    movb %al, (%rdi)
4918; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4919; SSE2-NEXT:    andb $1, %al
4920; SSE2-NEXT:    movb %al, 14(%rdi)
4921; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4922; SSE2-NEXT:    andb $1, %al
4923; SSE2-NEXT:    movb %al, 12(%rdi)
4924; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4925; SSE2-NEXT:    andb $1, %al
4926; SSE2-NEXT:    movb %al, 10(%rdi)
4927; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4928; SSE2-NEXT:    andb $1, %al
4929; SSE2-NEXT:    movb %al, 8(%rdi)
4930; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4931; SSE2-NEXT:    andb $1, %al
4932; SSE2-NEXT:    movb %al, 6(%rdi)
4933; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4934; SSE2-NEXT:    andb $1, %al
4935; SSE2-NEXT:    movb %al, 4(%rdi)
4936; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4937; SSE2-NEXT:    andb $1, %al
4938; SSE2-NEXT:    movb %al, 2(%rdi)
4939; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4940; SSE2-NEXT:    andb $1, %al
4941; SSE2-NEXT:    movb %al, (%rdi)
4942; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4943; SSE2-NEXT:    andb $1, %al
4944; SSE2-NEXT:    movb %al, 14(%rdi)
4945; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4946; SSE2-NEXT:    andb $1, %al
4947; SSE2-NEXT:    movb %al, 12(%rdi)
4948; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4949; SSE2-NEXT:    andb $1, %al
4950; SSE2-NEXT:    movb %al, 10(%rdi)
4951; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4952; SSE2-NEXT:    andb $1, %al
4953; SSE2-NEXT:    movb %al, 8(%rdi)
4954; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4955; SSE2-NEXT:    andb $1, %al
4956; SSE2-NEXT:    movb %al, 6(%rdi)
4957; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4958; SSE2-NEXT:    andb $1, %al
4959; SSE2-NEXT:    movb %al, 4(%rdi)
4960; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4961; SSE2-NEXT:    andb $1, %al
4962; SSE2-NEXT:    movb %al, 2(%rdi)
4963; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4964; SSE2-NEXT:    andb $1, %al
4965; SSE2-NEXT:    movb %al, (%rdi)
4966; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4967; SSE2-NEXT:    andb $1, %al
4968; SSE2-NEXT:    movb %al, 14(%rdi)
4969; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4970; SSE2-NEXT:    andb $1, %al
4971; SSE2-NEXT:    movb %al, 12(%rdi)
4972; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4973; SSE2-NEXT:    andb $1, %al
4974; SSE2-NEXT:    movb %al, 10(%rdi)
4975; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4976; SSE2-NEXT:    andb $1, %al
4977; SSE2-NEXT:    movb %al, 8(%rdi)
4978; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4979; SSE2-NEXT:    andb $1, %al
4980; SSE2-NEXT:    movb %al, 6(%rdi)
4981; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4982; SSE2-NEXT:    andb $1, %al
4983; SSE2-NEXT:    movb %al, 4(%rdi)
4984; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4985; SSE2-NEXT:    andb $1, %al
4986; SSE2-NEXT:    movb %al, 2(%rdi)
4987; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4988; SSE2-NEXT:    andb $1, %al
4989; SSE2-NEXT:    movb %al, (%rdi)
4990; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4991; SSE2-NEXT:    andb $1, %al
4992; SSE2-NEXT:    movb %al, 14(%rdi)
4993; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4994; SSE2-NEXT:    andb $1, %al
4995; SSE2-NEXT:    movb %al, 12(%rdi)
4996; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4997; SSE2-NEXT:    andb $1, %al
4998; SSE2-NEXT:    movb %al, 10(%rdi)
4999; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5000; SSE2-NEXT:    andb $1, %al
5001; SSE2-NEXT:    movb %al, 8(%rdi)
5002; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5003; SSE2-NEXT:    andb $1, %al
5004; SSE2-NEXT:    movb %al, 6(%rdi)
5005; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5006; SSE2-NEXT:    andb $1, %al
5007; SSE2-NEXT:    movb %al, 4(%rdi)
5008; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5009; SSE2-NEXT:    andb $1, %al
5010; SSE2-NEXT:    movb %al, 2(%rdi)
5011; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5012; SSE2-NEXT:    andb $1, %al
5013; SSE2-NEXT:    movb %al, (%rdi)
5014; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5015; SSE2-NEXT:    andb $1, %al
5016; SSE2-NEXT:    movb %al, 14(%rdi)
5017; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5018; SSE2-NEXT:    andb $1, %al
5019; SSE2-NEXT:    movb %al, 12(%rdi)
5020; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5021; SSE2-NEXT:    andb $1, %al
5022; SSE2-NEXT:    movb %al, 10(%rdi)
5023; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5024; SSE2-NEXT:    andb $1, %al
5025; SSE2-NEXT:    movb %al, 8(%rdi)
5026; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5027; SSE2-NEXT:    andb $1, %al
5028; SSE2-NEXT:    movb %al, 6(%rdi)
5029; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5030; SSE2-NEXT:    andb $1, %al
5031; SSE2-NEXT:    movb %al, 4(%rdi)
5032; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5033; SSE2-NEXT:    andb $1, %al
5034; SSE2-NEXT:    movb %al, 2(%rdi)
5035; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5036; SSE2-NEXT:    andb $1, %al
5037; SSE2-NEXT:    movb %al, (%rdi)
5038; SSE2-NEXT:    movq %rdi, %rax
5039; SSE2-NEXT:    popq %rcx
5040; SSE2-NEXT:    retq
5041;
5042; SSE42-LABEL: test_cmp_v128i8:
5043; SSE42:       # BB#0:
5044; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
5045; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
5046; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
5047; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
5048; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
5049; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
5050; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
5051; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
5052; SSE42-NEXT:    pextrb $15, %xmm7, %eax
5053; SSE42-NEXT:    andb $1, %al
5054; SSE42-NEXT:    movb %al, 14(%rdi)
5055; SSE42-NEXT:    pextrb $14, %xmm7, %eax
5056; SSE42-NEXT:    andb $1, %al
5057; SSE42-NEXT:    movb %al, 14(%rdi)
5058; SSE42-NEXT:    pextrb $13, %xmm7, %eax
5059; SSE42-NEXT:    andb $1, %al
5060; SSE42-NEXT:    movb %al, 14(%rdi)
5061; SSE42-NEXT:    pextrb $12, %xmm7, %eax
5062; SSE42-NEXT:    andb $1, %al
5063; SSE42-NEXT:    movb %al, 14(%rdi)
5064; SSE42-NEXT:    pextrb $11, %xmm7, %eax
5065; SSE42-NEXT:    andb $1, %al
5066; SSE42-NEXT:    movb %al, 14(%rdi)
5067; SSE42-NEXT:    pextrb $10, %xmm7, %eax
5068; SSE42-NEXT:    andb $1, %al
5069; SSE42-NEXT:    movb %al, 14(%rdi)
5070; SSE42-NEXT:    pextrb $9, %xmm7, %eax
5071; SSE42-NEXT:    andb $1, %al
5072; SSE42-NEXT:    movb %al, 14(%rdi)
5073; SSE42-NEXT:    pextrb $8, %xmm7, %eax
5074; SSE42-NEXT:    andb $1, %al
5075; SSE42-NEXT:    movb %al, 14(%rdi)
5076; SSE42-NEXT:    pextrb $7, %xmm7, %eax
5077; SSE42-NEXT:    andb $1, %al
5078; SSE42-NEXT:    movb %al, 14(%rdi)
5079; SSE42-NEXT:    pextrb $6, %xmm7, %eax
5080; SSE42-NEXT:    andb $1, %al
5081; SSE42-NEXT:    movb %al, 14(%rdi)
5082; SSE42-NEXT:    pextrb $5, %xmm7, %eax
5083; SSE42-NEXT:    andb $1, %al
5084; SSE42-NEXT:    movb %al, 14(%rdi)
5085; SSE42-NEXT:    pextrb $4, %xmm7, %eax
5086; SSE42-NEXT:    andb $1, %al
5087; SSE42-NEXT:    movb %al, 14(%rdi)
5088; SSE42-NEXT:    pextrb $3, %xmm7, %eax
5089; SSE42-NEXT:    andb $1, %al
5090; SSE42-NEXT:    movb %al, 14(%rdi)
5091; SSE42-NEXT:    pextrb $2, %xmm7, %eax
5092; SSE42-NEXT:    andb $1, %al
5093; SSE42-NEXT:    movb %al, 14(%rdi)
5094; SSE42-NEXT:    pextrb $1, %xmm7, %eax
5095; SSE42-NEXT:    andb $1, %al
5096; SSE42-NEXT:    movb %al, 14(%rdi)
5097; SSE42-NEXT:    pextrb $0, %xmm7, %eax
5098; SSE42-NEXT:    andb $1, %al
5099; SSE42-NEXT:    movb %al, 14(%rdi)
5100; SSE42-NEXT:    pextrb $15, %xmm6, %eax
5101; SSE42-NEXT:    andb $1, %al
5102; SSE42-NEXT:    movb %al, 12(%rdi)
5103; SSE42-NEXT:    pextrb $14, %xmm6, %eax
5104; SSE42-NEXT:    andb $1, %al
5105; SSE42-NEXT:    movb %al, 12(%rdi)
5106; SSE42-NEXT:    pextrb $13, %xmm6, %eax
5107; SSE42-NEXT:    andb $1, %al
5108; SSE42-NEXT:    movb %al, 12(%rdi)
5109; SSE42-NEXT:    pextrb $12, %xmm6, %eax
5110; SSE42-NEXT:    andb $1, %al
5111; SSE42-NEXT:    movb %al, 12(%rdi)
5112; SSE42-NEXT:    pextrb $11, %xmm6, %eax
5113; SSE42-NEXT:    andb $1, %al
5114; SSE42-NEXT:    movb %al, 12(%rdi)
5115; SSE42-NEXT:    pextrb $10, %xmm6, %eax
5116; SSE42-NEXT:    andb $1, %al
5117; SSE42-NEXT:    movb %al, 12(%rdi)
5118; SSE42-NEXT:    pextrb $9, %xmm6, %eax
5119; SSE42-NEXT:    andb $1, %al
5120; SSE42-NEXT:    movb %al, 12(%rdi)
5121; SSE42-NEXT:    pextrb $8, %xmm6, %eax
5122; SSE42-NEXT:    andb $1, %al
5123; SSE42-NEXT:    movb %al, 12(%rdi)
5124; SSE42-NEXT:    pextrb $7, %xmm6, %eax
5125; SSE42-NEXT:    andb $1, %al
5126; SSE42-NEXT:    movb %al, 12(%rdi)
5127; SSE42-NEXT:    pextrb $6, %xmm6, %eax
5128; SSE42-NEXT:    andb $1, %al
5129; SSE42-NEXT:    movb %al, 12(%rdi)
5130; SSE42-NEXT:    pextrb $5, %xmm6, %eax
5131; SSE42-NEXT:    andb $1, %al
5132; SSE42-NEXT:    movb %al, 12(%rdi)
5133; SSE42-NEXT:    pextrb $4, %xmm6, %eax
5134; SSE42-NEXT:    andb $1, %al
5135; SSE42-NEXT:    movb %al, 12(%rdi)
5136; SSE42-NEXT:    pextrb $3, %xmm6, %eax
5137; SSE42-NEXT:    andb $1, %al
5138; SSE42-NEXT:    movb %al, 12(%rdi)
5139; SSE42-NEXT:    pextrb $2, %xmm6, %eax
5140; SSE42-NEXT:    andb $1, %al
5141; SSE42-NEXT:    movb %al, 12(%rdi)
5142; SSE42-NEXT:    pextrb $1, %xmm6, %eax
5143; SSE42-NEXT:    andb $1, %al
5144; SSE42-NEXT:    movb %al, 12(%rdi)
5145; SSE42-NEXT:    pextrb $0, %xmm6, %eax
5146; SSE42-NEXT:    andb $1, %al
5147; SSE42-NEXT:    movb %al, 12(%rdi)
5148; SSE42-NEXT:    pextrb $15, %xmm5, %eax
5149; SSE42-NEXT:    andb $1, %al
5150; SSE42-NEXT:    movb %al, 10(%rdi)
5151; SSE42-NEXT:    pextrb $14, %xmm5, %eax
5152; SSE42-NEXT:    andb $1, %al
5153; SSE42-NEXT:    movb %al, 10(%rdi)
5154; SSE42-NEXT:    pextrb $13, %xmm5, %eax
5155; SSE42-NEXT:    andb $1, %al
5156; SSE42-NEXT:    movb %al, 10(%rdi)
5157; SSE42-NEXT:    pextrb $12, %xmm5, %eax
5158; SSE42-NEXT:    andb $1, %al
5159; SSE42-NEXT:    movb %al, 10(%rdi)
5160; SSE42-NEXT:    pextrb $11, %xmm5, %eax
5161; SSE42-NEXT:    andb $1, %al
5162; SSE42-NEXT:    movb %al, 10(%rdi)
5163; SSE42-NEXT:    pextrb $10, %xmm5, %eax
5164; SSE42-NEXT:    andb $1, %al
5165; SSE42-NEXT:    movb %al, 10(%rdi)
5166; SSE42-NEXT:    pextrb $9, %xmm5, %eax
5167; SSE42-NEXT:    andb $1, %al
5168; SSE42-NEXT:    movb %al, 10(%rdi)
5169; SSE42-NEXT:    pextrb $8, %xmm5, %eax
5170; SSE42-NEXT:    andb $1, %al
5171; SSE42-NEXT:    movb %al, 10(%rdi)
5172; SSE42-NEXT:    pextrb $7, %xmm5, %eax
5173; SSE42-NEXT:    andb $1, %al
5174; SSE42-NEXT:    movb %al, 10(%rdi)
5175; SSE42-NEXT:    pextrb $6, %xmm5, %eax
5176; SSE42-NEXT:    andb $1, %al
5177; SSE42-NEXT:    movb %al, 10(%rdi)
5178; SSE42-NEXT:    pextrb $5, %xmm5, %eax
5179; SSE42-NEXT:    andb $1, %al
5180; SSE42-NEXT:    movb %al, 10(%rdi)
5181; SSE42-NEXT:    pextrb $4, %xmm5, %eax
5182; SSE42-NEXT:    andb $1, %al
5183; SSE42-NEXT:    movb %al, 10(%rdi)
5184; SSE42-NEXT:    pextrb $3, %xmm5, %eax
5185; SSE42-NEXT:    andb $1, %al
5186; SSE42-NEXT:    movb %al, 10(%rdi)
5187; SSE42-NEXT:    pextrb $2, %xmm5, %eax
5188; SSE42-NEXT:    andb $1, %al
5189; SSE42-NEXT:    movb %al, 10(%rdi)
5190; SSE42-NEXT:    pextrb $1, %xmm5, %eax
5191; SSE42-NEXT:    andb $1, %al
5192; SSE42-NEXT:    movb %al, 10(%rdi)
5193; SSE42-NEXT:    pextrb $0, %xmm5, %eax
5194; SSE42-NEXT:    andb $1, %al
5195; SSE42-NEXT:    movb %al, 10(%rdi)
5196; SSE42-NEXT:    pextrb $15, %xmm4, %eax
5197; SSE42-NEXT:    andb $1, %al
5198; SSE42-NEXT:    movb %al, 8(%rdi)
5199; SSE42-NEXT:    pextrb $14, %xmm4, %eax
5200; SSE42-NEXT:    andb $1, %al
5201; SSE42-NEXT:    movb %al, 8(%rdi)
5202; SSE42-NEXT:    pextrb $13, %xmm4, %eax
5203; SSE42-NEXT:    andb $1, %al
5204; SSE42-NEXT:    movb %al, 8(%rdi)
5205; SSE42-NEXT:    pextrb $12, %xmm4, %eax
5206; SSE42-NEXT:    andb $1, %al
5207; SSE42-NEXT:    movb %al, 8(%rdi)
5208; SSE42-NEXT:    pextrb $11, %xmm4, %eax
5209; SSE42-NEXT:    andb $1, %al
5210; SSE42-NEXT:    movb %al, 8(%rdi)
5211; SSE42-NEXT:    pextrb $10, %xmm4, %eax
5212; SSE42-NEXT:    andb $1, %al
5213; SSE42-NEXT:    movb %al, 8(%rdi)
5214; SSE42-NEXT:    pextrb $9, %xmm4, %eax
5215; SSE42-NEXT:    andb $1, %al
5216; SSE42-NEXT:    movb %al, 8(%rdi)
5217; SSE42-NEXT:    pextrb $8, %xmm4, %eax
5218; SSE42-NEXT:    andb $1, %al
5219; SSE42-NEXT:    movb %al, 8(%rdi)
5220; SSE42-NEXT:    pextrb $7, %xmm4, %eax
5221; SSE42-NEXT:    andb $1, %al
5222; SSE42-NEXT:    movb %al, 8(%rdi)
5223; SSE42-NEXT:    pextrb $6, %xmm4, %eax
5224; SSE42-NEXT:    andb $1, %al
5225; SSE42-NEXT:    movb %al, 8(%rdi)
5226; SSE42-NEXT:    pextrb $5, %xmm4, %eax
5227; SSE42-NEXT:    andb $1, %al
5228; SSE42-NEXT:    movb %al, 8(%rdi)
5229; SSE42-NEXT:    pextrb $4, %xmm4, %eax
5230; SSE42-NEXT:    andb $1, %al
5231; SSE42-NEXT:    movb %al, 8(%rdi)
5232; SSE42-NEXT:    pextrb $3, %xmm4, %eax
5233; SSE42-NEXT:    andb $1, %al
5234; SSE42-NEXT:    movb %al, 8(%rdi)
5235; SSE42-NEXT:    pextrb $2, %xmm4, %eax
5236; SSE42-NEXT:    andb $1, %al
5237; SSE42-NEXT:    movb %al, 8(%rdi)
5238; SSE42-NEXT:    pextrb $1, %xmm4, %eax
5239; SSE42-NEXT:    andb $1, %al
5240; SSE42-NEXT:    movb %al, 8(%rdi)
5241; SSE42-NEXT:    pextrb $0, %xmm4, %eax
5242; SSE42-NEXT:    andb $1, %al
5243; SSE42-NEXT:    movb %al, 8(%rdi)
5244; SSE42-NEXT:    pextrb $15, %xmm3, %eax
5245; SSE42-NEXT:    andb $1, %al
5246; SSE42-NEXT:    movb %al, 6(%rdi)
5247; SSE42-NEXT:    pextrb $14, %xmm3, %eax
5248; SSE42-NEXT:    andb $1, %al
5249; SSE42-NEXT:    movb %al, 6(%rdi)
5250; SSE42-NEXT:    pextrb $13, %xmm3, %eax
5251; SSE42-NEXT:    andb $1, %al
5252; SSE42-NEXT:    movb %al, 6(%rdi)
5253; SSE42-NEXT:    pextrb $12, %xmm3, %eax
5254; SSE42-NEXT:    andb $1, %al
5255; SSE42-NEXT:    movb %al, 6(%rdi)
5256; SSE42-NEXT:    pextrb $11, %xmm3, %eax
5257; SSE42-NEXT:    andb $1, %al
5258; SSE42-NEXT:    movb %al, 6(%rdi)
5259; SSE42-NEXT:    pextrb $10, %xmm3, %eax
5260; SSE42-NEXT:    andb $1, %al
5261; SSE42-NEXT:    movb %al, 6(%rdi)
5262; SSE42-NEXT:    pextrb $9, %xmm3, %eax
5263; SSE42-NEXT:    andb $1, %al
5264; SSE42-NEXT:    movb %al, 6(%rdi)
5265; SSE42-NEXT:    pextrb $8, %xmm3, %eax
5266; SSE42-NEXT:    andb $1, %al
5267; SSE42-NEXT:    movb %al, 6(%rdi)
5268; SSE42-NEXT:    pextrb $7, %xmm3, %eax
5269; SSE42-NEXT:    andb $1, %al
5270; SSE42-NEXT:    movb %al, 6(%rdi)
5271; SSE42-NEXT:    pextrb $6, %xmm3, %eax
5272; SSE42-NEXT:    andb $1, %al
5273; SSE42-NEXT:    movb %al, 6(%rdi)
5274; SSE42-NEXT:    pextrb $5, %xmm3, %eax
5275; SSE42-NEXT:    andb $1, %al
5276; SSE42-NEXT:    movb %al, 6(%rdi)
5277; SSE42-NEXT:    pextrb $4, %xmm3, %eax
5278; SSE42-NEXT:    andb $1, %al
5279; SSE42-NEXT:    movb %al, 6(%rdi)
5280; SSE42-NEXT:    pextrb $3, %xmm3, %eax
5281; SSE42-NEXT:    andb $1, %al
5282; SSE42-NEXT:    movb %al, 6(%rdi)
5283; SSE42-NEXT:    pextrb $2, %xmm3, %eax
5284; SSE42-NEXT:    andb $1, %al
5285; SSE42-NEXT:    movb %al, 6(%rdi)
5286; SSE42-NEXT:    pextrb $1, %xmm3, %eax
5287; SSE42-NEXT:    andb $1, %al
5288; SSE42-NEXT:    movb %al, 6(%rdi)
5289; SSE42-NEXT:    pextrb $0, %xmm3, %eax
5290; SSE42-NEXT:    andb $1, %al
5291; SSE42-NEXT:    movb %al, 6(%rdi)
5292; SSE42-NEXT:    pextrb $15, %xmm2, %eax
5293; SSE42-NEXT:    andb $1, %al
5294; SSE42-NEXT:    movb %al, 4(%rdi)
5295; SSE42-NEXT:    pextrb $14, %xmm2, %eax
5296; SSE42-NEXT:    andb $1, %al
5297; SSE42-NEXT:    movb %al, 4(%rdi)
5298; SSE42-NEXT:    pextrb $13, %xmm2, %eax
5299; SSE42-NEXT:    andb $1, %al
5300; SSE42-NEXT:    movb %al, 4(%rdi)
5301; SSE42-NEXT:    pextrb $12, %xmm2, %eax
5302; SSE42-NEXT:    andb $1, %al
5303; SSE42-NEXT:    movb %al, 4(%rdi)
5304; SSE42-NEXT:    pextrb $11, %xmm2, %eax
5305; SSE42-NEXT:    andb $1, %al
5306; SSE42-NEXT:    movb %al, 4(%rdi)
5307; SSE42-NEXT:    pextrb $10, %xmm2, %eax
5308; SSE42-NEXT:    andb $1, %al
5309; SSE42-NEXT:    movb %al, 4(%rdi)
5310; SSE42-NEXT:    pextrb $9, %xmm2, %eax
5311; SSE42-NEXT:    andb $1, %al
5312; SSE42-NEXT:    movb %al, 4(%rdi)
5313; SSE42-NEXT:    pextrb $8, %xmm2, %eax
5314; SSE42-NEXT:    andb $1, %al
5315; SSE42-NEXT:    movb %al, 4(%rdi)
5316; SSE42-NEXT:    pextrb $7, %xmm2, %eax
5317; SSE42-NEXT:    andb $1, %al
5318; SSE42-NEXT:    movb %al, 4(%rdi)
5319; SSE42-NEXT:    pextrb $6, %xmm2, %eax
5320; SSE42-NEXT:    andb $1, %al
5321; SSE42-NEXT:    movb %al, 4(%rdi)
5322; SSE42-NEXT:    pextrb $5, %xmm2, %eax
5323; SSE42-NEXT:    andb $1, %al
5324; SSE42-NEXT:    movb %al, 4(%rdi)
5325; SSE42-NEXT:    pextrb $4, %xmm2, %eax
5326; SSE42-NEXT:    andb $1, %al
5327; SSE42-NEXT:    movb %al, 4(%rdi)
5328; SSE42-NEXT:    pextrb $3, %xmm2, %eax
5329; SSE42-NEXT:    andb $1, %al
5330; SSE42-NEXT:    movb %al, 4(%rdi)
5331; SSE42-NEXT:    pextrb $2, %xmm2, %eax
5332; SSE42-NEXT:    andb $1, %al
5333; SSE42-NEXT:    movb %al, 4(%rdi)
5334; SSE42-NEXT:    pextrb $1, %xmm2, %eax
5335; SSE42-NEXT:    andb $1, %al
5336; SSE42-NEXT:    movb %al, 4(%rdi)
5337; SSE42-NEXT:    pextrb $0, %xmm2, %eax
5338; SSE42-NEXT:    andb $1, %al
5339; SSE42-NEXT:    movb %al, 4(%rdi)
5340; SSE42-NEXT:    pextrb $15, %xmm1, %eax
5341; SSE42-NEXT:    andb $1, %al
5342; SSE42-NEXT:    movb %al, 2(%rdi)
5343; SSE42-NEXT:    pextrb $14, %xmm1, %eax
5344; SSE42-NEXT:    andb $1, %al
5345; SSE42-NEXT:    movb %al, 2(%rdi)
5346; SSE42-NEXT:    pextrb $13, %xmm1, %eax
5347; SSE42-NEXT:    andb $1, %al
5348; SSE42-NEXT:    movb %al, 2(%rdi)
5349; SSE42-NEXT:    pextrb $12, %xmm1, %eax
5350; SSE42-NEXT:    andb $1, %al
5351; SSE42-NEXT:    movb %al, 2(%rdi)
5352; SSE42-NEXT:    pextrb $11, %xmm1, %eax
5353; SSE42-NEXT:    andb $1, %al
5354; SSE42-NEXT:    movb %al, 2(%rdi)
5355; SSE42-NEXT:    pextrb $10, %xmm1, %eax
5356; SSE42-NEXT:    andb $1, %al
5357; SSE42-NEXT:    movb %al, 2(%rdi)
5358; SSE42-NEXT:    pextrb $9, %xmm1, %eax
5359; SSE42-NEXT:    andb $1, %al
5360; SSE42-NEXT:    movb %al, 2(%rdi)
5361; SSE42-NEXT:    pextrb $8, %xmm1, %eax
5362; SSE42-NEXT:    andb $1, %al
5363; SSE42-NEXT:    movb %al, 2(%rdi)
5364; SSE42-NEXT:    pextrb $7, %xmm1, %eax
5365; SSE42-NEXT:    andb $1, %al
5366; SSE42-NEXT:    movb %al, 2(%rdi)
5367; SSE42-NEXT:    pextrb $6, %xmm1, %eax
5368; SSE42-NEXT:    andb $1, %al
5369; SSE42-NEXT:    movb %al, 2(%rdi)
5370; SSE42-NEXT:    pextrb $5, %xmm1, %eax
5371; SSE42-NEXT:    andb $1, %al
5372; SSE42-NEXT:    movb %al, 2(%rdi)
5373; SSE42-NEXT:    pextrb $4, %xmm1, %eax
5374; SSE42-NEXT:    andb $1, %al
5375; SSE42-NEXT:    movb %al, 2(%rdi)
5376; SSE42-NEXT:    pextrb $3, %xmm1, %eax
5377; SSE42-NEXT:    andb $1, %al
5378; SSE42-NEXT:    movb %al, 2(%rdi)
5379; SSE42-NEXT:    pextrb $2, %xmm1, %eax
5380; SSE42-NEXT:    andb $1, %al
5381; SSE42-NEXT:    movb %al, 2(%rdi)
5382; SSE42-NEXT:    pextrb $1, %xmm1, %eax
5383; SSE42-NEXT:    andb $1, %al
5384; SSE42-NEXT:    movb %al, 2(%rdi)
5385; SSE42-NEXT:    pextrb $0, %xmm1, %eax
5386; SSE42-NEXT:    andb $1, %al
5387; SSE42-NEXT:    movb %al, 2(%rdi)
5388; SSE42-NEXT:    pextrb $15, %xmm0, %eax
5389; SSE42-NEXT:    andb $1, %al
5390; SSE42-NEXT:    movb %al, (%rdi)
5391; SSE42-NEXT:    pextrb $14, %xmm0, %eax
5392; SSE42-NEXT:    andb $1, %al
5393; SSE42-NEXT:    movb %al, (%rdi)
5394; SSE42-NEXT:    pextrb $13, %xmm0, %eax
5395; SSE42-NEXT:    andb $1, %al
5396; SSE42-NEXT:    movb %al, (%rdi)
5397; SSE42-NEXT:    pextrb $12, %xmm0, %eax
5398; SSE42-NEXT:    andb $1, %al
5399; SSE42-NEXT:    movb %al, (%rdi)
5400; SSE42-NEXT:    pextrb $11, %xmm0, %eax
5401; SSE42-NEXT:    andb $1, %al
5402; SSE42-NEXT:    movb %al, (%rdi)
5403; SSE42-NEXT:    pextrb $10, %xmm0, %eax
5404; SSE42-NEXT:    andb $1, %al
5405; SSE42-NEXT:    movb %al, (%rdi)
5406; SSE42-NEXT:    pextrb $9, %xmm0, %eax
5407; SSE42-NEXT:    andb $1, %al
5408; SSE42-NEXT:    movb %al, (%rdi)
5409; SSE42-NEXT:    pextrb $8, %xmm0, %eax
5410; SSE42-NEXT:    andb $1, %al
5411; SSE42-NEXT:    movb %al, (%rdi)
5412; SSE42-NEXT:    pextrb $7, %xmm0, %eax
5413; SSE42-NEXT:    andb $1, %al
5414; SSE42-NEXT:    movb %al, (%rdi)
5415; SSE42-NEXT:    pextrb $6, %xmm0, %eax
5416; SSE42-NEXT:    andb $1, %al
5417; SSE42-NEXT:    movb %al, (%rdi)
5418; SSE42-NEXT:    pextrb $5, %xmm0, %eax
5419; SSE42-NEXT:    andb $1, %al
5420; SSE42-NEXT:    movb %al, (%rdi)
5421; SSE42-NEXT:    pextrb $4, %xmm0, %eax
5422; SSE42-NEXT:    andb $1, %al
5423; SSE42-NEXT:    movb %al, (%rdi)
5424; SSE42-NEXT:    pextrb $3, %xmm0, %eax
5425; SSE42-NEXT:    andb $1, %al
5426; SSE42-NEXT:    movb %al, (%rdi)
5427; SSE42-NEXT:    pextrb $2, %xmm0, %eax
5428; SSE42-NEXT:    andb $1, %al
5429; SSE42-NEXT:    movb %al, (%rdi)
5430; SSE42-NEXT:    pextrb $1, %xmm0, %eax
5431; SSE42-NEXT:    andb $1, %al
5432; SSE42-NEXT:    movb %al, (%rdi)
5433; SSE42-NEXT:    pextrb $0, %xmm0, %eax
5434; SSE42-NEXT:    andb $1, %al
5435; SSE42-NEXT:    movb %al, (%rdi)
5436; SSE42-NEXT:    movq %rdi, %rax
5437; SSE42-NEXT:    retq
5438;
5439; AVX1-LABEL: test_cmp_v128i8:
5440; AVX1:       # BB#0:
5441; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm8
5442; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm4
5443; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5444; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm0
5445; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm4
5446; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm5
5447; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
5448; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm1
5449; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm5
5450; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm6
5451; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
5452; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm2
5453; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm6
5454; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm7
5455; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
5456; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm3
5457; AVX1-NEXT:    vpextrb $15, %xmm3, %eax
5458; AVX1-NEXT:    andb $1, %al
5459; AVX1-NEXT:    movb %al, 12(%rdi)
5460; AVX1-NEXT:    vpextrb $14, %xmm3, %eax
5461; AVX1-NEXT:    andb $1, %al
5462; AVX1-NEXT:    movb %al, 12(%rdi)
5463; AVX1-NEXT:    vpextrb $13, %xmm3, %eax
5464; AVX1-NEXT:    andb $1, %al
5465; AVX1-NEXT:    movb %al, 12(%rdi)
5466; AVX1-NEXT:    vpextrb $12, %xmm3, %eax
5467; AVX1-NEXT:    andb $1, %al
5468; AVX1-NEXT:    movb %al, 12(%rdi)
5469; AVX1-NEXT:    vpextrb $11, %xmm3, %eax
5470; AVX1-NEXT:    andb $1, %al
5471; AVX1-NEXT:    movb %al, 12(%rdi)
5472; AVX1-NEXT:    vpextrb $10, %xmm3, %eax
5473; AVX1-NEXT:    andb $1, %al
5474; AVX1-NEXT:    movb %al, 12(%rdi)
5475; AVX1-NEXT:    vpextrb $9, %xmm3, %eax
5476; AVX1-NEXT:    andb $1, %al
5477; AVX1-NEXT:    movb %al, 12(%rdi)
5478; AVX1-NEXT:    vpextrb $8, %xmm3, %eax
5479; AVX1-NEXT:    andb $1, %al
5480; AVX1-NEXT:    movb %al, 12(%rdi)
5481; AVX1-NEXT:    vpextrb $7, %xmm3, %eax
5482; AVX1-NEXT:    andb $1, %al
5483; AVX1-NEXT:    movb %al, 12(%rdi)
5484; AVX1-NEXT:    vpextrb $6, %xmm3, %eax
5485; AVX1-NEXT:    andb $1, %al
5486; AVX1-NEXT:    movb %al, 12(%rdi)
5487; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
5488; AVX1-NEXT:    andb $1, %al
5489; AVX1-NEXT:    movb %al, 12(%rdi)
5490; AVX1-NEXT:    vpextrb $4, %xmm3, %eax
5491; AVX1-NEXT:    andb $1, %al
5492; AVX1-NEXT:    movb %al, 12(%rdi)
5493; AVX1-NEXT:    vpextrb $3, %xmm3, %eax
5494; AVX1-NEXT:    andb $1, %al
5495; AVX1-NEXT:    movb %al, 12(%rdi)
5496; AVX1-NEXT:    vpextrb $2, %xmm3, %eax
5497; AVX1-NEXT:    andb $1, %al
5498; AVX1-NEXT:    movb %al, 12(%rdi)
5499; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
5500; AVX1-NEXT:    andb $1, %al
5501; AVX1-NEXT:    movb %al, 12(%rdi)
5502; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
5503; AVX1-NEXT:    andb $1, %al
5504; AVX1-NEXT:    movb %al, 12(%rdi)
5505; AVX1-NEXT:    vpextrb $15, %xmm6, %eax
5506; AVX1-NEXT:    andb $1, %al
5507; AVX1-NEXT:    movb %al, 12(%rdi)
5508; AVX1-NEXT:    vpextrb $14, %xmm6, %eax
5509; AVX1-NEXT:    andb $1, %al
5510; AVX1-NEXT:    movb %al, 12(%rdi)
5511; AVX1-NEXT:    vpextrb $13, %xmm6, %eax
5512; AVX1-NEXT:    andb $1, %al
5513; AVX1-NEXT:    movb %al, 12(%rdi)
5514; AVX1-NEXT:    vpextrb $12, %xmm6, %eax
5515; AVX1-NEXT:    andb $1, %al
5516; AVX1-NEXT:    movb %al, 12(%rdi)
5517; AVX1-NEXT:    vpextrb $11, %xmm6, %eax
5518; AVX1-NEXT:    andb $1, %al
5519; AVX1-NEXT:    movb %al, 12(%rdi)
5520; AVX1-NEXT:    vpextrb $10, %xmm6, %eax
5521; AVX1-NEXT:    andb $1, %al
5522; AVX1-NEXT:    movb %al, 12(%rdi)
5523; AVX1-NEXT:    vpextrb $9, %xmm6, %eax
5524; AVX1-NEXT:    andb $1, %al
5525; AVX1-NEXT:    movb %al, 12(%rdi)
5526; AVX1-NEXT:    vpextrb $8, %xmm6, %eax
5527; AVX1-NEXT:    andb $1, %al
5528; AVX1-NEXT:    movb %al, 12(%rdi)
5529; AVX1-NEXT:    vpextrb $7, %xmm6, %eax
5530; AVX1-NEXT:    andb $1, %al
5531; AVX1-NEXT:    movb %al, 12(%rdi)
5532; AVX1-NEXT:    vpextrb $6, %xmm6, %eax
5533; AVX1-NEXT:    andb $1, %al
5534; AVX1-NEXT:    movb %al, 12(%rdi)
5535; AVX1-NEXT:    vpextrb $5, %xmm6, %eax
5536; AVX1-NEXT:    andb $1, %al
5537; AVX1-NEXT:    movb %al, 12(%rdi)
5538; AVX1-NEXT:    vpextrb $4, %xmm6, %eax
5539; AVX1-NEXT:    andb $1, %al
5540; AVX1-NEXT:    movb %al, 12(%rdi)
5541; AVX1-NEXT:    vpextrb $3, %xmm6, %eax
5542; AVX1-NEXT:    andb $1, %al
5543; AVX1-NEXT:    movb %al, 12(%rdi)
5544; AVX1-NEXT:    vpextrb $2, %xmm6, %eax
5545; AVX1-NEXT:    andb $1, %al
5546; AVX1-NEXT:    movb %al, 12(%rdi)
5547; AVX1-NEXT:    vpextrb $1, %xmm6, %eax
5548; AVX1-NEXT:    andb $1, %al
5549; AVX1-NEXT:    movb %al, 12(%rdi)
5550; AVX1-NEXT:    vpextrb $0, %xmm6, %eax
5551; AVX1-NEXT:    andb $1, %al
5552; AVX1-NEXT:    movb %al, 12(%rdi)
5553; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
5554; AVX1-NEXT:    andb $1, %al
5555; AVX1-NEXT:    movb %al, 8(%rdi)
5556; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
5557; AVX1-NEXT:    andb $1, %al
5558; AVX1-NEXT:    movb %al, 8(%rdi)
5559; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
5560; AVX1-NEXT:    andb $1, %al
5561; AVX1-NEXT:    movb %al, 8(%rdi)
5562; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
5563; AVX1-NEXT:    andb $1, %al
5564; AVX1-NEXT:    movb %al, 8(%rdi)
5565; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
5566; AVX1-NEXT:    andb $1, %al
5567; AVX1-NEXT:    movb %al, 8(%rdi)
5568; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
5569; AVX1-NEXT:    andb $1, %al
5570; AVX1-NEXT:    movb %al, 8(%rdi)
5571; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
5572; AVX1-NEXT:    andb $1, %al
5573; AVX1-NEXT:    movb %al, 8(%rdi)
5574; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
5575; AVX1-NEXT:    andb $1, %al
5576; AVX1-NEXT:    movb %al, 8(%rdi)
5577; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
5578; AVX1-NEXT:    andb $1, %al
5579; AVX1-NEXT:    movb %al, 8(%rdi)
5580; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
5581; AVX1-NEXT:    andb $1, %al
5582; AVX1-NEXT:    movb %al, 8(%rdi)
5583; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
5584; AVX1-NEXT:    andb $1, %al
5585; AVX1-NEXT:    movb %al, 8(%rdi)
5586; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
5587; AVX1-NEXT:    andb $1, %al
5588; AVX1-NEXT:    movb %al, 8(%rdi)
5589; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
5590; AVX1-NEXT:    andb $1, %al
5591; AVX1-NEXT:    movb %al, 8(%rdi)
5592; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
5593; AVX1-NEXT:    andb $1, %al
5594; AVX1-NEXT:    movb %al, 8(%rdi)
5595; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
5596; AVX1-NEXT:    andb $1, %al
5597; AVX1-NEXT:    movb %al, 8(%rdi)
5598; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
5599; AVX1-NEXT:    andb $1, %al
5600; AVX1-NEXT:    movb %al, 8(%rdi)
5601; AVX1-NEXT:    vpextrb $15, %xmm5, %eax
5602; AVX1-NEXT:    andb $1, %al
5603; AVX1-NEXT:    movb %al, 8(%rdi)
5604; AVX1-NEXT:    vpextrb $14, %xmm5, %eax
5605; AVX1-NEXT:    andb $1, %al
5606; AVX1-NEXT:    movb %al, 8(%rdi)
5607; AVX1-NEXT:    vpextrb $13, %xmm5, %eax
5608; AVX1-NEXT:    andb $1, %al
5609; AVX1-NEXT:    movb %al, 8(%rdi)
5610; AVX1-NEXT:    vpextrb $12, %xmm5, %eax
5611; AVX1-NEXT:    andb $1, %al
5612; AVX1-NEXT:    movb %al, 8(%rdi)
5613; AVX1-NEXT:    vpextrb $11, %xmm5, %eax
5614; AVX1-NEXT:    andb $1, %al
5615; AVX1-NEXT:    movb %al, 8(%rdi)
5616; AVX1-NEXT:    vpextrb $10, %xmm5, %eax
5617; AVX1-NEXT:    andb $1, %al
5618; AVX1-NEXT:    movb %al, 8(%rdi)
5619; AVX1-NEXT:    vpextrb $9, %xmm5, %eax
5620; AVX1-NEXT:    andb $1, %al
5621; AVX1-NEXT:    movb %al, 8(%rdi)
5622; AVX1-NEXT:    vpextrb $8, %xmm5, %eax
5623; AVX1-NEXT:    andb $1, %al
5624; AVX1-NEXT:    movb %al, 8(%rdi)
5625; AVX1-NEXT:    vpextrb $7, %xmm5, %eax
5626; AVX1-NEXT:    andb $1, %al
5627; AVX1-NEXT:    movb %al, 8(%rdi)
5628; AVX1-NEXT:    vpextrb $6, %xmm5, %eax
5629; AVX1-NEXT:    andb $1, %al
5630; AVX1-NEXT:    movb %al, 8(%rdi)
5631; AVX1-NEXT:    vpextrb $5, %xmm5, %eax
5632; AVX1-NEXT:    andb $1, %al
5633; AVX1-NEXT:    movb %al, 8(%rdi)
5634; AVX1-NEXT:    vpextrb $4, %xmm5, %eax
5635; AVX1-NEXT:    andb $1, %al
5636; AVX1-NEXT:    movb %al, 8(%rdi)
5637; AVX1-NEXT:    vpextrb $3, %xmm5, %eax
5638; AVX1-NEXT:    andb $1, %al
5639; AVX1-NEXT:    movb %al, 8(%rdi)
5640; AVX1-NEXT:    vpextrb $2, %xmm5, %eax
5641; AVX1-NEXT:    andb $1, %al
5642; AVX1-NEXT:    movb %al, 8(%rdi)
5643; AVX1-NEXT:    vpextrb $1, %xmm5, %eax
5644; AVX1-NEXT:    andb $1, %al
5645; AVX1-NEXT:    movb %al, 8(%rdi)
5646; AVX1-NEXT:    vpextrb $0, %xmm5, %eax
5647; AVX1-NEXT:    andb $1, %al
5648; AVX1-NEXT:    movb %al, 8(%rdi)
5649; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
5650; AVX1-NEXT:    andb $1, %al
5651; AVX1-NEXT:    movb %al, 4(%rdi)
5652; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
5653; AVX1-NEXT:    andb $1, %al
5654; AVX1-NEXT:    movb %al, 4(%rdi)
5655; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
5656; AVX1-NEXT:    andb $1, %al
5657; AVX1-NEXT:    movb %al, 4(%rdi)
5658; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
5659; AVX1-NEXT:    andb $1, %al
5660; AVX1-NEXT:    movb %al, 4(%rdi)
5661; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
5662; AVX1-NEXT:    andb $1, %al
5663; AVX1-NEXT:    movb %al, 4(%rdi)
5664; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
5665; AVX1-NEXT:    andb $1, %al
5666; AVX1-NEXT:    movb %al, 4(%rdi)
5667; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
5668; AVX1-NEXT:    andb $1, %al
5669; AVX1-NEXT:    movb %al, 4(%rdi)
5670; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
5671; AVX1-NEXT:    andb $1, %al
5672; AVX1-NEXT:    movb %al, 4(%rdi)
5673; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
5674; AVX1-NEXT:    andb $1, %al
5675; AVX1-NEXT:    movb %al, 4(%rdi)
5676; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
5677; AVX1-NEXT:    andb $1, %al
5678; AVX1-NEXT:    movb %al, 4(%rdi)
5679; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
5680; AVX1-NEXT:    andb $1, %al
5681; AVX1-NEXT:    movb %al, 4(%rdi)
5682; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
5683; AVX1-NEXT:    andb $1, %al
5684; AVX1-NEXT:    movb %al, 4(%rdi)
5685; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
5686; AVX1-NEXT:    andb $1, %al
5687; AVX1-NEXT:    movb %al, 4(%rdi)
5688; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
5689; AVX1-NEXT:    andb $1, %al
5690; AVX1-NEXT:    movb %al, 4(%rdi)
5691; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
5692; AVX1-NEXT:    andb $1, %al
5693; AVX1-NEXT:    movb %al, 4(%rdi)
5694; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
5695; AVX1-NEXT:    andb $1, %al
5696; AVX1-NEXT:    movb %al, 4(%rdi)
5697; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
5698; AVX1-NEXT:    andb $1, %al
5699; AVX1-NEXT:    movb %al, 4(%rdi)
5700; AVX1-NEXT:    vpextrb $14, %xmm4, %eax
5701; AVX1-NEXT:    andb $1, %al
5702; AVX1-NEXT:    movb %al, 4(%rdi)
5703; AVX1-NEXT:    vpextrb $13, %xmm4, %eax
5704; AVX1-NEXT:    andb $1, %al
5705; AVX1-NEXT:    movb %al, 4(%rdi)
5706; AVX1-NEXT:    vpextrb $12, %xmm4, %eax
5707; AVX1-NEXT:    andb $1, %al
5708; AVX1-NEXT:    movb %al, 4(%rdi)
5709; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
5710; AVX1-NEXT:    andb $1, %al
5711; AVX1-NEXT:    movb %al, 4(%rdi)
5712; AVX1-NEXT:    vpextrb $10, %xmm4, %eax
5713; AVX1-NEXT:    andb $1, %al
5714; AVX1-NEXT:    movb %al, 4(%rdi)
5715; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
5716; AVX1-NEXT:    andb $1, %al
5717; AVX1-NEXT:    movb %al, 4(%rdi)
5718; AVX1-NEXT:    vpextrb $8, %xmm4, %eax
5719; AVX1-NEXT:    andb $1, %al
5720; AVX1-NEXT:    movb %al, 4(%rdi)
5721; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
5722; AVX1-NEXT:    andb $1, %al
5723; AVX1-NEXT:    movb %al, 4(%rdi)
5724; AVX1-NEXT:    vpextrb $6, %xmm4, %eax
5725; AVX1-NEXT:    andb $1, %al
5726; AVX1-NEXT:    movb %al, 4(%rdi)
5727; AVX1-NEXT:    vpextrb $5, %xmm4, %eax
5728; AVX1-NEXT:    andb $1, %al
5729; AVX1-NEXT:    movb %al, 4(%rdi)
5730; AVX1-NEXT:    vpextrb $4, %xmm4, %eax
5731; AVX1-NEXT:    andb $1, %al
5732; AVX1-NEXT:    movb %al, 4(%rdi)
5733; AVX1-NEXT:    vpextrb $3, %xmm4, %eax
5734; AVX1-NEXT:    andb $1, %al
5735; AVX1-NEXT:    movb %al, 4(%rdi)
5736; AVX1-NEXT:    vpextrb $2, %xmm4, %eax
5737; AVX1-NEXT:    andb $1, %al
5738; AVX1-NEXT:    movb %al, 4(%rdi)
5739; AVX1-NEXT:    vpextrb $1, %xmm4, %eax
5740; AVX1-NEXT:    andb $1, %al
5741; AVX1-NEXT:    movb %al, 4(%rdi)
5742; AVX1-NEXT:    vpextrb $0, %xmm4, %eax
5743; AVX1-NEXT:    andb $1, %al
5744; AVX1-NEXT:    movb %al, 4(%rdi)
5745; AVX1-NEXT:    vpextrb $15, %xmm0, %eax
5746; AVX1-NEXT:    andb $1, %al
5747; AVX1-NEXT:    movb %al, (%rdi)
5748; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
5749; AVX1-NEXT:    andb $1, %al
5750; AVX1-NEXT:    movb %al, (%rdi)
5751; AVX1-NEXT:    vpextrb $13, %xmm0, %eax
5752; AVX1-NEXT:    andb $1, %al
5753; AVX1-NEXT:    movb %al, (%rdi)
5754; AVX1-NEXT:    vpextrb $12, %xmm0, %eax
5755; AVX1-NEXT:    andb $1, %al
5756; AVX1-NEXT:    movb %al, (%rdi)
5757; AVX1-NEXT:    vpextrb $11, %xmm0, %eax
5758; AVX1-NEXT:    andb $1, %al
5759; AVX1-NEXT:    movb %al, (%rdi)
5760; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
5761; AVX1-NEXT:    andb $1, %al
5762; AVX1-NEXT:    movb %al, (%rdi)
5763; AVX1-NEXT:    vpextrb $9, %xmm0, %eax
5764; AVX1-NEXT:    andb $1, %al
5765; AVX1-NEXT:    movb %al, (%rdi)
5766; AVX1-NEXT:    vpextrb $8, %xmm0, %eax
5767; AVX1-NEXT:    andb $1, %al
5768; AVX1-NEXT:    movb %al, (%rdi)
5769; AVX1-NEXT:    vpextrb $7, %xmm0, %eax
5770; AVX1-NEXT:    andb $1, %al
5771; AVX1-NEXT:    movb %al, (%rdi)
5772; AVX1-NEXT:    vpextrb $6, %xmm0, %eax
5773; AVX1-NEXT:    andb $1, %al
5774; AVX1-NEXT:    movb %al, (%rdi)
5775; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
5776; AVX1-NEXT:    andb $1, %al
5777; AVX1-NEXT:    movb %al, (%rdi)
5778; AVX1-NEXT:    vpextrb $4, %xmm0, %eax
5779; AVX1-NEXT:    andb $1, %al
5780; AVX1-NEXT:    movb %al, (%rdi)
5781; AVX1-NEXT:    vpextrb $3, %xmm0, %eax
5782; AVX1-NEXT:    andb $1, %al
5783; AVX1-NEXT:    movb %al, (%rdi)
5784; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
5785; AVX1-NEXT:    andb $1, %al
5786; AVX1-NEXT:    movb %al, (%rdi)
5787; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
5788; AVX1-NEXT:    andb $1, %al
5789; AVX1-NEXT:    movb %al, (%rdi)
5790; AVX1-NEXT:    vpextrb $0, %xmm0, %eax
5791; AVX1-NEXT:    andb $1, %al
5792; AVX1-NEXT:    movb %al, (%rdi)
5793; AVX1-NEXT:    vpextrb $15, %xmm8, %eax
5794; AVX1-NEXT:    andb $1, %al
5795; AVX1-NEXT:    movb %al, (%rdi)
5796; AVX1-NEXT:    vpextrb $14, %xmm8, %eax
5797; AVX1-NEXT:    andb $1, %al
5798; AVX1-NEXT:    movb %al, (%rdi)
5799; AVX1-NEXT:    vpextrb $13, %xmm8, %eax
5800; AVX1-NEXT:    andb $1, %al
5801; AVX1-NEXT:    movb %al, (%rdi)
5802; AVX1-NEXT:    vpextrb $12, %xmm8, %eax
5803; AVX1-NEXT:    andb $1, %al
5804; AVX1-NEXT:    movb %al, (%rdi)
5805; AVX1-NEXT:    vpextrb $11, %xmm8, %eax
5806; AVX1-NEXT:    andb $1, %al
5807; AVX1-NEXT:    movb %al, (%rdi)
5808; AVX1-NEXT:    vpextrb $10, %xmm8, %eax
5809; AVX1-NEXT:    andb $1, %al
5810; AVX1-NEXT:    movb %al, (%rdi)
5811; AVX1-NEXT:    vpextrb $9, %xmm8, %eax
5812; AVX1-NEXT:    andb $1, %al
5813; AVX1-NEXT:    movb %al, (%rdi)
5814; AVX1-NEXT:    vpextrb $8, %xmm8, %eax
5815; AVX1-NEXT:    andb $1, %al
5816; AVX1-NEXT:    movb %al, (%rdi)
5817; AVX1-NEXT:    vpextrb $7, %xmm8, %eax
5818; AVX1-NEXT:    andb $1, %al
5819; AVX1-NEXT:    movb %al, (%rdi)
5820; AVX1-NEXT:    vpextrb $6, %xmm8, %eax
5821; AVX1-NEXT:    andb $1, %al
5822; AVX1-NEXT:    movb %al, (%rdi)
5823; AVX1-NEXT:    vpextrb $5, %xmm8, %eax
5824; AVX1-NEXT:    andb $1, %al
5825; AVX1-NEXT:    movb %al, (%rdi)
5826; AVX1-NEXT:    vpextrb $4, %xmm8, %eax
5827; AVX1-NEXT:    andb $1, %al
5828; AVX1-NEXT:    movb %al, (%rdi)
5829; AVX1-NEXT:    vpextrb $3, %xmm8, %eax
5830; AVX1-NEXT:    andb $1, %al
5831; AVX1-NEXT:    movb %al, (%rdi)
5832; AVX1-NEXT:    vpextrb $2, %xmm8, %eax
5833; AVX1-NEXT:    andb $1, %al
5834; AVX1-NEXT:    movb %al, (%rdi)
5835; AVX1-NEXT:    vpextrb $1, %xmm8, %eax
5836; AVX1-NEXT:    andb $1, %al
5837; AVX1-NEXT:    movb %al, (%rdi)
5838; AVX1-NEXT:    vpextrb $0, %xmm8, %eax
5839; AVX1-NEXT:    andb $1, %al
5840; AVX1-NEXT:    movb %al, (%rdi)
5841; AVX1-NEXT:    movq %rdi, %rax
5842; AVX1-NEXT:    vzeroupper
5843; AVX1-NEXT:    retq
5844;
5845; AVX2-LABEL: test_cmp_v128i8:
5846; AVX2:       # BB#0:
5847; AVX2-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
5848; AVX2-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
5849; AVX2-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
5850; AVX2-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
5851; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4
5852; AVX2-NEXT:    vpextrb $15, %xmm4, %eax
5853; AVX2-NEXT:    andb $1, %al
5854; AVX2-NEXT:    movb %al, 12(%rdi)
5855; AVX2-NEXT:    vpextrb $14, %xmm4, %eax
5856; AVX2-NEXT:    andb $1, %al
5857; AVX2-NEXT:    movb %al, 12(%rdi)
5858; AVX2-NEXT:    vpextrb $13, %xmm4, %eax
5859; AVX2-NEXT:    andb $1, %al
5860; AVX2-NEXT:    movb %al, 12(%rdi)
5861; AVX2-NEXT:    vpextrb $12, %xmm4, %eax
5862; AVX2-NEXT:    andb $1, %al
5863; AVX2-NEXT:    movb %al, 12(%rdi)
5864; AVX2-NEXT:    vpextrb $11, %xmm4, %eax
5865; AVX2-NEXT:    andb $1, %al
5866; AVX2-NEXT:    movb %al, 12(%rdi)
5867; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
5868; AVX2-NEXT:    andb $1, %al
5869; AVX2-NEXT:    movb %al, 12(%rdi)
5870; AVX2-NEXT:    vpextrb $9, %xmm4, %eax
5871; AVX2-NEXT:    andb $1, %al
5872; AVX2-NEXT:    movb %al, 12(%rdi)
5873; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
5874; AVX2-NEXT:    andb $1, %al
5875; AVX2-NEXT:    movb %al, 12(%rdi)
5876; AVX2-NEXT:    vpextrb $7, %xmm4, %eax
5877; AVX2-NEXT:    andb $1, %al
5878; AVX2-NEXT:    movb %al, 12(%rdi)
5879; AVX2-NEXT:    vpextrb $6, %xmm4, %eax
5880; AVX2-NEXT:    andb $1, %al
5881; AVX2-NEXT:    movb %al, 12(%rdi)
5882; AVX2-NEXT:    vpextrb $5, %xmm4, %eax
5883; AVX2-NEXT:    andb $1, %al
5884; AVX2-NEXT:    movb %al, 12(%rdi)
5885; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
5886; AVX2-NEXT:    andb $1, %al
5887; AVX2-NEXT:    movb %al, 12(%rdi)
5888; AVX2-NEXT:    vpextrb $3, %xmm4, %eax
5889; AVX2-NEXT:    andb $1, %al
5890; AVX2-NEXT:    movb %al, 12(%rdi)
5891; AVX2-NEXT:    vpextrb $2, %xmm4, %eax
5892; AVX2-NEXT:    andb $1, %al
5893; AVX2-NEXT:    movb %al, 12(%rdi)
5894; AVX2-NEXT:    vpextrb $1, %xmm4, %eax
5895; AVX2-NEXT:    andb $1, %al
5896; AVX2-NEXT:    movb %al, 12(%rdi)
5897; AVX2-NEXT:    vpextrb $0, %xmm4, %eax
5898; AVX2-NEXT:    andb $1, %al
5899; AVX2-NEXT:    movb %al, 12(%rdi)
5900; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
5901; AVX2-NEXT:    andb $1, %al
5902; AVX2-NEXT:    movb %al, 12(%rdi)
5903; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
5904; AVX2-NEXT:    andb $1, %al
5905; AVX2-NEXT:    movb %al, 12(%rdi)
5906; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
5907; AVX2-NEXT:    andb $1, %al
5908; AVX2-NEXT:    movb %al, 12(%rdi)
5909; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
5910; AVX2-NEXT:    andb $1, %al
5911; AVX2-NEXT:    movb %al, 12(%rdi)
5912; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
5913; AVX2-NEXT:    andb $1, %al
5914; AVX2-NEXT:    movb %al, 12(%rdi)
5915; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
5916; AVX2-NEXT:    andb $1, %al
5917; AVX2-NEXT:    movb %al, 12(%rdi)
5918; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
5919; AVX2-NEXT:    andb $1, %al
5920; AVX2-NEXT:    movb %al, 12(%rdi)
5921; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
5922; AVX2-NEXT:    andb $1, %al
5923; AVX2-NEXT:    movb %al, 12(%rdi)
5924; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
5925; AVX2-NEXT:    andb $1, %al
5926; AVX2-NEXT:    movb %al, 12(%rdi)
5927; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
5928; AVX2-NEXT:    andb $1, %al
5929; AVX2-NEXT:    movb %al, 12(%rdi)
5930; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
5931; AVX2-NEXT:    andb $1, %al
5932; AVX2-NEXT:    movb %al, 12(%rdi)
5933; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
5934; AVX2-NEXT:    andb $1, %al
5935; AVX2-NEXT:    movb %al, 12(%rdi)
5936; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
5937; AVX2-NEXT:    andb $1, %al
5938; AVX2-NEXT:    movb %al, 12(%rdi)
5939; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
5940; AVX2-NEXT:    andb $1, %al
5941; AVX2-NEXT:    movb %al, 12(%rdi)
5942; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
5943; AVX2-NEXT:    andb $1, %al
5944; AVX2-NEXT:    movb %al, 12(%rdi)
5945; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
5946; AVX2-NEXT:    andb $1, %al
5947; AVX2-NEXT:    movb %al, 12(%rdi)
5948; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3
5949; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
5950; AVX2-NEXT:    andb $1, %al
5951; AVX2-NEXT:    movb %al, 8(%rdi)
5952; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
5953; AVX2-NEXT:    andb $1, %al
5954; AVX2-NEXT:    movb %al, 8(%rdi)
5955; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
5956; AVX2-NEXT:    andb $1, %al
5957; AVX2-NEXT:    movb %al, 8(%rdi)
5958; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
5959; AVX2-NEXT:    andb $1, %al
5960; AVX2-NEXT:    movb %al, 8(%rdi)
5961; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
5962; AVX2-NEXT:    andb $1, %al
5963; AVX2-NEXT:    movb %al, 8(%rdi)
5964; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
5965; AVX2-NEXT:    andb $1, %al
5966; AVX2-NEXT:    movb %al, 8(%rdi)
5967; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
5968; AVX2-NEXT:    andb $1, %al
5969; AVX2-NEXT:    movb %al, 8(%rdi)
5970; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
5971; AVX2-NEXT:    andb $1, %al
5972; AVX2-NEXT:    movb %al, 8(%rdi)
5973; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
5974; AVX2-NEXT:    andb $1, %al
5975; AVX2-NEXT:    movb %al, 8(%rdi)
5976; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
5977; AVX2-NEXT:    andb $1, %al
5978; AVX2-NEXT:    movb %al, 8(%rdi)
5979; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
5980; AVX2-NEXT:    andb $1, %al
5981; AVX2-NEXT:    movb %al, 8(%rdi)
5982; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
5983; AVX2-NEXT:    andb $1, %al
5984; AVX2-NEXT:    movb %al, 8(%rdi)
5985; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
5986; AVX2-NEXT:    andb $1, %al
5987; AVX2-NEXT:    movb %al, 8(%rdi)
5988; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
5989; AVX2-NEXT:    andb $1, %al
5990; AVX2-NEXT:    movb %al, 8(%rdi)
5991; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
5992; AVX2-NEXT:    andb $1, %al
5993; AVX2-NEXT:    movb %al, 8(%rdi)
5994; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
5995; AVX2-NEXT:    andb $1, %al
5996; AVX2-NEXT:    movb %al, 8(%rdi)
5997; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
5998; AVX2-NEXT:    andb $1, %al
5999; AVX2-NEXT:    movb %al, 8(%rdi)
6000; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
6001; AVX2-NEXT:    andb $1, %al
6002; AVX2-NEXT:    movb %al, 8(%rdi)
6003; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
6004; AVX2-NEXT:    andb $1, %al
6005; AVX2-NEXT:    movb %al, 8(%rdi)
6006; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
6007; AVX2-NEXT:    andb $1, %al
6008; AVX2-NEXT:    movb %al, 8(%rdi)
6009; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
6010; AVX2-NEXT:    andb $1, %al
6011; AVX2-NEXT:    movb %al, 8(%rdi)
6012; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
6013; AVX2-NEXT:    andb $1, %al
6014; AVX2-NEXT:    movb %al, 8(%rdi)
6015; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
6016; AVX2-NEXT:    andb $1, %al
6017; AVX2-NEXT:    movb %al, 8(%rdi)
6018; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
6019; AVX2-NEXT:    andb $1, %al
6020; AVX2-NEXT:    movb %al, 8(%rdi)
6021; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
6022; AVX2-NEXT:    andb $1, %al
6023; AVX2-NEXT:    movb %al, 8(%rdi)
6024; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
6025; AVX2-NEXT:    andb $1, %al
6026; AVX2-NEXT:    movb %al, 8(%rdi)
6027; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
6028; AVX2-NEXT:    andb $1, %al
6029; AVX2-NEXT:    movb %al, 8(%rdi)
6030; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
6031; AVX2-NEXT:    andb $1, %al
6032; AVX2-NEXT:    movb %al, 8(%rdi)
6033; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
6034; AVX2-NEXT:    andb $1, %al
6035; AVX2-NEXT:    movb %al, 8(%rdi)
6036; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
6037; AVX2-NEXT:    andb $1, %al
6038; AVX2-NEXT:    movb %al, 8(%rdi)
6039; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
6040; AVX2-NEXT:    andb $1, %al
6041; AVX2-NEXT:    movb %al, 8(%rdi)
6042; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
6043; AVX2-NEXT:    andb $1, %al
6044; AVX2-NEXT:    movb %al, 8(%rdi)
6045; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
6046; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
6047; AVX2-NEXT:    andb $1, %al
6048; AVX2-NEXT:    movb %al, 4(%rdi)
6049; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
6050; AVX2-NEXT:    andb $1, %al
6051; AVX2-NEXT:    movb %al, 4(%rdi)
6052; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
6053; AVX2-NEXT:    andb $1, %al
6054; AVX2-NEXT:    movb %al, 4(%rdi)
6055; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
6056; AVX2-NEXT:    andb $1, %al
6057; AVX2-NEXT:    movb %al, 4(%rdi)
6058; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
6059; AVX2-NEXT:    andb $1, %al
6060; AVX2-NEXT:    movb %al, 4(%rdi)
6061; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
6062; AVX2-NEXT:    andb $1, %al
6063; AVX2-NEXT:    movb %al, 4(%rdi)
6064; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
6065; AVX2-NEXT:    andb $1, %al
6066; AVX2-NEXT:    movb %al, 4(%rdi)
6067; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
6068; AVX2-NEXT:    andb $1, %al
6069; AVX2-NEXT:    movb %al, 4(%rdi)
6070; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
6071; AVX2-NEXT:    andb $1, %al
6072; AVX2-NEXT:    movb %al, 4(%rdi)
6073; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
6074; AVX2-NEXT:    andb $1, %al
6075; AVX2-NEXT:    movb %al, 4(%rdi)
6076; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
6077; AVX2-NEXT:    andb $1, %al
6078; AVX2-NEXT:    movb %al, 4(%rdi)
6079; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
6080; AVX2-NEXT:    andb $1, %al
6081; AVX2-NEXT:    movb %al, 4(%rdi)
6082; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
6083; AVX2-NEXT:    andb $1, %al
6084; AVX2-NEXT:    movb %al, 4(%rdi)
6085; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
6086; AVX2-NEXT:    andb $1, %al
6087; AVX2-NEXT:    movb %al, 4(%rdi)
6088; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
6089; AVX2-NEXT:    andb $1, %al
6090; AVX2-NEXT:    movb %al, 4(%rdi)
6091; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
6092; AVX2-NEXT:    andb $1, %al
6093; AVX2-NEXT:    movb %al, 4(%rdi)
6094; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
6095; AVX2-NEXT:    andb $1, %al
6096; AVX2-NEXT:    movb %al, 4(%rdi)
6097; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
6098; AVX2-NEXT:    andb $1, %al
6099; AVX2-NEXT:    movb %al, 4(%rdi)
6100; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
6101; AVX2-NEXT:    andb $1, %al
6102; AVX2-NEXT:    movb %al, 4(%rdi)
6103; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
6104; AVX2-NEXT:    andb $1, %al
6105; AVX2-NEXT:    movb %al, 4(%rdi)
6106; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
6107; AVX2-NEXT:    andb $1, %al
6108; AVX2-NEXT:    movb %al, 4(%rdi)
6109; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
6110; AVX2-NEXT:    andb $1, %al
6111; AVX2-NEXT:    movb %al, 4(%rdi)
6112; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
6113; AVX2-NEXT:    andb $1, %al
6114; AVX2-NEXT:    movb %al, 4(%rdi)
6115; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
6116; AVX2-NEXT:    andb $1, %al
6117; AVX2-NEXT:    movb %al, 4(%rdi)
6118; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
6119; AVX2-NEXT:    andb $1, %al
6120; AVX2-NEXT:    movb %al, 4(%rdi)
6121; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
6122; AVX2-NEXT:    andb $1, %al
6123; AVX2-NEXT:    movb %al, 4(%rdi)
6124; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
6125; AVX2-NEXT:    andb $1, %al
6126; AVX2-NEXT:    movb %al, 4(%rdi)
6127; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
6128; AVX2-NEXT:    andb $1, %al
6129; AVX2-NEXT:    movb %al, 4(%rdi)
6130; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
6131; AVX2-NEXT:    andb $1, %al
6132; AVX2-NEXT:    movb %al, 4(%rdi)
6133; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
6134; AVX2-NEXT:    andb $1, %al
6135; AVX2-NEXT:    movb %al, 4(%rdi)
6136; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
6137; AVX2-NEXT:    andb $1, %al
6138; AVX2-NEXT:    movb %al, 4(%rdi)
6139; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
6140; AVX2-NEXT:    andb $1, %al
6141; AVX2-NEXT:    movb %al, 4(%rdi)
6142; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
6143; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
6144; AVX2-NEXT:    andb $1, %al
6145; AVX2-NEXT:    movb %al, (%rdi)
6146; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
6147; AVX2-NEXT:    andb $1, %al
6148; AVX2-NEXT:    movb %al, (%rdi)
6149; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
6150; AVX2-NEXT:    andb $1, %al
6151; AVX2-NEXT:    movb %al, (%rdi)
6152; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
6153; AVX2-NEXT:    andb $1, %al
6154; AVX2-NEXT:    movb %al, (%rdi)
6155; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
6156; AVX2-NEXT:    andb $1, %al
6157; AVX2-NEXT:    movb %al, (%rdi)
6158; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
6159; AVX2-NEXT:    andb $1, %al
6160; AVX2-NEXT:    movb %al, (%rdi)
6161; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
6162; AVX2-NEXT:    andb $1, %al
6163; AVX2-NEXT:    movb %al, (%rdi)
6164; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
6165; AVX2-NEXT:    andb $1, %al
6166; AVX2-NEXT:    movb %al, (%rdi)
6167; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
6168; AVX2-NEXT:    andb $1, %al
6169; AVX2-NEXT:    movb %al, (%rdi)
6170; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
6171; AVX2-NEXT:    andb $1, %al
6172; AVX2-NEXT:    movb %al, (%rdi)
6173; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
6174; AVX2-NEXT:    andb $1, %al
6175; AVX2-NEXT:    movb %al, (%rdi)
6176; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
6177; AVX2-NEXT:    andb $1, %al
6178; AVX2-NEXT:    movb %al, (%rdi)
6179; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
6180; AVX2-NEXT:    andb $1, %al
6181; AVX2-NEXT:    movb %al, (%rdi)
6182; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
6183; AVX2-NEXT:    andb $1, %al
6184; AVX2-NEXT:    movb %al, (%rdi)
6185; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
6186; AVX2-NEXT:    andb $1, %al
6187; AVX2-NEXT:    movb %al, (%rdi)
6188; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
6189; AVX2-NEXT:    andb $1, %al
6190; AVX2-NEXT:    movb %al, (%rdi)
6191; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
6192; AVX2-NEXT:    andb $1, %al
6193; AVX2-NEXT:    movb %al, (%rdi)
6194; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
6195; AVX2-NEXT:    andb $1, %al
6196; AVX2-NEXT:    movb %al, (%rdi)
6197; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
6198; AVX2-NEXT:    andb $1, %al
6199; AVX2-NEXT:    movb %al, (%rdi)
6200; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
6201; AVX2-NEXT:    andb $1, %al
6202; AVX2-NEXT:    movb %al, (%rdi)
6203; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
6204; AVX2-NEXT:    andb $1, %al
6205; AVX2-NEXT:    movb %al, (%rdi)
6206; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
6207; AVX2-NEXT:    andb $1, %al
6208; AVX2-NEXT:    movb %al, (%rdi)
6209; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
6210; AVX2-NEXT:    andb $1, %al
6211; AVX2-NEXT:    movb %al, (%rdi)
6212; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
6213; AVX2-NEXT:    andb $1, %al
6214; AVX2-NEXT:    movb %al, (%rdi)
6215; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
6216; AVX2-NEXT:    andb $1, %al
6217; AVX2-NEXT:    movb %al, (%rdi)
6218; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
6219; AVX2-NEXT:    andb $1, %al
6220; AVX2-NEXT:    movb %al, (%rdi)
6221; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
6222; AVX2-NEXT:    andb $1, %al
6223; AVX2-NEXT:    movb %al, (%rdi)
6224; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
6225; AVX2-NEXT:    andb $1, %al
6226; AVX2-NEXT:    movb %al, (%rdi)
6227; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
6228; AVX2-NEXT:    andb $1, %al
6229; AVX2-NEXT:    movb %al, (%rdi)
6230; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
6231; AVX2-NEXT:    andb $1, %al
6232; AVX2-NEXT:    movb %al, (%rdi)
6233; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
6234; AVX2-NEXT:    andb $1, %al
6235; AVX2-NEXT:    movb %al, (%rdi)
6236; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
6237; AVX2-NEXT:    andb $1, %al
6238; AVX2-NEXT:    movb %al, (%rdi)
6239; AVX2-NEXT:    movq %rdi, %rax
6240; AVX2-NEXT:    vzeroupper
6241; AVX2-NEXT:    retq
6242;
6243; AVX512-LABEL: test_cmp_v128i8:
6244; AVX512:       # BB#0:
6245; AVX512-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
6246; AVX512-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
6247; AVX512-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
6248; AVX512-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
6249; AVX512-NEXT:    vextracti128 $1, %ymm3, %xmm4
6250; AVX512-NEXT:    vpmovsxbd %xmm4, %zmm4
6251; AVX512-NEXT:    vpslld $31, %zmm4, %zmm4
6252; AVX512-NEXT:    vptestmd %zmm4, %zmm4, %k0
6253; AVX512-NEXT:    kmovw %k0, 14(%rdi)
6254; AVX512-NEXT:    vpmovsxbd %xmm3, %zmm3
6255; AVX512-NEXT:    vpslld $31, %zmm3, %zmm3
6256; AVX512-NEXT:    vptestmd %zmm3, %zmm3, %k0
6257; AVX512-NEXT:    kmovw %k0, 12(%rdi)
6258; AVX512-NEXT:    vextracti128 $1, %ymm2, %xmm3
6259; AVX512-NEXT:    vpmovsxbd %xmm3, %zmm3
6260; AVX512-NEXT:    vpslld $31, %zmm3, %zmm3
6261; AVX512-NEXT:    vptestmd %zmm3, %zmm3, %k0
6262; AVX512-NEXT:    kmovw %k0, 10(%rdi)
6263; AVX512-NEXT:    vpmovsxbd %xmm2, %zmm2
6264; AVX512-NEXT:    vpslld $31, %zmm2, %zmm2
6265; AVX512-NEXT:    vptestmd %zmm2, %zmm2, %k0
6266; AVX512-NEXT:    kmovw %k0, 8(%rdi)
6267; AVX512-NEXT:    vextracti128 $1, %ymm1, %xmm2
6268; AVX512-NEXT:    vpmovsxbd %xmm2, %zmm2
6269; AVX512-NEXT:    vpslld $31, %zmm2, %zmm2
6270; AVX512-NEXT:    vptestmd %zmm2, %zmm2, %k0
6271; AVX512-NEXT:    kmovw %k0, 6(%rdi)
6272; AVX512-NEXT:    vpmovsxbd %xmm1, %zmm1
6273; AVX512-NEXT:    vpslld $31, %zmm1, %zmm1
6274; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k0
6275; AVX512-NEXT:    kmovw %k0, 4(%rdi)
6276; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
6277; AVX512-NEXT:    vpmovsxbd %xmm1, %zmm1
6278; AVX512-NEXT:    vpslld $31, %zmm1, %zmm1
6279; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k0
6280; AVX512-NEXT:    kmovw %k0, 2(%rdi)
6281; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0
6282; AVX512-NEXT:    vpslld $31, %zmm0, %zmm0
6283; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k0
6284; AVX512-NEXT:    kmovw %k0, (%rdi)
6285; AVX512-NEXT:    movq %rdi, %rax
6286; AVX512-NEXT:    retq
6287  %1 = icmp sgt <128 x i8> %a0, %a1
6288  ret <128 x i1> %1
6289}
6290
6291;
6292; 2048-bit vector comparisons
6293;
6294
6295define <32 x i1> @test_cmp_v32f64(<32 x double> %a0, <32 x double> %a1) nounwind {
6296; SSE2-LABEL: test_cmp_v32f64:
6297; SSE2:       # BB#0:
6298; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
6299; SSE2-NEXT:    cmpltpd %xmm7, %xmm8
6300; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm7
6301; SSE2-NEXT:    cmpltpd %xmm6, %xmm7
6302; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[0,2,2,3]
6303; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
6304; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm7 = xmm7[0],xmm6[0]
6305; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
6306; SSE2-NEXT:    cmpltpd %xmm5, %xmm6
6307; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6308; SSE2-NEXT:    cmpltpd %xmm4, %xmm5
6309; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[0,2,2,3]
6310; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
6311; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm4[0]
6312; SSE2-NEXT:    pslld $31, %xmm7
6313; SSE2-NEXT:    psrad $31, %xmm7
6314; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm7[0,2,2,3,4,5,6,7]
6315; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
6316; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,2,2,3]
6317; SSE2-NEXT:    pslld $31, %xmm5
6318; SSE2-NEXT:    psrad $31, %xmm5
6319; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm5[0,2,2,3,4,5,6,7]
6320; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
6321; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
6322; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
6323; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6324; SSE2-NEXT:    cmpltpd %xmm3, %xmm5
6325; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
6326; SSE2-NEXT:    cmpltpd %xmm2, %xmm3
6327; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
6328; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
6329; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,2,2,3]
6330; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm5[0]
6331; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6332; SSE2-NEXT:    cmpltpd %xmm1, %xmm5
6333; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
6334; SSE2-NEXT:    cmpltpd %xmm0, %xmm1
6335; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
6336; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,2,2,3]
6337; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
6338; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
6339; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6340; SSE2-NEXT:    psllw $15, %xmm4
6341; SSE2-NEXT:    psraw $15, %xmm4
6342; SSE2-NEXT:    pslld $31, %xmm6
6343; SSE2-NEXT:    psrad $31, %xmm6
6344; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm6[0,2,2,3,4,5,6,7]
6345; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
6346; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[0,2,2,3]
6347; SSE2-NEXT:    pslld $31, %xmm1
6348; SSE2-NEXT:    psrad $31, %xmm1
6349; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]
6350; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
6351; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
6352; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
6353; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]
6354; SSE2-NEXT:    pand %xmm1, %xmm4
6355; SSE2-NEXT:    psllw $15, %xmm0
6356; SSE2-NEXT:    psraw $15, %xmm0
6357; SSE2-NEXT:    pand %xmm1, %xmm0
6358; SSE2-NEXT:    packuswb %xmm4, %xmm0
6359; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
6360; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
6361; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
6362; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
6363; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
6364; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm4[0]
6365; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
6366; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
6367; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
6368; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm3
6369; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
6370; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
6371; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
6372; SSE2-NEXT:    pslld $31, %xmm5
6373; SSE2-NEXT:    psrad $31, %xmm5
6374; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,2,2,3,4,5,6,7]
6375; SSE2-NEXT:    pshufhw {{.*#+}} xmm5 = xmm5[0,1,2,3,4,6,6,7]
6376; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
6377; SSE2-NEXT:    pslld $31, %xmm3
6378; SSE2-NEXT:    psrad $31, %xmm3
6379; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
6380; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
6381; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
6382; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]
6383; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6384; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
6385; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
6386; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm4
6387; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
6388; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
6389; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6390; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
6391; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
6392; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm2
6393; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
6394; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
6395; SSE2-NEXT:    pslld $31, %xmm4
6396; SSE2-NEXT:    psrad $31, %xmm4
6397; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,2,2,3,4,5,6,7]
6398; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
6399; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
6400; SSE2-NEXT:    pslld $31, %xmm2
6401; SSE2-NEXT:    psrad $31, %xmm2
6402; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
6403; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
6404; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
6405; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
6406; SSE2-NEXT:    psllw $15, %xmm3
6407; SSE2-NEXT:    psraw $15, %xmm3
6408; SSE2-NEXT:    pand %xmm1, %xmm3
6409; SSE2-NEXT:    psllw $15, %xmm2
6410; SSE2-NEXT:    psraw $15, %xmm2
6411; SSE2-NEXT:    pand %xmm1, %xmm2
6412; SSE2-NEXT:    packuswb %xmm3, %xmm2
6413; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
6414; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6415; SSE2-NEXT:    andb $1, %al
6416; SSE2-NEXT:    movb %al, 2(%rdi)
6417; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
6418; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6419; SSE2-NEXT:    andb $1, %al
6420; SSE2-NEXT:    movb %al, (%rdi)
6421; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6422; SSE2-NEXT:    andb $1, %al
6423; SSE2-NEXT:    movb %al, 2(%rdi)
6424; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6425; SSE2-NEXT:    andb $1, %al
6426; SSE2-NEXT:    movb %al, (%rdi)
6427; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6428; SSE2-NEXT:    andb $1, %al
6429; SSE2-NEXT:    movb %al, 2(%rdi)
6430; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6431; SSE2-NEXT:    andb $1, %al
6432; SSE2-NEXT:    movb %al, (%rdi)
6433; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6434; SSE2-NEXT:    andb $1, %al
6435; SSE2-NEXT:    movb %al, 2(%rdi)
6436; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6437; SSE2-NEXT:    andb $1, %al
6438; SSE2-NEXT:    movb %al, (%rdi)
6439; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6440; SSE2-NEXT:    andb $1, %al
6441; SSE2-NEXT:    movb %al, 2(%rdi)
6442; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6443; SSE2-NEXT:    andb $1, %al
6444; SSE2-NEXT:    movb %al, (%rdi)
6445; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6446; SSE2-NEXT:    andb $1, %al
6447; SSE2-NEXT:    movb %al, 2(%rdi)
6448; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6449; SSE2-NEXT:    andb $1, %al
6450; SSE2-NEXT:    movb %al, (%rdi)
6451; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6452; SSE2-NEXT:    andb $1, %al
6453; SSE2-NEXT:    movb %al, 2(%rdi)
6454; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6455; SSE2-NEXT:    andb $1, %al
6456; SSE2-NEXT:    movb %al, (%rdi)
6457; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6458; SSE2-NEXT:    andb $1, %al
6459; SSE2-NEXT:    movb %al, 2(%rdi)
6460; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6461; SSE2-NEXT:    andb $1, %al
6462; SSE2-NEXT:    movb %al, (%rdi)
6463; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6464; SSE2-NEXT:    andb $1, %al
6465; SSE2-NEXT:    movb %al, 2(%rdi)
6466; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6467; SSE2-NEXT:    andb $1, %al
6468; SSE2-NEXT:    movb %al, (%rdi)
6469; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6470; SSE2-NEXT:    andb $1, %al
6471; SSE2-NEXT:    movb %al, 2(%rdi)
6472; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6473; SSE2-NEXT:    andb $1, %al
6474; SSE2-NEXT:    movb %al, (%rdi)
6475; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6476; SSE2-NEXT:    andb $1, %al
6477; SSE2-NEXT:    movb %al, 2(%rdi)
6478; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6479; SSE2-NEXT:    andb $1, %al
6480; SSE2-NEXT:    movb %al, (%rdi)
6481; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6482; SSE2-NEXT:    andb $1, %al
6483; SSE2-NEXT:    movb %al, 2(%rdi)
6484; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6485; SSE2-NEXT:    andb $1, %al
6486; SSE2-NEXT:    movb %al, (%rdi)
6487; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6488; SSE2-NEXT:    andb $1, %al
6489; SSE2-NEXT:    movb %al, 2(%rdi)
6490; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6491; SSE2-NEXT:    andb $1, %al
6492; SSE2-NEXT:    movb %al, (%rdi)
6493; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6494; SSE2-NEXT:    andb $1, %al
6495; SSE2-NEXT:    movb %al, 2(%rdi)
6496; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6497; SSE2-NEXT:    andb $1, %al
6498; SSE2-NEXT:    movb %al, (%rdi)
6499; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6500; SSE2-NEXT:    andb $1, %al
6501; SSE2-NEXT:    movb %al, 2(%rdi)
6502; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6503; SSE2-NEXT:    andb $1, %al
6504; SSE2-NEXT:    movb %al, (%rdi)
6505; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6506; SSE2-NEXT:    andb $1, %al
6507; SSE2-NEXT:    movb %al, 2(%rdi)
6508; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
6509; SSE2-NEXT:    andb $1, %al
6510; SSE2-NEXT:    movb %al, (%rdi)
6511; SSE2-NEXT:    movq %rdi, %rax
6512; SSE2-NEXT:    retq
6513;
6514; SSE42-LABEL: test_cmp_v32f64:
6515; SSE42:       # BB#0:
6516; SSE42-NEXT:    pushq %rbp
6517; SSE42-NEXT:    pushq %r15
6518; SSE42-NEXT:    pushq %r14
6519; SSE42-NEXT:    pushq %r13
6520; SSE42-NEXT:    pushq %r12
6521; SSE42-NEXT:    pushq %rbx
6522; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
6523; SSE42-NEXT:    cmpltpd %xmm7, %xmm8
6524; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm7
6525; SSE42-NEXT:    cmpltpd %xmm6, %xmm7
6526; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[0,1,0,2]
6527; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
6528; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm7[0,1,2,3],xmm6[4,5,6,7]
6529; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
6530; SSE42-NEXT:    cmpltpd %xmm5, %xmm6
6531; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6532; SSE42-NEXT:    cmpltpd %xmm4, %xmm5
6533; SSE42-NEXT:    pslld $31, %xmm7
6534; SSE42-NEXT:    psrad $31, %xmm7
6535; SSE42-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[0,1,0,2]
6536; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
6537; SSE42-NEXT:    pblendw {{.*#+}} xmm5 = xmm5[0,1,2,3],xmm4[4,5,6,7]
6538; SSE42-NEXT:    movdqa {{.*#+}} xmm4 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
6539; SSE42-NEXT:    pshufb %xmm4, %xmm7
6540; SSE42-NEXT:    pslld $31, %xmm5
6541; SSE42-NEXT:    psrad $31, %xmm5
6542; SSE42-NEXT:    pshufb %xmm4, %xmm5
6543; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
6544; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
6545; SSE42-NEXT:    cmpltpd %xmm3, %xmm6
6546; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
6547; SSE42-NEXT:    cmpltpd %xmm2, %xmm3
6548; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
6549; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,1,0,2]
6550; SSE42-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
6551; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm6[4,5,6,7]
6552; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
6553; SSE42-NEXT:    cmpltpd %xmm1, %xmm6
6554; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm7
6555; SSE42-NEXT:    cmpltpd %xmm0, %xmm7
6556; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
6557; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,1,0,2]
6558; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[0,2,2,3]
6559; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm6[4,5,6,7]
6560; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
6561; SSE42-NEXT:    psllw $15, %xmm5
6562; SSE42-NEXT:    psraw $15, %xmm5
6563; SSE42-NEXT:    pslld $31, %xmm3
6564; SSE42-NEXT:    psrad $31, %xmm3
6565; SSE42-NEXT:    pshufb %xmm4, %xmm3
6566; SSE42-NEXT:    pslld $31, %xmm0
6567; SSE42-NEXT:    psrad $31, %xmm0
6568; SSE42-NEXT:    pshufb %xmm4, %xmm0
6569; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]
6570; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
6571; SSE42-NEXT:    pshufb %xmm3, %xmm5
6572; SSE42-NEXT:    psllw $15, %xmm0
6573; SSE42-NEXT:    psraw $15, %xmm0
6574; SSE42-NEXT:    pshufb %xmm3, %xmm0
6575; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
6576; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6577; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
6578; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,1,0,2]
6579; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm6
6580; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
6581; SSE42-NEXT:    pblendw {{.*#+}} xmm6 = xmm6[0,1,2,3],xmm5[4,5,6,7]
6582; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
6583; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
6584; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,1,0,2]
6585; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm1
6586; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,2,2,3]
6587; SSE42-NEXT:    pblendw {{.*#+}} xmm5 = xmm5[0,1,2,3],xmm7[4,5,6,7]
6588; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
6589; SSE42-NEXT:    pslld $31, %xmm6
6590; SSE42-NEXT:    psrad $31, %xmm6
6591; SSE42-NEXT:    pshufb %xmm4, %xmm6
6592; SSE42-NEXT:    pslld $31, %xmm5
6593; SSE42-NEXT:    psrad $31, %xmm5
6594; SSE42-NEXT:    pshufb %xmm4, %xmm5
6595; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
6596; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
6597; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm6
6598; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,1,0,2]
6599; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm1
6600; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,2,2,3]
6601; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm7[0,1,2,3],xmm6[4,5,6,7]
6602; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
6603; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm1
6604; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,1,0,2]
6605; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm2
6606; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]
6607; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm6[4,5,6,7]
6608; SSE42-NEXT:    pslld $31, %xmm7
6609; SSE42-NEXT:    psrad $31, %xmm7
6610; SSE42-NEXT:    pshufb %xmm4, %xmm7
6611; SSE42-NEXT:    pslld $31, %xmm1
6612; SSE42-NEXT:    psrad $31, %xmm1
6613; SSE42-NEXT:    pshufb %xmm4, %xmm1
6614; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm7[0]
6615; SSE42-NEXT:    psllw $15, %xmm5
6616; SSE42-NEXT:    psraw $15, %xmm5
6617; SSE42-NEXT:    pshufb %xmm3, %xmm5
6618; SSE42-NEXT:    psllw $15, %xmm1
6619; SSE42-NEXT:    psraw $15, %xmm1
6620; SSE42-NEXT:    pshufb %xmm3, %xmm1
6621; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
6622; SSE42-NEXT:    pextrb $15, %xmm1, %eax
6623; SSE42-NEXT:    andb $1, %al
6624; SSE42-NEXT:    movb %al, 2(%rdi)
6625; SSE42-NEXT:    pextrb $14, %xmm1, %eax
6626; SSE42-NEXT:    andb $1, %al
6627; SSE42-NEXT:    movb %al, 2(%rdi)
6628; SSE42-NEXT:    pextrb $13, %xmm1, %r8d
6629; SSE42-NEXT:    pextrb $12, %xmm1, %r9d
6630; SSE42-NEXT:    pextrb $11, %xmm1, %r10d
6631; SSE42-NEXT:    pextrb $10, %xmm1, %r11d
6632; SSE42-NEXT:    pextrb $9, %xmm1, %r14d
6633; SSE42-NEXT:    pextrb $8, %xmm1, %r15d
6634; SSE42-NEXT:    pextrb $7, %xmm1, %r12d
6635; SSE42-NEXT:    pextrb $6, %xmm1, %r13d
6636; SSE42-NEXT:    pextrb $5, %xmm1, %ebx
6637; SSE42-NEXT:    pextrb $4, %xmm1, %ebp
6638; SSE42-NEXT:    pextrb $3, %xmm1, %eax
6639; SSE42-NEXT:    pextrb $2, %xmm1, %ecx
6640; SSE42-NEXT:    pextrb $1, %xmm1, %edx
6641; SSE42-NEXT:    pextrb $0, %xmm1, %esi
6642; SSE42-NEXT:    andb $1, %r8b
6643; SSE42-NEXT:    movb %r8b, 2(%rdi)
6644; SSE42-NEXT:    andb $1, %r9b
6645; SSE42-NEXT:    movb %r9b, 2(%rdi)
6646; SSE42-NEXT:    andb $1, %r10b
6647; SSE42-NEXT:    movb %r10b, 2(%rdi)
6648; SSE42-NEXT:    andb $1, %r11b
6649; SSE42-NEXT:    movb %r11b, 2(%rdi)
6650; SSE42-NEXT:    andb $1, %r14b
6651; SSE42-NEXT:    movb %r14b, 2(%rdi)
6652; SSE42-NEXT:    andb $1, %r15b
6653; SSE42-NEXT:    movb %r15b, 2(%rdi)
6654; SSE42-NEXT:    andb $1, %r12b
6655; SSE42-NEXT:    movb %r12b, 2(%rdi)
6656; SSE42-NEXT:    andb $1, %r13b
6657; SSE42-NEXT:    movb %r13b, 2(%rdi)
6658; SSE42-NEXT:    andb $1, %bl
6659; SSE42-NEXT:    movb %bl, 2(%rdi)
6660; SSE42-NEXT:    andb $1, %bpl
6661; SSE42-NEXT:    movb %bpl, 2(%rdi)
6662; SSE42-NEXT:    andb $1, %al
6663; SSE42-NEXT:    movb %al, 2(%rdi)
6664; SSE42-NEXT:    andb $1, %cl
6665; SSE42-NEXT:    movb %cl, 2(%rdi)
6666; SSE42-NEXT:    andb $1, %dl
6667; SSE42-NEXT:    movb %dl, 2(%rdi)
6668; SSE42-NEXT:    andb $1, %sil
6669; SSE42-NEXT:    movb %sil, 2(%rdi)
6670; SSE42-NEXT:    pextrb $15, %xmm0, %eax
6671; SSE42-NEXT:    andb $1, %al
6672; SSE42-NEXT:    movb %al, (%rdi)
6673; SSE42-NEXT:    pextrb $14, %xmm0, %eax
6674; SSE42-NEXT:    andb $1, %al
6675; SSE42-NEXT:    movb %al, (%rdi)
6676; SSE42-NEXT:    pextrb $13, %xmm0, %r8d
6677; SSE42-NEXT:    pextrb $12, %xmm0, %r9d
6678; SSE42-NEXT:    pextrb $11, %xmm0, %r10d
6679; SSE42-NEXT:    pextrb $10, %xmm0, %r11d
6680; SSE42-NEXT:    pextrb $9, %xmm0, %r14d
6681; SSE42-NEXT:    pextrb $8, %xmm0, %r15d
6682; SSE42-NEXT:    pextrb $7, %xmm0, %r12d
6683; SSE42-NEXT:    pextrb $6, %xmm0, %r13d
6684; SSE42-NEXT:    pextrb $5, %xmm0, %ebx
6685; SSE42-NEXT:    pextrb $4, %xmm0, %ebp
6686; SSE42-NEXT:    pextrb $3, %xmm0, %eax
6687; SSE42-NEXT:    pextrb $2, %xmm0, %ecx
6688; SSE42-NEXT:    pextrb $1, %xmm0, %edx
6689; SSE42-NEXT:    pextrb $0, %xmm0, %esi
6690; SSE42-NEXT:    andb $1, %r8b
6691; SSE42-NEXT:    movb %r8b, (%rdi)
6692; SSE42-NEXT:    andb $1, %r9b
6693; SSE42-NEXT:    movb %r9b, (%rdi)
6694; SSE42-NEXT:    andb $1, %r10b
6695; SSE42-NEXT:    movb %r10b, (%rdi)
6696; SSE42-NEXT:    andb $1, %r11b
6697; SSE42-NEXT:    movb %r11b, (%rdi)
6698; SSE42-NEXT:    andb $1, %r14b
6699; SSE42-NEXT:    movb %r14b, (%rdi)
6700; SSE42-NEXT:    andb $1, %r15b
6701; SSE42-NEXT:    movb %r15b, (%rdi)
6702; SSE42-NEXT:    andb $1, %r12b
6703; SSE42-NEXT:    movb %r12b, (%rdi)
6704; SSE42-NEXT:    andb $1, %r13b
6705; SSE42-NEXT:    movb %r13b, (%rdi)
6706; SSE42-NEXT:    andb $1, %bl
6707; SSE42-NEXT:    movb %bl, (%rdi)
6708; SSE42-NEXT:    andb $1, %bpl
6709; SSE42-NEXT:    movb %bpl, (%rdi)
6710; SSE42-NEXT:    andb $1, %al
6711; SSE42-NEXT:    movb %al, (%rdi)
6712; SSE42-NEXT:    andb $1, %cl
6713; SSE42-NEXT:    movb %cl, (%rdi)
6714; SSE42-NEXT:    andb $1, %dl
6715; SSE42-NEXT:    movb %dl, (%rdi)
6716; SSE42-NEXT:    andb $1, %sil
6717; SSE42-NEXT:    movb %sil, (%rdi)
6718; SSE42-NEXT:    movq %rdi, %rax
6719; SSE42-NEXT:    popq %rbx
6720; SSE42-NEXT:    popq %r12
6721; SSE42-NEXT:    popq %r13
6722; SSE42-NEXT:    popq %r14
6723; SSE42-NEXT:    popq %r15
6724; SSE42-NEXT:    popq %rbp
6725; SSE42-NEXT:    retq
6726;
6727; AVX1-LABEL: test_cmp_v32f64:
6728; AVX1:       # BB#0:
6729; AVX1-NEXT:    pushq %rbp
6730; AVX1-NEXT:    movq %rsp, %rbp
6731; AVX1-NEXT:    andq $-32, %rsp
6732; AVX1-NEXT:    subq $32, %rsp
6733; AVX1-NEXT:    vmovapd 16(%rbp), %ymm8
6734; AVX1-NEXT:    vmovapd 48(%rbp), %ymm9
6735; AVX1-NEXT:    vmovapd 80(%rbp), %ymm10
6736; AVX1-NEXT:    vmovapd 112(%rbp), %ymm11
6737; AVX1-NEXT:    vmovapd 144(%rbp), %ymm12
6738; AVX1-NEXT:    vmovapd 176(%rbp), %ymm13
6739; AVX1-NEXT:    vmovapd 208(%rbp), %ymm14
6740; AVX1-NEXT:    vmovapd 240(%rbp), %ymm15
6741; AVX1-NEXT:    vcmpltpd %ymm7, %ymm15, %ymm15
6742; AVX1-NEXT:    vextractf128 $1, %ymm15, %xmm7
6743; AVX1-NEXT:    vpacksswb %xmm7, %xmm15, %xmm15
6744; AVX1-NEXT:    vcmpltpd %ymm6, %ymm14, %ymm6
6745; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
6746; AVX1-NEXT:    vpacksswb %xmm7, %xmm6, %xmm6
6747; AVX1-NEXT:    vpacksswb %xmm15, %xmm6, %xmm6
6748; AVX1-NEXT:    vcmpltpd %ymm5, %ymm13, %ymm5
6749; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm7
6750; AVX1-NEXT:    vpacksswb %xmm7, %xmm5, %xmm5
6751; AVX1-NEXT:    vcmpltpd %ymm4, %ymm12, %ymm4
6752; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm7
6753; AVX1-NEXT:    vpacksswb %xmm7, %xmm4, %xmm4
6754; AVX1-NEXT:    vpacksswb %xmm5, %xmm4, %xmm4
6755; AVX1-NEXT:    vpacksswb %xmm6, %xmm4, %xmm4
6756; AVX1-NEXT:    vcmpltpd %ymm3, %ymm11, %ymm3
6757; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
6758; AVX1-NEXT:    vpacksswb %xmm5, %xmm3, %xmm3
6759; AVX1-NEXT:    vcmpltpd %ymm2, %ymm10, %ymm2
6760; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
6761; AVX1-NEXT:    vpacksswb %xmm5, %xmm2, %xmm2
6762; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
6763; AVX1-NEXT:    vcmpltpd %ymm1, %ymm9, %ymm1
6764; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
6765; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
6766; AVX1-NEXT:    vcmpltpd %ymm0, %ymm8, %ymm0
6767; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
6768; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
6769; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
6770; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
6771; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6772; AVX1-NEXT:    movq %rbp, %rsp
6773; AVX1-NEXT:    popq %rbp
6774; AVX1-NEXT:    retq
6775;
6776; AVX2-LABEL: test_cmp_v32f64:
6777; AVX2:       # BB#0:
6778; AVX2-NEXT:    pushq %rbp
6779; AVX2-NEXT:    movq %rsp, %rbp
6780; AVX2-NEXT:    andq $-32, %rsp
6781; AVX2-NEXT:    subq $32, %rsp
6782; AVX2-NEXT:    vmovapd 16(%rbp), %ymm8
6783; AVX2-NEXT:    vmovapd 48(%rbp), %ymm9
6784; AVX2-NEXT:    vmovapd 80(%rbp), %ymm10
6785; AVX2-NEXT:    vmovapd 112(%rbp), %ymm11
6786; AVX2-NEXT:    vmovapd 144(%rbp), %ymm12
6787; AVX2-NEXT:    vmovapd 176(%rbp), %ymm13
6788; AVX2-NEXT:    vmovapd 208(%rbp), %ymm14
6789; AVX2-NEXT:    vmovapd 240(%rbp), %ymm15
6790; AVX2-NEXT:    vcmpltpd %ymm7, %ymm15, %ymm7
6791; AVX2-NEXT:    vcmpltpd %ymm6, %ymm14, %ymm6
6792; AVX2-NEXT:    vpacksswb %ymm7, %ymm6, %ymm6
6793; AVX2-NEXT:    vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]
6794; AVX2-NEXT:    vcmpltpd %ymm5, %ymm13, %ymm5
6795; AVX2-NEXT:    vcmpltpd %ymm4, %ymm12, %ymm4
6796; AVX2-NEXT:    vpacksswb %ymm5, %ymm4, %ymm4
6797; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
6798; AVX2-NEXT:    vpacksswb %ymm6, %ymm4, %ymm4
6799; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
6800; AVX2-NEXT:    vcmpltpd %ymm3, %ymm11, %ymm3
6801; AVX2-NEXT:    vcmpltpd %ymm2, %ymm10, %ymm2
6802; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
6803; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
6804; AVX2-NEXT:    vcmpltpd %ymm1, %ymm9, %ymm1
6805; AVX2-NEXT:    vcmpltpd %ymm0, %ymm8, %ymm0
6806; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
6807; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
6808; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
6809; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
6810; AVX2-NEXT:    vpacksswb %ymm4, %ymm0, %ymm0
6811; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
6812; AVX2-NEXT:    movq %rbp, %rsp
6813; AVX2-NEXT:    popq %rbp
6814; AVX2-NEXT:    retq
6815;
6816; AVX512-LABEL: test_cmp_v32f64:
6817; AVX512:       # BB#0:
6818; AVX512-NEXT:    vextractf32x4 $3, %zmm4, %xmm8
6819; AVX512-NEXT:    vextractf32x4 $3, %zmm0, %xmm9
6820; AVX512-NEXT:    xorl %eax, %eax
6821; AVX512-NEXT:    vucomisd %xmm8, %xmm9
6822; AVX512-NEXT:    movq $-1, %rcx
6823; AVX512-NEXT:    movl $0, %edx
6824; AVX512-NEXT:    cmovaq %rcx, %rdx
6825; AVX512-NEXT:    vmovq %rdx, %xmm10
6826; AVX512-NEXT:    vpermilpd {{.*#+}} xmm8 = xmm8[1,0]
6827; AVX512-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
6828; AVX512-NEXT:    vucomisd %xmm8, %xmm9
6829; AVX512-NEXT:    movl $0, %edx
6830; AVX512-NEXT:    cmovaq %rcx, %rdx
6831; AVX512-NEXT:    vmovq %rdx, %xmm8
6832; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm10[0],xmm8[0]
6833; AVX512-NEXT:    vextractf32x4 $2, %zmm4, %xmm9
6834; AVX512-NEXT:    vextractf32x4 $2, %zmm0, %xmm10
6835; AVX512-NEXT:    vucomisd %xmm9, %xmm10
6836; AVX512-NEXT:    movl $0, %edx
6837; AVX512-NEXT:    cmovaq %rcx, %rdx
6838; AVX512-NEXT:    vmovq %rdx, %xmm11
6839; AVX512-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
6840; AVX512-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
6841; AVX512-NEXT:    vucomisd %xmm9, %xmm10
6842; AVX512-NEXT:    movl $0, %edx
6843; AVX512-NEXT:    cmovaq %rcx, %rdx
6844; AVX512-NEXT:    vmovq %rdx, %xmm9
6845; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
6846; AVX512-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
6847; AVX512-NEXT:    vextractf32x4 $1, %zmm4, %xmm9
6848; AVX512-NEXT:    vextractf32x4 $1, %zmm0, %xmm10
6849; AVX512-NEXT:    vucomisd %xmm9, %xmm10
6850; AVX512-NEXT:    movl $0, %edx
6851; AVX512-NEXT:    cmovaq %rcx, %rdx
6852; AVX512-NEXT:    vmovq %rdx, %xmm11
6853; AVX512-NEXT:    vpermilpd {{.*#+}} xmm9 = xmm9[1,0]
6854; AVX512-NEXT:    vpermilpd {{.*#+}} xmm10 = xmm10[1,0]
6855; AVX512-NEXT:    vucomisd %xmm9, %xmm10
6856; AVX512-NEXT:    movl $0, %edx
6857; AVX512-NEXT:    cmovaq %rcx, %rdx
6858; AVX512-NEXT:    vmovq %rdx, %xmm9
6859; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm11[0],xmm9[0]
6860; AVX512-NEXT:    vucomisd %xmm4, %xmm0
6861; AVX512-NEXT:    movl $0, %edx
6862; AVX512-NEXT:    cmovaq %rcx, %rdx
6863; AVX512-NEXT:    vmovq %rdx, %xmm10
6864; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
6865; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
6866; AVX512-NEXT:    vucomisd %xmm4, %xmm0
6867; AVX512-NEXT:    movl $0, %edx
6868; AVX512-NEXT:    cmovaq %rcx, %rdx
6869; AVX512-NEXT:    vmovq %rdx, %xmm0
6870; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
6871; AVX512-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
6872; AVX512-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
6873; AVX512-NEXT:    vpmovqd %zmm0, %ymm8
6874; AVX512-NEXT:    vextractf32x4 $3, %zmm5, %xmm4
6875; AVX512-NEXT:    vextractf32x4 $3, %zmm1, %xmm0
6876; AVX512-NEXT:    vucomisd %xmm4, %xmm0
6877; AVX512-NEXT:    movl $0, %edx
6878; AVX512-NEXT:    cmovaq %rcx, %rdx
6879; AVX512-NEXT:    vmovq %rdx, %xmm9
6880; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
6881; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
6882; AVX512-NEXT:    vucomisd %xmm4, %xmm0
6883; AVX512-NEXT:    movl $0, %edx
6884; AVX512-NEXT:    cmovaq %rcx, %rdx
6885; AVX512-NEXT:    vmovq %rdx, %xmm0
6886; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm0[0]
6887; AVX512-NEXT:    vextractf32x4 $2, %zmm5, %xmm4
6888; AVX512-NEXT:    vextractf32x4 $2, %zmm1, %xmm0
6889; AVX512-NEXT:    vucomisd %xmm4, %xmm0
6890; AVX512-NEXT:    movl $0, %edx
6891; AVX512-NEXT:    cmovaq %rcx, %rdx
6892; AVX512-NEXT:    vmovq %rdx, %xmm10
6893; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
6894; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
6895; AVX512-NEXT:    vucomisd %xmm4, %xmm0
6896; AVX512-NEXT:    movl $0, %edx
6897; AVX512-NEXT:    cmovaq %rcx, %rdx
6898; AVX512-NEXT:    vmovq %rdx, %xmm0
6899; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
6900; AVX512-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
6901; AVX512-NEXT:    vextractf32x4 $1, %zmm5, %xmm4
6902; AVX512-NEXT:    vextractf32x4 $1, %zmm1, %xmm0
6903; AVX512-NEXT:    vucomisd %xmm4, %xmm0
6904; AVX512-NEXT:    movl $0, %edx
6905; AVX512-NEXT:    cmovaq %rcx, %rdx
6906; AVX512-NEXT:    vmovq %rdx, %xmm10
6907; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
6908; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
6909; AVX512-NEXT:    vucomisd %xmm4, %xmm0
6910; AVX512-NEXT:    movl $0, %edx
6911; AVX512-NEXT:    cmovaq %rcx, %rdx
6912; AVX512-NEXT:    vmovq %rdx, %xmm0
6913; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm10[0],xmm0[0]
6914; AVX512-NEXT:    vucomisd %xmm5, %xmm1
6915; AVX512-NEXT:    movl $0, %edx
6916; AVX512-NEXT:    cmovaq %rcx, %rdx
6917; AVX512-NEXT:    vmovq %rdx, %xmm4
6918; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
6919; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
6920; AVX512-NEXT:    vucomisd %xmm5, %xmm1
6921; AVX512-NEXT:    movl $0, %edx
6922; AVX512-NEXT:    cmovaq %rcx, %rdx
6923; AVX512-NEXT:    vmovq %rdx, %xmm1
6924; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
6925; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
6926; AVX512-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
6927; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
6928; AVX512-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
6929; AVX512-NEXT:    vpmovdb %zmm0, %xmm8
6930; AVX512-NEXT:    vextractf32x4 $3, %zmm6, %xmm1
6931; AVX512-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
6932; AVX512-NEXT:    vucomisd %xmm1, %xmm4
6933; AVX512-NEXT:    movl $0, %edx
6934; AVX512-NEXT:    cmovaq %rcx, %rdx
6935; AVX512-NEXT:    vmovq %rdx, %xmm5
6936; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
6937; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
6938; AVX512-NEXT:    vucomisd %xmm1, %xmm4
6939; AVX512-NEXT:    movl $0, %edx
6940; AVX512-NEXT:    cmovaq %rcx, %rdx
6941; AVX512-NEXT:    vmovq %rdx, %xmm1
6942; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
6943; AVX512-NEXT:    vextractf32x4 $2, %zmm6, %xmm4
6944; AVX512-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
6945; AVX512-NEXT:    vucomisd %xmm4, %xmm5
6946; AVX512-NEXT:    movl $0, %edx
6947; AVX512-NEXT:    cmovaq %rcx, %rdx
6948; AVX512-NEXT:    vmovq %rdx, %xmm0
6949; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
6950; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
6951; AVX512-NEXT:    vucomisd %xmm4, %xmm5
6952; AVX512-NEXT:    movl $0, %edx
6953; AVX512-NEXT:    cmovaq %rcx, %rdx
6954; AVX512-NEXT:    vmovq %rdx, %xmm4
6955; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
6956; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
6957; AVX512-NEXT:    vextractf32x4 $1, %zmm6, %xmm1
6958; AVX512-NEXT:    vextractf32x4 $1, %zmm2, %xmm4
6959; AVX512-NEXT:    vucomisd %xmm1, %xmm4
6960; AVX512-NEXT:    movl $0, %edx
6961; AVX512-NEXT:    cmovaq %rcx, %rdx
6962; AVX512-NEXT:    vmovq %rdx, %xmm5
6963; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
6964; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
6965; AVX512-NEXT:    vucomisd %xmm1, %xmm4
6966; AVX512-NEXT:    movl $0, %edx
6967; AVX512-NEXT:    cmovaq %rcx, %rdx
6968; AVX512-NEXT:    vmovq %rdx, %xmm1
6969; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
6970; AVX512-NEXT:    vucomisd %xmm6, %xmm2
6971; AVX512-NEXT:    movl $0, %edx
6972; AVX512-NEXT:    cmovaq %rcx, %rdx
6973; AVX512-NEXT:    vmovq %rdx, %xmm4
6974; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
6975; AVX512-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
6976; AVX512-NEXT:    vucomisd %xmm5, %xmm2
6977; AVX512-NEXT:    movl $0, %edx
6978; AVX512-NEXT:    cmovaq %rcx, %rdx
6979; AVX512-NEXT:    vmovq %rdx, %xmm2
6980; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm4[0],xmm2[0]
6981; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
6982; AVX512-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
6983; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
6984; AVX512-NEXT:    vextractf32x4 $3, %zmm7, %xmm1
6985; AVX512-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
6986; AVX512-NEXT:    vucomisd %xmm1, %xmm2
6987; AVX512-NEXT:    movl $0, %edx
6988; AVX512-NEXT:    cmovaq %rcx, %rdx
6989; AVX512-NEXT:    vmovq %rdx, %xmm4
6990; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
6991; AVX512-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
6992; AVX512-NEXT:    vucomisd %xmm1, %xmm2
6993; AVX512-NEXT:    movl $0, %edx
6994; AVX512-NEXT:    cmovaq %rcx, %rdx
6995; AVX512-NEXT:    vmovq %rdx, %xmm1
6996; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]
6997; AVX512-NEXT:    vextractf32x4 $2, %zmm7, %xmm2
6998; AVX512-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
6999; AVX512-NEXT:    vucomisd %xmm2, %xmm4
7000; AVX512-NEXT:    movl $0, %edx
7001; AVX512-NEXT:    cmovaq %rcx, %rdx
7002; AVX512-NEXT:    vmovq %rdx, %xmm5
7003; AVX512-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
7004; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
7005; AVX512-NEXT:    vucomisd %xmm2, %xmm4
7006; AVX512-NEXT:    movl $0, %edx
7007; AVX512-NEXT:    cmovaq %rcx, %rdx
7008; AVX512-NEXT:    vmovq %rdx, %xmm2
7009; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
7010; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
7011; AVX512-NEXT:    vextractf32x4 $1, %zmm7, %xmm2
7012; AVX512-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
7013; AVX512-NEXT:    vucomisd %xmm2, %xmm4
7014; AVX512-NEXT:    movl $0, %edx
7015; AVX512-NEXT:    cmovaq %rcx, %rdx
7016; AVX512-NEXT:    vmovq %rdx, %xmm5
7017; AVX512-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
7018; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
7019; AVX512-NEXT:    vucomisd %xmm2, %xmm4
7020; AVX512-NEXT:    movl $0, %edx
7021; AVX512-NEXT:    cmovaq %rcx, %rdx
7022; AVX512-NEXT:    vmovq %rdx, %xmm2
7023; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
7024; AVX512-NEXT:    vucomisd %xmm7, %xmm3
7025; AVX512-NEXT:    movl $0, %edx
7026; AVX512-NEXT:    cmovaq %rcx, %rdx
7027; AVX512-NEXT:    vmovq %rdx, %xmm4
7028; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm7[1,0]
7029; AVX512-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
7030; AVX512-NEXT:    vucomisd %xmm5, %xmm3
7031; AVX512-NEXT:    cmovaq %rcx, %rax
7032; AVX512-NEXT:    vmovq %rax, %xmm3
7033; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]
7034; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2
7035; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm1
7036; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
7037; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
7038; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
7039; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
7040; AVX512-NEXT:    retq
7041  %1 = fcmp ogt <32 x double> %a0, %a1
7042  ret <32 x i1> %1
7043}
7044
7045define <32 x i1> @test_cmp_v32i64(<32 x i64> %a0, <32 x i64> %a1) nounwind {
7046; SSE2-LABEL: test_cmp_v32i64:
7047; SSE2:       # BB#0:
7048; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
7049; SSE2-NEXT:    pxor %xmm8, %xmm7
7050; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
7051; SSE2-NEXT:    pxor %xmm8, %xmm9
7052; SSE2-NEXT:    movdqa %xmm7, %xmm10
7053; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7054; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7055; SSE2-NEXT:    pcmpeqd %xmm7, %xmm9
7056; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
7057; SSE2-NEXT:    pand %xmm11, %xmm9
7058; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm10[1,1,3,3]
7059; SSE2-NEXT:    por %xmm9, %xmm7
7060; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,2,2,3]
7061; SSE2-NEXT:    pxor %xmm8, %xmm6
7062; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
7063; SSE2-NEXT:    pxor %xmm8, %xmm7
7064; SSE2-NEXT:    movdqa %xmm6, %xmm10
7065; SSE2-NEXT:    pcmpgtd %xmm7, %xmm10
7066; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7067; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
7068; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7069; SSE2-NEXT:    pand %xmm11, %xmm6
7070; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm10[1,1,3,3]
7071; SSE2-NEXT:    por %xmm6, %xmm7
7072; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[0,2,2,3]
7073; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm9[0]
7074; SSE2-NEXT:    pslld $31, %xmm6
7075; SSE2-NEXT:    psrad $31, %xmm6
7076; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm6[0,2,2,3,4,5,6,7]
7077; SSE2-NEXT:    pshufhw {{.*#+}} xmm6 = xmm6[0,1,2,3,4,6,6,7]
7078; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,2,2,3]
7079; SSE2-NEXT:    pxor %xmm8, %xmm5
7080; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
7081; SSE2-NEXT:    pxor %xmm8, %xmm7
7082; SSE2-NEXT:    movdqa %xmm5, %xmm6
7083; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
7084; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
7085; SSE2-NEXT:    pcmpeqd %xmm5, %xmm7
7086; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
7087; SSE2-NEXT:    pand %xmm10, %xmm5
7088; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
7089; SSE2-NEXT:    por %xmm5, %xmm6
7090; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[0,2,2,3]
7091; SSE2-NEXT:    pxor %xmm8, %xmm4
7092; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm6
7093; SSE2-NEXT:    pxor %xmm8, %xmm6
7094; SSE2-NEXT:    movdqa %xmm4, %xmm7
7095; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
7096; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[0,0,2,2]
7097; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
7098; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[1,1,3,3]
7099; SSE2-NEXT:    pand %xmm5, %xmm4
7100; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
7101; SSE2-NEXT:    por %xmm4, %xmm5
7102; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[0,2,2,3]
7103; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm10[0]
7104; SSE2-NEXT:    pslld $31, %xmm4
7105; SSE2-NEXT:    psrad $31, %xmm4
7106; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,2,2,3,4,5,6,7]
7107; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
7108; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,2,2,3]
7109; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm9[0]
7110; SSE2-NEXT:    psllw $15, %xmm5
7111; SSE2-NEXT:    psraw $15, %xmm5
7112; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [255,255,255,255,255,255,255,255]
7113; SSE2-NEXT:    pand %xmm9, %xmm5
7114; SSE2-NEXT:    pxor %xmm8, %xmm3
7115; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm6
7116; SSE2-NEXT:    pxor %xmm8, %xmm6
7117; SSE2-NEXT:    movdqa %xmm3, %xmm7
7118; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
7119; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
7120; SSE2-NEXT:    pcmpeqd %xmm3, %xmm6
7121; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
7122; SSE2-NEXT:    pand %xmm4, %xmm3
7123; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
7124; SSE2-NEXT:    por %xmm3, %xmm4
7125; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3]
7126; SSE2-NEXT:    pxor %xmm8, %xmm2
7127; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
7128; SSE2-NEXT:    pxor %xmm8, %xmm4
7129; SSE2-NEXT:    movdqa %xmm2, %xmm6
7130; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
7131; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
7132; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7133; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7134; SSE2-NEXT:    pand %xmm7, %xmm2
7135; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[1,1,3,3]
7136; SSE2-NEXT:    por %xmm2, %xmm4
7137; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[0,2,2,3]
7138; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
7139; SSE2-NEXT:    pslld $31, %xmm2
7140; SSE2-NEXT:    psrad $31, %xmm2
7141; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
7142; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
7143; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
7144; SSE2-NEXT:    pxor %xmm8, %xmm1
7145; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
7146; SSE2-NEXT:    pxor %xmm8, %xmm3
7147; SSE2-NEXT:    movdqa %xmm1, %xmm4
7148; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
7149; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
7150; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
7151; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
7152; SSE2-NEXT:    pand %xmm6, %xmm1
7153; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
7154; SSE2-NEXT:    por %xmm1, %xmm3
7155; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]
7156; SSE2-NEXT:    pxor %xmm8, %xmm0
7157; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
7158; SSE2-NEXT:    pxor %xmm8, %xmm3
7159; SSE2-NEXT:    movdqa %xmm0, %xmm4
7160; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
7161; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
7162; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
7163; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
7164; SSE2-NEXT:    pand %xmm6, %xmm0
7165; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
7166; SSE2-NEXT:    por %xmm0, %xmm3
7167; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]
7168; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
7169; SSE2-NEXT:    pslld $31, %xmm0
7170; SSE2-NEXT:    psrad $31, %xmm0
7171; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
7172; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
7173; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
7174; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
7175; SSE2-NEXT:    psllw $15, %xmm0
7176; SSE2-NEXT:    psraw $15, %xmm0
7177; SSE2-NEXT:    pand %xmm9, %xmm0
7178; SSE2-NEXT:    packuswb %xmm5, %xmm0
7179; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7180; SSE2-NEXT:    pxor %xmm8, %xmm1
7181; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
7182; SSE2-NEXT:    pxor %xmm8, %xmm2
7183; SSE2-NEXT:    movdqa %xmm2, %xmm3
7184; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
7185; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
7186; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
7187; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
7188; SSE2-NEXT:    pand %xmm4, %xmm1
7189; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
7190; SSE2-NEXT:    por %xmm1, %xmm2
7191; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]
7192; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
7193; SSE2-NEXT:    pxor %xmm8, %xmm2
7194; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
7195; SSE2-NEXT:    pxor %xmm8, %xmm3
7196; SSE2-NEXT:    movdqa %xmm3, %xmm4
7197; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
7198; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
7199; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
7200; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
7201; SSE2-NEXT:    pand %xmm5, %xmm2
7202; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
7203; SSE2-NEXT:    por %xmm2, %xmm3
7204; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[0,2,2,3]
7205; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
7206; SSE2-NEXT:    pslld $31, %xmm2
7207; SSE2-NEXT:    psrad $31, %xmm2
7208; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm2[0,2,2,3,4,5,6,7]
7209; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
7210; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3]
7211; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7212; SSE2-NEXT:    pxor %xmm8, %xmm1
7213; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
7214; SSE2-NEXT:    pxor %xmm8, %xmm3
7215; SSE2-NEXT:    movdqa %xmm3, %xmm4
7216; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
7217; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
7218; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
7219; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
7220; SSE2-NEXT:    pand %xmm5, %xmm1
7221; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
7222; SSE2-NEXT:    por %xmm1, %xmm3
7223; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]
7224; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
7225; SSE2-NEXT:    pxor %xmm8, %xmm3
7226; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
7227; SSE2-NEXT:    pxor %xmm8, %xmm4
7228; SSE2-NEXT:    movdqa %xmm4, %xmm5
7229; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
7230; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7231; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4
7232; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
7233; SSE2-NEXT:    pand %xmm6, %xmm3
7234; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7235; SSE2-NEXT:    por %xmm3, %xmm4
7236; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3]
7237; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm1[0]
7238; SSE2-NEXT:    pslld $31, %xmm3
7239; SSE2-NEXT:    psrad $31, %xmm3
7240; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm3[0,2,2,3,4,5,6,7]
7241; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
7242; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
7243; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
7244; SSE2-NEXT:    psllw $15, %xmm1
7245; SSE2-NEXT:    psraw $15, %xmm1
7246; SSE2-NEXT:    pand %xmm9, %xmm1
7247; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
7248; SSE2-NEXT:    pxor %xmm8, %xmm2
7249; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
7250; SSE2-NEXT:    pxor %xmm8, %xmm3
7251; SSE2-NEXT:    movdqa %xmm3, %xmm4
7252; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
7253; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
7254; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
7255; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
7256; SSE2-NEXT:    pand %xmm5, %xmm2
7257; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
7258; SSE2-NEXT:    por %xmm2, %xmm3
7259; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[0,2,2,3]
7260; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
7261; SSE2-NEXT:    pxor %xmm8, %xmm3
7262; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
7263; SSE2-NEXT:    pxor %xmm8, %xmm4
7264; SSE2-NEXT:    movdqa %xmm4, %xmm5
7265; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
7266; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7267; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4
7268; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
7269; SSE2-NEXT:    pand %xmm6, %xmm3
7270; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7271; SSE2-NEXT:    por %xmm3, %xmm4
7272; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3]
7273; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
7274; SSE2-NEXT:    pslld $31, %xmm3
7275; SSE2-NEXT:    psrad $31, %xmm3
7276; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm3[0,2,2,3,4,5,6,7]
7277; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
7278; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
7279; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
7280; SSE2-NEXT:    pxor %xmm8, %xmm3
7281; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
7282; SSE2-NEXT:    pxor %xmm8, %xmm4
7283; SSE2-NEXT:    movdqa %xmm4, %xmm5
7284; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
7285; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7286; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4
7287; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
7288; SSE2-NEXT:    pand %xmm6, %xmm3
7289; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7290; SSE2-NEXT:    por %xmm3, %xmm4
7291; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3]
7292; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
7293; SSE2-NEXT:    pxor %xmm8, %xmm4
7294; SSE2-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm8
7295; SSE2-NEXT:    movdqa %xmm8, %xmm5
7296; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7297; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7298; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7299; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7300; SSE2-NEXT:    pand %xmm6, %xmm4
7301; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7302; SSE2-NEXT:    por %xmm4, %xmm5
7303; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[0,2,2,3]
7304; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm3[0]
7305; SSE2-NEXT:    pslld $31, %xmm4
7306; SSE2-NEXT:    psrad $31, %xmm4
7307; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm4[0,2,2,3,4,5,6,7]
7308; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
7309; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
7310; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
7311; SSE2-NEXT:    psllw $15, %xmm3
7312; SSE2-NEXT:    psraw $15, %xmm3
7313; SSE2-NEXT:    pand %xmm9, %xmm3
7314; SSE2-NEXT:    packuswb %xmm1, %xmm3
7315; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
7316; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7317; SSE2-NEXT:    andb $1, %al
7318; SSE2-NEXT:    movb %al, 2(%rdi)
7319; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
7320; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7321; SSE2-NEXT:    andb $1, %al
7322; SSE2-NEXT:    movb %al, (%rdi)
7323; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7324; SSE2-NEXT:    andb $1, %al
7325; SSE2-NEXT:    movb %al, 2(%rdi)
7326; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7327; SSE2-NEXT:    andb $1, %al
7328; SSE2-NEXT:    movb %al, (%rdi)
7329; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7330; SSE2-NEXT:    andb $1, %al
7331; SSE2-NEXT:    movb %al, 2(%rdi)
7332; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7333; SSE2-NEXT:    andb $1, %al
7334; SSE2-NEXT:    movb %al, (%rdi)
7335; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7336; SSE2-NEXT:    andb $1, %al
7337; SSE2-NEXT:    movb %al, 2(%rdi)
7338; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7339; SSE2-NEXT:    andb $1, %al
7340; SSE2-NEXT:    movb %al, (%rdi)
7341; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7342; SSE2-NEXT:    andb $1, %al
7343; SSE2-NEXT:    movb %al, 2(%rdi)
7344; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7345; SSE2-NEXT:    andb $1, %al
7346; SSE2-NEXT:    movb %al, (%rdi)
7347; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7348; SSE2-NEXT:    andb $1, %al
7349; SSE2-NEXT:    movb %al, 2(%rdi)
7350; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7351; SSE2-NEXT:    andb $1, %al
7352; SSE2-NEXT:    movb %al, (%rdi)
7353; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7354; SSE2-NEXT:    andb $1, %al
7355; SSE2-NEXT:    movb %al, 2(%rdi)
7356; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7357; SSE2-NEXT:    andb $1, %al
7358; SSE2-NEXT:    movb %al, (%rdi)
7359; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7360; SSE2-NEXT:    andb $1, %al
7361; SSE2-NEXT:    movb %al, 2(%rdi)
7362; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7363; SSE2-NEXT:    andb $1, %al
7364; SSE2-NEXT:    movb %al, (%rdi)
7365; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7366; SSE2-NEXT:    andb $1, %al
7367; SSE2-NEXT:    movb %al, 2(%rdi)
7368; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7369; SSE2-NEXT:    andb $1, %al
7370; SSE2-NEXT:    movb %al, (%rdi)
7371; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7372; SSE2-NEXT:    andb $1, %al
7373; SSE2-NEXT:    movb %al, 2(%rdi)
7374; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7375; SSE2-NEXT:    andb $1, %al
7376; SSE2-NEXT:    movb %al, (%rdi)
7377; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7378; SSE2-NEXT:    andb $1, %al
7379; SSE2-NEXT:    movb %al, 2(%rdi)
7380; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7381; SSE2-NEXT:    andb $1, %al
7382; SSE2-NEXT:    movb %al, (%rdi)
7383; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7384; SSE2-NEXT:    andb $1, %al
7385; SSE2-NEXT:    movb %al, 2(%rdi)
7386; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7387; SSE2-NEXT:    andb $1, %al
7388; SSE2-NEXT:    movb %al, (%rdi)
7389; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7390; SSE2-NEXT:    andb $1, %al
7391; SSE2-NEXT:    movb %al, 2(%rdi)
7392; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7393; SSE2-NEXT:    andb $1, %al
7394; SSE2-NEXT:    movb %al, (%rdi)
7395; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7396; SSE2-NEXT:    andb $1, %al
7397; SSE2-NEXT:    movb %al, 2(%rdi)
7398; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7399; SSE2-NEXT:    andb $1, %al
7400; SSE2-NEXT:    movb %al, (%rdi)
7401; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7402; SSE2-NEXT:    andb $1, %al
7403; SSE2-NEXT:    movb %al, 2(%rdi)
7404; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7405; SSE2-NEXT:    andb $1, %al
7406; SSE2-NEXT:    movb %al, (%rdi)
7407; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7408; SSE2-NEXT:    andb $1, %al
7409; SSE2-NEXT:    movb %al, 2(%rdi)
7410; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
7411; SSE2-NEXT:    andb $1, %al
7412; SSE2-NEXT:    movb %al, (%rdi)
7413; SSE2-NEXT:    movq %rdi, %rax
7414; SSE2-NEXT:    retq
7415;
7416; SSE42-LABEL: test_cmp_v32i64:
7417; SSE42:       # BB#0:
7418; SSE42-NEXT:    movdqa %xmm0, %xmm8
7419; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
7420; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm10
7421; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm11
7422; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm12
7423; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm13
7424; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm14
7425; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm15
7426; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm7
7427; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,1,0,2]
7428; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm6
7429; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
7430; SSE42-NEXT:    pblendw {{.*#+}} xmm6 = xmm6[0,1,2,3],xmm7[4,5,6,7]
7431; SSE42-NEXT:    pslld $31, %xmm6
7432; SSE42-NEXT:    psrad $31, %xmm6
7433; SSE42-NEXT:    movdqa {{.*#+}} xmm7 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
7434; SSE42-NEXT:    pshufb %xmm7, %xmm6
7435; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm5
7436; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,1,0,2]
7437; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm4
7438; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,2,2,3]
7439; SSE42-NEXT:    pblendw {{.*#+}} xmm5 = xmm5[0,1,2,3],xmm0[4,5,6,7]
7440; SSE42-NEXT:    pslld $31, %xmm5
7441; SSE42-NEXT:    psrad $31, %xmm5
7442; SSE42-NEXT:    pshufb %xmm7, %xmm5
7443; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
7444; SSE42-NEXT:    psllw $15, %xmm5
7445; SSE42-NEXT:    psraw $15, %xmm5
7446; SSE42-NEXT:    movdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
7447; SSE42-NEXT:    pshufb %xmm4, %xmm5
7448; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm3
7449; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,1,0,2]
7450; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm2
7451; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
7452; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm0[4,5,6,7]
7453; SSE42-NEXT:    pslld $31, %xmm2
7454; SSE42-NEXT:    psrad $31, %xmm2
7455; SSE42-NEXT:    pshufb %xmm7, %xmm2
7456; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
7457; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,0,2]
7458; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm8
7459; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[0,2,2,3]
7460; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
7461; SSE42-NEXT:    pslld $31, %xmm0
7462; SSE42-NEXT:    psrad $31, %xmm0
7463; SSE42-NEXT:    pshufb %xmm7, %xmm0
7464; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
7465; SSE42-NEXT:    psllw $15, %xmm0
7466; SSE42-NEXT:    psraw $15, %xmm0
7467; SSE42-NEXT:    pshufb %xmm4, %xmm0
7468; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
7469; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm15
7470; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm15[0,1,0,2]
7471; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm14
7472; SSE42-NEXT:    pshufd {{.*#+}} xmm3 = xmm14[0,2,2,3]
7473; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm1[4,5,6,7]
7474; SSE42-NEXT:    pslld $31, %xmm3
7475; SSE42-NEXT:    psrad $31, %xmm3
7476; SSE42-NEXT:    pshufb %xmm7, %xmm3
7477; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm13
7478; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm13[0,1,0,2]
7479; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm12
7480; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm12[0,2,2,3]
7481; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm1[4,5,6,7]
7482; SSE42-NEXT:    pslld $31, %xmm2
7483; SSE42-NEXT:    psrad $31, %xmm2
7484; SSE42-NEXT:    pshufb %xmm7, %xmm2
7485; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
7486; SSE42-NEXT:    psllw $15, %xmm2
7487; SSE42-NEXT:    psraw $15, %xmm2
7488; SSE42-NEXT:    pshufb %xmm4, %xmm2
7489; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm11
7490; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm11[0,1,0,2]
7491; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm10
7492; SSE42-NEXT:    pshufd {{.*#+}} xmm3 = xmm10[0,2,2,3]
7493; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm1[4,5,6,7]
7494; SSE42-NEXT:    pslld $31, %xmm3
7495; SSE42-NEXT:    psrad $31, %xmm3
7496; SSE42-NEXT:    pshufb %xmm7, %xmm3
7497; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm9
7498; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[0,1,0,2]
7499; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
7500; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
7501; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
7502; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm5[4,5,6,7]
7503; SSE42-NEXT:    pslld $31, %xmm1
7504; SSE42-NEXT:    psrad $31, %xmm1
7505; SSE42-NEXT:    pshufb %xmm7, %xmm1
7506; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
7507; SSE42-NEXT:    psllw $15, %xmm1
7508; SSE42-NEXT:    psraw $15, %xmm1
7509; SSE42-NEXT:    pshufb %xmm4, %xmm1
7510; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
7511; SSE42-NEXT:    pextrb $15, %xmm1, %eax
7512; SSE42-NEXT:    andb $1, %al
7513; SSE42-NEXT:    movb %al, 2(%rdi)
7514; SSE42-NEXT:    pextrb $14, %xmm1, %eax
7515; SSE42-NEXT:    andb $1, %al
7516; SSE42-NEXT:    movb %al, 2(%rdi)
7517; SSE42-NEXT:    pextrb $13, %xmm1, %eax
7518; SSE42-NEXT:    andb $1, %al
7519; SSE42-NEXT:    movb %al, 2(%rdi)
7520; SSE42-NEXT:    pextrb $12, %xmm1, %eax
7521; SSE42-NEXT:    andb $1, %al
7522; SSE42-NEXT:    movb %al, 2(%rdi)
7523; SSE42-NEXT:    pextrb $11, %xmm1, %eax
7524; SSE42-NEXT:    andb $1, %al
7525; SSE42-NEXT:    movb %al, 2(%rdi)
7526; SSE42-NEXT:    pextrb $10, %xmm1, %eax
7527; SSE42-NEXT:    andb $1, %al
7528; SSE42-NEXT:    movb %al, 2(%rdi)
7529; SSE42-NEXT:    pextrb $9, %xmm1, %eax
7530; SSE42-NEXT:    andb $1, %al
7531; SSE42-NEXT:    movb %al, 2(%rdi)
7532; SSE42-NEXT:    pextrb $8, %xmm1, %eax
7533; SSE42-NEXT:    andb $1, %al
7534; SSE42-NEXT:    movb %al, 2(%rdi)
7535; SSE42-NEXT:    pextrb $7, %xmm1, %eax
7536; SSE42-NEXT:    andb $1, %al
7537; SSE42-NEXT:    movb %al, 2(%rdi)
7538; SSE42-NEXT:    pextrb $6, %xmm1, %eax
7539; SSE42-NEXT:    andb $1, %al
7540; SSE42-NEXT:    movb %al, 2(%rdi)
7541; SSE42-NEXT:    pextrb $5, %xmm1, %eax
7542; SSE42-NEXT:    andb $1, %al
7543; SSE42-NEXT:    movb %al, 2(%rdi)
7544; SSE42-NEXT:    pextrb $4, %xmm1, %eax
7545; SSE42-NEXT:    andb $1, %al
7546; SSE42-NEXT:    movb %al, 2(%rdi)
7547; SSE42-NEXT:    pextrb $3, %xmm1, %eax
7548; SSE42-NEXT:    andb $1, %al
7549; SSE42-NEXT:    movb %al, 2(%rdi)
7550; SSE42-NEXT:    pextrb $2, %xmm1, %eax
7551; SSE42-NEXT:    andb $1, %al
7552; SSE42-NEXT:    movb %al, 2(%rdi)
7553; SSE42-NEXT:    pextrb $1, %xmm1, %eax
7554; SSE42-NEXT:    andb $1, %al
7555; SSE42-NEXT:    movb %al, 2(%rdi)
7556; SSE42-NEXT:    pextrb $0, %xmm1, %eax
7557; SSE42-NEXT:    andb $1, %al
7558; SSE42-NEXT:    movb %al, 2(%rdi)
7559; SSE42-NEXT:    pextrb $15, %xmm0, %eax
7560; SSE42-NEXT:    andb $1, %al
7561; SSE42-NEXT:    movb %al, (%rdi)
7562; SSE42-NEXT:    pextrb $14, %xmm0, %eax
7563; SSE42-NEXT:    andb $1, %al
7564; SSE42-NEXT:    movb %al, (%rdi)
7565; SSE42-NEXT:    pextrb $13, %xmm0, %eax
7566; SSE42-NEXT:    andb $1, %al
7567; SSE42-NEXT:    movb %al, (%rdi)
7568; SSE42-NEXT:    pextrb $12, %xmm0, %eax
7569; SSE42-NEXT:    andb $1, %al
7570; SSE42-NEXT:    movb %al, (%rdi)
7571; SSE42-NEXT:    pextrb $11, %xmm0, %eax
7572; SSE42-NEXT:    andb $1, %al
7573; SSE42-NEXT:    movb %al, (%rdi)
7574; SSE42-NEXT:    pextrb $10, %xmm0, %eax
7575; SSE42-NEXT:    andb $1, %al
7576; SSE42-NEXT:    movb %al, (%rdi)
7577; SSE42-NEXT:    pextrb $9, %xmm0, %eax
7578; SSE42-NEXT:    andb $1, %al
7579; SSE42-NEXT:    movb %al, (%rdi)
7580; SSE42-NEXT:    pextrb $8, %xmm0, %eax
7581; SSE42-NEXT:    andb $1, %al
7582; SSE42-NEXT:    movb %al, (%rdi)
7583; SSE42-NEXT:    pextrb $7, %xmm0, %eax
7584; SSE42-NEXT:    andb $1, %al
7585; SSE42-NEXT:    movb %al, (%rdi)
7586; SSE42-NEXT:    pextrb $6, %xmm0, %eax
7587; SSE42-NEXT:    andb $1, %al
7588; SSE42-NEXT:    movb %al, (%rdi)
7589; SSE42-NEXT:    pextrb $5, %xmm0, %eax
7590; SSE42-NEXT:    andb $1, %al
7591; SSE42-NEXT:    movb %al, (%rdi)
7592; SSE42-NEXT:    pextrb $4, %xmm0, %eax
7593; SSE42-NEXT:    andb $1, %al
7594; SSE42-NEXT:    movb %al, (%rdi)
7595; SSE42-NEXT:    pextrb $3, %xmm0, %eax
7596; SSE42-NEXT:    andb $1, %al
7597; SSE42-NEXT:    movb %al, (%rdi)
7598; SSE42-NEXT:    pextrb $2, %xmm0, %eax
7599; SSE42-NEXT:    andb $1, %al
7600; SSE42-NEXT:    movb %al, (%rdi)
7601; SSE42-NEXT:    pextrb $1, %xmm0, %eax
7602; SSE42-NEXT:    andb $1, %al
7603; SSE42-NEXT:    movb %al, (%rdi)
7604; SSE42-NEXT:    pextrb $0, %xmm0, %eax
7605; SSE42-NEXT:    andb $1, %al
7606; SSE42-NEXT:    movb %al, (%rdi)
7607; SSE42-NEXT:    movq %rdi, %rax
7608; SSE42-NEXT:    retq
7609;
7610; AVX1-LABEL: test_cmp_v32i64:
7611; AVX1:       # BB#0:
7612; AVX1-NEXT:    pushq %rbp
7613; AVX1-NEXT:    movq %rsp, %rbp
7614; AVX1-NEXT:    andq $-32, %rsp
7615; AVX1-NEXT:    subq $32, %rsp
7616; AVX1-NEXT:    vmovaps 240(%rbp), %ymm8
7617; AVX1-NEXT:    vextractf128 $1, %ymm8, %xmm9
7618; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm10
7619; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm10, %xmm9
7620; AVX1-NEXT:    vmovaps 208(%rbp), %ymm10
7621; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm7, %xmm7
7622; AVX1-NEXT:    vpacksswb %xmm9, %xmm7, %xmm8
7623; AVX1-NEXT:    vextractf128 $1, %ymm10, %xmm9
7624; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
7625; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm7, %xmm7
7626; AVX1-NEXT:    vpcmpgtq %xmm10, %xmm6, %xmm6
7627; AVX1-NEXT:    vmovaps 176(%rbp), %ymm9
7628; AVX1-NEXT:    vpacksswb %xmm7, %xmm6, %xmm6
7629; AVX1-NEXT:    vpacksswb %xmm8, %xmm6, %xmm8
7630; AVX1-NEXT:    vextractf128 $1, %ymm9, %xmm7
7631; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm6
7632; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
7633; AVX1-NEXT:    vmovaps 144(%rbp), %ymm10
7634; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm5, %xmm5
7635; AVX1-NEXT:    vpacksswb %xmm6, %xmm5, %xmm5
7636; AVX1-NEXT:    vextractf128 $1, %ymm10, %xmm6
7637; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm7
7638; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7639; AVX1-NEXT:    vpcmpgtq %xmm10, %xmm4, %xmm4
7640; AVX1-NEXT:    vpacksswb %xmm6, %xmm4, %xmm4
7641; AVX1-NEXT:    vmovaps 112(%rbp), %ymm6
7642; AVX1-NEXT:    vpacksswb %xmm5, %xmm4, %xmm4
7643; AVX1-NEXT:    vpacksswb %xmm8, %xmm4, %xmm4
7644; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm5
7645; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
7646; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm7, %xmm5
7647; AVX1-NEXT:    vmovaps 80(%rbp), %ymm7
7648; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm3
7649; AVX1-NEXT:    vpacksswb %xmm5, %xmm3, %xmm3
7650; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm5
7651; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7652; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
7653; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm2, %xmm2
7654; AVX1-NEXT:    vmovaps 48(%rbp), %ymm6
7655; AVX1-NEXT:    vpacksswb %xmm5, %xmm2, %xmm2
7656; AVX1-NEXT:    vpacksswb %xmm3, %xmm2, %xmm2
7657; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm3
7658; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
7659; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3
7660; AVX1-NEXT:    vmovaps 16(%rbp), %ymm5
7661; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm1, %xmm1
7662; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
7663; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
7664; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
7665; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm3
7666; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm0, %xmm0
7667; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
7668; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
7669; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
7670; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7671; AVX1-NEXT:    movq %rbp, %rsp
7672; AVX1-NEXT:    popq %rbp
7673; AVX1-NEXT:    retq
7674;
7675; AVX2-LABEL: test_cmp_v32i64:
7676; AVX2:       # BB#0:
7677; AVX2-NEXT:    pushq %rbp
7678; AVX2-NEXT:    movq %rsp, %rbp
7679; AVX2-NEXT:    andq $-32, %rsp
7680; AVX2-NEXT:    subq $32, %rsp
7681; AVX2-NEXT:    vpcmpgtq 240(%rbp), %ymm7, %ymm7
7682; AVX2-NEXT:    vpcmpgtq 208(%rbp), %ymm6, %ymm6
7683; AVX2-NEXT:    vpacksswb %ymm7, %ymm6, %ymm6
7684; AVX2-NEXT:    vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]
7685; AVX2-NEXT:    vpcmpgtq 176(%rbp), %ymm5, %ymm5
7686; AVX2-NEXT:    vpcmpgtq 144(%rbp), %ymm4, %ymm4
7687; AVX2-NEXT:    vpacksswb %ymm5, %ymm4, %ymm4
7688; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
7689; AVX2-NEXT:    vpacksswb %ymm6, %ymm4, %ymm4
7690; AVX2-NEXT:    vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
7691; AVX2-NEXT:    vpcmpgtq 112(%rbp), %ymm3, %ymm3
7692; AVX2-NEXT:    vpcmpgtq 80(%rbp), %ymm2, %ymm2
7693; AVX2-NEXT:    vpacksswb %ymm3, %ymm2, %ymm2
7694; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
7695; AVX2-NEXT:    vpcmpgtq 48(%rbp), %ymm1, %ymm1
7696; AVX2-NEXT:    vpcmpgtq 16(%rbp), %ymm0, %ymm0
7697; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
7698; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
7699; AVX2-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
7700; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
7701; AVX2-NEXT:    vpacksswb %ymm4, %ymm0, %ymm0
7702; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
7703; AVX2-NEXT:    movq %rbp, %rsp
7704; AVX2-NEXT:    popq %rbp
7705; AVX2-NEXT:    retq
7706;
7707; AVX512-LABEL: test_cmp_v32i64:
7708; AVX512:       # BB#0:
7709; AVX512-NEXT:    vextracti32x4 $3, %zmm4, %xmm8
7710; AVX512-NEXT:    vpextrq $1, %xmm8, %rcx
7711; AVX512-NEXT:    vextracti32x4 $3, %zmm0, %xmm9
7712; AVX512-NEXT:    vpextrq $1, %xmm9, %rdx
7713; AVX512-NEXT:    xorl %eax, %eax
7714; AVX512-NEXT:    cmpq %rcx, %rdx
7715; AVX512-NEXT:    movq $-1, %rcx
7716; AVX512-NEXT:    movl $0, %edx
7717; AVX512-NEXT:    cmovgq %rcx, %rdx
7718; AVX512-NEXT:    vmovq %rdx, %xmm10
7719; AVX512-NEXT:    vmovq %xmm8, %rdx
7720; AVX512-NEXT:    vmovq %xmm9, %rsi
7721; AVX512-NEXT:    cmpq %rdx, %rsi
7722; AVX512-NEXT:    movl $0, %edx
7723; AVX512-NEXT:    cmovgq %rcx, %rdx
7724; AVX512-NEXT:    vmovq %rdx, %xmm8
7725; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm10[0]
7726; AVX512-NEXT:    vextracti32x4 $2, %zmm4, %xmm9
7727; AVX512-NEXT:    vpextrq $1, %xmm9, %rdx
7728; AVX512-NEXT:    vextracti32x4 $2, %zmm0, %xmm10
7729; AVX512-NEXT:    vpextrq $1, %xmm10, %rsi
7730; AVX512-NEXT:    cmpq %rdx, %rsi
7731; AVX512-NEXT:    movl $0, %edx
7732; AVX512-NEXT:    cmovgq %rcx, %rdx
7733; AVX512-NEXT:    vmovq %rdx, %xmm11
7734; AVX512-NEXT:    vmovq %xmm9, %rdx
7735; AVX512-NEXT:    vmovq %xmm10, %rsi
7736; AVX512-NEXT:    cmpq %rdx, %rsi
7737; AVX512-NEXT:    movl $0, %edx
7738; AVX512-NEXT:    cmovgq %rcx, %rdx
7739; AVX512-NEXT:    vmovq %rdx, %xmm9
7740; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
7741; AVX512-NEXT:    vinserti128 $1, %xmm8, %ymm9, %ymm8
7742; AVX512-NEXT:    vextracti32x4 $1, %zmm4, %xmm9
7743; AVX512-NEXT:    vpextrq $1, %xmm9, %rdx
7744; AVX512-NEXT:    vextracti32x4 $1, %zmm0, %xmm10
7745; AVX512-NEXT:    vpextrq $1, %xmm10, %rsi
7746; AVX512-NEXT:    cmpq %rdx, %rsi
7747; AVX512-NEXT:    movl $0, %edx
7748; AVX512-NEXT:    cmovgq %rcx, %rdx
7749; AVX512-NEXT:    vmovq %rdx, %xmm11
7750; AVX512-NEXT:    vmovq %xmm9, %rdx
7751; AVX512-NEXT:    vmovq %xmm10, %rsi
7752; AVX512-NEXT:    cmpq %rdx, %rsi
7753; AVX512-NEXT:    movl $0, %edx
7754; AVX512-NEXT:    cmovgq %rcx, %rdx
7755; AVX512-NEXT:    vmovq %rdx, %xmm9
7756; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
7757; AVX512-NEXT:    vpextrq $1, %xmm4, %rdx
7758; AVX512-NEXT:    vpextrq $1, %xmm0, %rsi
7759; AVX512-NEXT:    cmpq %rdx, %rsi
7760; AVX512-NEXT:    movl $0, %edx
7761; AVX512-NEXT:    cmovgq %rcx, %rdx
7762; AVX512-NEXT:    vmovq %rdx, %xmm10
7763; AVX512-NEXT:    vmovq %xmm4, %rdx
7764; AVX512-NEXT:    vmovq %xmm0, %rsi
7765; AVX512-NEXT:    cmpq %rdx, %rsi
7766; AVX512-NEXT:    movl $0, %edx
7767; AVX512-NEXT:    cmovgq %rcx, %rdx
7768; AVX512-NEXT:    vmovq %rdx, %xmm0
7769; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
7770; AVX512-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm0
7771; AVX512-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
7772; AVX512-NEXT:    vpmovqd %zmm0, %ymm8
7773; AVX512-NEXT:    vextracti32x4 $3, %zmm5, %xmm4
7774; AVX512-NEXT:    vpextrq $1, %xmm4, %rdx
7775; AVX512-NEXT:    vextracti32x4 $3, %zmm1, %xmm0
7776; AVX512-NEXT:    vpextrq $1, %xmm0, %rsi
7777; AVX512-NEXT:    cmpq %rdx, %rsi
7778; AVX512-NEXT:    movl $0, %edx
7779; AVX512-NEXT:    cmovgq %rcx, %rdx
7780; AVX512-NEXT:    vmovq %rdx, %xmm9
7781; AVX512-NEXT:    vmovq %xmm4, %rdx
7782; AVX512-NEXT:    vmovq %xmm0, %rsi
7783; AVX512-NEXT:    cmpq %rdx, %rsi
7784; AVX512-NEXT:    movl $0, %edx
7785; AVX512-NEXT:    cmovgq %rcx, %rdx
7786; AVX512-NEXT:    vmovq %rdx, %xmm0
7787; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm9 = xmm0[0],xmm9[0]
7788; AVX512-NEXT:    vextracti32x4 $2, %zmm5, %xmm4
7789; AVX512-NEXT:    vpextrq $1, %xmm4, %rdx
7790; AVX512-NEXT:    vextracti32x4 $2, %zmm1, %xmm0
7791; AVX512-NEXT:    vpextrq $1, %xmm0, %rsi
7792; AVX512-NEXT:    cmpq %rdx, %rsi
7793; AVX512-NEXT:    movl $0, %edx
7794; AVX512-NEXT:    cmovgq %rcx, %rdx
7795; AVX512-NEXT:    vmovq %rdx, %xmm10
7796; AVX512-NEXT:    vmovq %xmm4, %rdx
7797; AVX512-NEXT:    vmovq %xmm0, %rsi
7798; AVX512-NEXT:    cmpq %rdx, %rsi
7799; AVX512-NEXT:    movl $0, %edx
7800; AVX512-NEXT:    cmovgq %rcx, %rdx
7801; AVX512-NEXT:    vmovq %rdx, %xmm0
7802; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
7803; AVX512-NEXT:    vinserti128 $1, %xmm9, %ymm0, %ymm9
7804; AVX512-NEXT:    vextracti32x4 $1, %zmm5, %xmm0
7805; AVX512-NEXT:    vpextrq $1, %xmm0, %rdx
7806; AVX512-NEXT:    vextracti32x4 $1, %zmm1, %xmm4
7807; AVX512-NEXT:    vpextrq $1, %xmm4, %rsi
7808; AVX512-NEXT:    cmpq %rdx, %rsi
7809; AVX512-NEXT:    movl $0, %edx
7810; AVX512-NEXT:    cmovgq %rcx, %rdx
7811; AVX512-NEXT:    vmovq %rdx, %xmm10
7812; AVX512-NEXT:    vmovq %xmm0, %rdx
7813; AVX512-NEXT:    vmovq %xmm4, %rsi
7814; AVX512-NEXT:    cmpq %rdx, %rsi
7815; AVX512-NEXT:    movl $0, %edx
7816; AVX512-NEXT:    cmovgq %rcx, %rdx
7817; AVX512-NEXT:    vmovq %rdx, %xmm0
7818; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm10[0]
7819; AVX512-NEXT:    vpextrq $1, %xmm5, %rdx
7820; AVX512-NEXT:    vpextrq $1, %xmm1, %rsi
7821; AVX512-NEXT:    cmpq %rdx, %rsi
7822; AVX512-NEXT:    movl $0, %edx
7823; AVX512-NEXT:    cmovgq %rcx, %rdx
7824; AVX512-NEXT:    vmovq %rdx, %xmm4
7825; AVX512-NEXT:    vmovq %xmm5, %rdx
7826; AVX512-NEXT:    vmovq %xmm1, %rsi
7827; AVX512-NEXT:    cmpq %rdx, %rsi
7828; AVX512-NEXT:    movl $0, %edx
7829; AVX512-NEXT:    cmovgq %rcx, %rdx
7830; AVX512-NEXT:    vmovq %rdx, %xmm1
7831; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
7832; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
7833; AVX512-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm0
7834; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
7835; AVX512-NEXT:    vinserti64x4 $1, %ymm0, %zmm8, %zmm0
7836; AVX512-NEXT:    vpmovdb %zmm0, %xmm8
7837; AVX512-NEXT:    vextracti32x4 $3, %zmm6, %xmm1
7838; AVX512-NEXT:    vpextrq $1, %xmm1, %rdx
7839; AVX512-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
7840; AVX512-NEXT:    vpextrq $1, %xmm4, %rsi
7841; AVX512-NEXT:    cmpq %rdx, %rsi
7842; AVX512-NEXT:    movl $0, %edx
7843; AVX512-NEXT:    cmovgq %rcx, %rdx
7844; AVX512-NEXT:    vmovq %rdx, %xmm5
7845; AVX512-NEXT:    vmovq %xmm1, %rdx
7846; AVX512-NEXT:    vmovq %xmm4, %rsi
7847; AVX512-NEXT:    cmpq %rdx, %rsi
7848; AVX512-NEXT:    movl $0, %edx
7849; AVX512-NEXT:    cmovgq %rcx, %rdx
7850; AVX512-NEXT:    vmovq %rdx, %xmm1
7851; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
7852; AVX512-NEXT:    vextracti32x4 $2, %zmm6, %xmm4
7853; AVX512-NEXT:    vpextrq $1, %xmm4, %rdx
7854; AVX512-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
7855; AVX512-NEXT:    vpextrq $1, %xmm5, %rsi
7856; AVX512-NEXT:    cmpq %rdx, %rsi
7857; AVX512-NEXT:    movl $0, %edx
7858; AVX512-NEXT:    cmovgq %rcx, %rdx
7859; AVX512-NEXT:    vmovq %rdx, %xmm0
7860; AVX512-NEXT:    vmovq %xmm4, %rdx
7861; AVX512-NEXT:    vmovq %xmm5, %rsi
7862; AVX512-NEXT:    cmpq %rdx, %rsi
7863; AVX512-NEXT:    movl $0, %edx
7864; AVX512-NEXT:    cmovgq %rcx, %rdx
7865; AVX512-NEXT:    vmovq %rdx, %xmm4
7866; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm4[0],xmm0[0]
7867; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
7868; AVX512-NEXT:    vextracti32x4 $1, %zmm6, %xmm0
7869; AVX512-NEXT:    vpextrq $1, %xmm0, %rdx
7870; AVX512-NEXT:    vextracti32x4 $1, %zmm2, %xmm4
7871; AVX512-NEXT:    vpextrq $1, %xmm4, %rsi
7872; AVX512-NEXT:    cmpq %rdx, %rsi
7873; AVX512-NEXT:    movl $0, %edx
7874; AVX512-NEXT:    cmovgq %rcx, %rdx
7875; AVX512-NEXT:    vmovq %rdx, %xmm5
7876; AVX512-NEXT:    vmovq %xmm0, %rdx
7877; AVX512-NEXT:    vmovq %xmm4, %rsi
7878; AVX512-NEXT:    cmpq %rdx, %rsi
7879; AVX512-NEXT:    movl $0, %edx
7880; AVX512-NEXT:    cmovgq %rcx, %rdx
7881; AVX512-NEXT:    vmovq %rdx, %xmm0
7882; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
7883; AVX512-NEXT:    vpextrq $1, %xmm6, %rdx
7884; AVX512-NEXT:    vpextrq $1, %xmm2, %rsi
7885; AVX512-NEXT:    cmpq %rdx, %rsi
7886; AVX512-NEXT:    movl $0, %edx
7887; AVX512-NEXT:    cmovgq %rcx, %rdx
7888; AVX512-NEXT:    vmovq %rdx, %xmm4
7889; AVX512-NEXT:    vmovq %xmm6, %rdx
7890; AVX512-NEXT:    vmovq %xmm2, %rsi
7891; AVX512-NEXT:    cmpq %rdx, %rsi
7892; AVX512-NEXT:    movl $0, %edx
7893; AVX512-NEXT:    cmovgq %rcx, %rdx
7894; AVX512-NEXT:    vmovq %rdx, %xmm2
7895; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
7896; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm0
7897; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
7898; AVX512-NEXT:    vpmovqd %zmm0, %ymm1
7899; AVX512-NEXT:    vextracti32x4 $3, %zmm7, %xmm0
7900; AVX512-NEXT:    vpextrq $1, %xmm0, %rdx
7901; AVX512-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
7902; AVX512-NEXT:    vpextrq $1, %xmm2, %rsi
7903; AVX512-NEXT:    cmpq %rdx, %rsi
7904; AVX512-NEXT:    movl $0, %edx
7905; AVX512-NEXT:    cmovgq %rcx, %rdx
7906; AVX512-NEXT:    vmovq %rdx, %xmm4
7907; AVX512-NEXT:    vmovq %xmm0, %rdx
7908; AVX512-NEXT:    vmovq %xmm2, %rsi
7909; AVX512-NEXT:    cmpq %rdx, %rsi
7910; AVX512-NEXT:    movl $0, %edx
7911; AVX512-NEXT:    cmovgq %rcx, %rdx
7912; AVX512-NEXT:    vmovq %rdx, %xmm0
7913; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]
7914; AVX512-NEXT:    vextracti32x4 $2, %zmm7, %xmm2
7915; AVX512-NEXT:    vpextrq $1, %xmm2, %rdx
7916; AVX512-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
7917; AVX512-NEXT:    vpextrq $1, %xmm4, %rsi
7918; AVX512-NEXT:    cmpq %rdx, %rsi
7919; AVX512-NEXT:    movl $0, %edx
7920; AVX512-NEXT:    cmovgq %rcx, %rdx
7921; AVX512-NEXT:    vmovq %rdx, %xmm5
7922; AVX512-NEXT:    vmovq %xmm2, %rdx
7923; AVX512-NEXT:    vmovq %xmm4, %rsi
7924; AVX512-NEXT:    cmpq %rdx, %rsi
7925; AVX512-NEXT:    movl $0, %edx
7926; AVX512-NEXT:    cmovgq %rcx, %rdx
7927; AVX512-NEXT:    vmovq %rdx, %xmm2
7928; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
7929; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm2
7930; AVX512-NEXT:    vextracti32x4 $1, %zmm7, %xmm0
7931; AVX512-NEXT:    vpextrq $1, %xmm0, %rdx
7932; AVX512-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
7933; AVX512-NEXT:    vpextrq $1, %xmm4, %rsi
7934; AVX512-NEXT:    cmpq %rdx, %rsi
7935; AVX512-NEXT:    movl $0, %edx
7936; AVX512-NEXT:    cmovgq %rcx, %rdx
7937; AVX512-NEXT:    vmovq %rdx, %xmm5
7938; AVX512-NEXT:    vmovq %xmm0, %rdx
7939; AVX512-NEXT:    vmovq %xmm4, %rsi
7940; AVX512-NEXT:    cmpq %rdx, %rsi
7941; AVX512-NEXT:    movl $0, %edx
7942; AVX512-NEXT:    cmovgq %rcx, %rdx
7943; AVX512-NEXT:    vmovq %rdx, %xmm0
7944; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]
7945; AVX512-NEXT:    vpextrq $1, %xmm7, %rdx
7946; AVX512-NEXT:    vpextrq $1, %xmm3, %rsi
7947; AVX512-NEXT:    cmpq %rdx, %rsi
7948; AVX512-NEXT:    movl $0, %edx
7949; AVX512-NEXT:    cmovgq %rcx, %rdx
7950; AVX512-NEXT:    vmovq %rdx, %xmm4
7951; AVX512-NEXT:    vmovq %xmm7, %rdx
7952; AVX512-NEXT:    vmovq %xmm3, %rsi
7953; AVX512-NEXT:    cmpq %rdx, %rsi
7954; AVX512-NEXT:    cmovgq %rcx, %rax
7955; AVX512-NEXT:    vmovq %rax, %xmm3
7956; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
7957; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm0
7958; AVX512-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
7959; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
7960; AVX512-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
7961; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
7962; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm8, %ymm0
7963; AVX512-NEXT:    retq
7964  %1 = icmp sgt <32 x i64> %a0, %a1
7965  ret <32 x i1> %1
7966}
7967