• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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; SSE2-LABEL: test_cmp_v4f64:
119; SSE2:       # BB#0:
120; SSE2-NEXT:    cmpltpd %xmm1, %xmm3
121; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]
122; SSE2-NEXT:    cmpltpd %xmm0, %xmm2
123; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
124; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
125; SSE2-NEXT:    retq
126;
127; SSE42-LABEL: test_cmp_v4f64:
128; SSE42:       # BB#0:
129; SSE42-NEXT:    cmpltpd %xmm1, %xmm3
130; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,1,0,2]
131; SSE42-NEXT:    cmpltpd %xmm0, %xmm2
132; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
133; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
134; SSE42-NEXT:    retq
135;
136; AVX1-LABEL: test_cmp_v4f64:
137; AVX1:       # BB#0:
138; AVX1-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
139; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
140; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2]
141; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
142; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
143; AVX1-NEXT:    vzeroupper
144; AVX1-NEXT:    retq
145;
146; AVX2-LABEL: test_cmp_v4f64:
147; AVX2:       # BB#0:
148; AVX2-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
149; AVX2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
150; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
151; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
152; AVX2-NEXT:    vzeroupper
153; AVX2-NEXT:    retq
154;
155; AVX512-LABEL: test_cmp_v4f64:
156; AVX512:       # BB#0:
157; AVX512-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
158; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
159; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
160; AVX512-NEXT:    retq
161  %1 = fcmp ogt <4 x double> %a0, %a1
162  ret <4 x i1> %1
163}
164
165define <8 x i1> @test_cmp_v8f32(<8 x float> %a0, <8 x float> %a1) nounwind {
166; SSE2-LABEL: test_cmp_v8f32:
167; SSE2:       # BB#0:
168; SSE2-NEXT:    cmpltps %xmm1, %xmm3
169; SSE2-NEXT:    pslld $16, %xmm3
170; SSE2-NEXT:    psrad $16, %xmm3
171; SSE2-NEXT:    cmpltps %xmm0, %xmm2
172; SSE2-NEXT:    pslld $16, %xmm2
173; SSE2-NEXT:    psrad $16, %xmm2
174; SSE2-NEXT:    packssdw %xmm3, %xmm2
175; SSE2-NEXT:    movdqa %xmm2, %xmm0
176; SSE2-NEXT:    retq
177;
178; SSE42-LABEL: test_cmp_v8f32:
179; SSE42:       # BB#0:
180; SSE42-NEXT:    cmpltps %xmm1, %xmm3
181; SSE42-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
182; SSE42-NEXT:    pshufb %xmm1, %xmm3
183; SSE42-NEXT:    cmpltps %xmm0, %xmm2
184; SSE42-NEXT:    pshufb %xmm1, %xmm2
185; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
186; SSE42-NEXT:    movdqa %xmm2, %xmm0
187; SSE42-NEXT:    retq
188;
189; AVX1-LABEL: test_cmp_v8f32:
190; AVX1:       # BB#0:
191; AVX1-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
192; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
193; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
194; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
195; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
196; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
197; AVX1-NEXT:    vzeroupper
198; AVX1-NEXT:    retq
199;
200; AVX2-LABEL: test_cmp_v8f32:
201; AVX2:       # BB#0:
202; AVX2-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
203; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
204; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
205; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
206; AVX2-NEXT:    vzeroupper
207; AVX2-NEXT:    retq
208;
209; AVX512-LABEL: test_cmp_v8f32:
210; AVX512:       # BB#0:
211; AVX512-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
212; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
213; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
214; AVX512-NEXT:    retq
215  %1 = fcmp ogt <8 x float> %a0, %a1
216  ret <8 x i1> %1
217}
218
219define <4 x i1> @test_cmp_v4i64(<4 x i64> %a0, <4 x i64> %a1) nounwind {
220; SSE2-LABEL: test_cmp_v4i64:
221; SSE2:       # BB#0:
222; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
223; SSE2-NEXT:    pxor %xmm4, %xmm3
224; SSE2-NEXT:    pxor %xmm4, %xmm1
225; SSE2-NEXT:    movdqa %xmm1, %xmm5
226; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
227; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
228; SSE2-NEXT:    pcmpeqd %xmm3, %xmm1
229; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
230; SSE2-NEXT:    pand %xmm6, %xmm1
231; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
232; SSE2-NEXT:    por %xmm1, %xmm3
233; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]
234; SSE2-NEXT:    pxor %xmm4, %xmm2
235; SSE2-NEXT:    pxor %xmm4, %xmm0
236; SSE2-NEXT:    movdqa %xmm0, %xmm3
237; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
238; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
239; SSE2-NEXT:    pcmpeqd %xmm2, %xmm0
240; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
241; SSE2-NEXT:    pand %xmm4, %xmm0
242; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
243; SSE2-NEXT:    por %xmm0, %xmm2
244; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
245; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
246; SSE2-NEXT:    retq
247;
248; SSE42-LABEL: test_cmp_v4i64:
249; SSE42:       # BB#0:
250; SSE42-NEXT:    pcmpgtq %xmm3, %xmm1
251; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,0,2]
252; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0
253; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
254; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
255; SSE42-NEXT:    retq
256;
257; AVX1-LABEL: test_cmp_v4i64:
258; AVX1:       # BB#0:
259; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
260; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
261; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
262; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[0,1,0,2]
263; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
264; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
265; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
266; AVX1-NEXT:    vzeroupper
267; AVX1-NEXT:    retq
268;
269; AVX2-LABEL: test_cmp_v4i64:
270; AVX2:       # BB#0:
271; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
272; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
273; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
274; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
275; AVX2-NEXT:    vzeroupper
276; AVX2-NEXT:    retq
277;
278; AVX512-LABEL: test_cmp_v4i64:
279; AVX512:       # BB#0:
280; AVX512-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
281; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
282; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
283; AVX512-NEXT:    retq
284  %1 = icmp sgt <4 x i64> %a0, %a1
285  ret <4 x i1> %1
286}
287
288define <8 x i1> @test_cmp_v8i32(<8 x i32> %a0, <8 x i32> %a1) nounwind {
289; SSE2-LABEL: test_cmp_v8i32:
290; SSE2:       # BB#0:
291; SSE2-NEXT:    pcmpgtd %xmm3, %xmm1
292; SSE2-NEXT:    pslld $16, %xmm1
293; SSE2-NEXT:    psrad $16, %xmm1
294; SSE2-NEXT:    pcmpgtd %xmm2, %xmm0
295; SSE2-NEXT:    pslld $16, %xmm0
296; SSE2-NEXT:    psrad $16, %xmm0
297; SSE2-NEXT:    packssdw %xmm1, %xmm0
298; SSE2-NEXT:    retq
299;
300; SSE42-LABEL: test_cmp_v8i32:
301; SSE42:       # BB#0:
302; SSE42-NEXT:    pcmpgtd %xmm3, %xmm1
303; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
304; SSE42-NEXT:    pshufb %xmm3, %xmm1
305; SSE42-NEXT:    pcmpgtd %xmm2, %xmm0
306; SSE42-NEXT:    pshufb %xmm3, %xmm0
307; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
308; SSE42-NEXT:    retq
309;
310; AVX1-LABEL: test_cmp_v8i32:
311; AVX1:       # BB#0:
312; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
313; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
314; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm3, %xmm2
315; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
316; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
317; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
318; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
319; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
320; AVX1-NEXT:    vzeroupper
321; AVX1-NEXT:    retq
322;
323; AVX2-LABEL: test_cmp_v8i32:
324; AVX2:       # BB#0:
325; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
326; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
327; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
328; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
329; AVX2-NEXT:    vzeroupper
330; AVX2-NEXT:    retq
331;
332; AVX512-LABEL: test_cmp_v8i32:
333; AVX512:       # BB#0:
334; AVX512-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
335; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
336; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
337; AVX512-NEXT:    retq
338  %1 = icmp sgt <8 x i32> %a0, %a1
339  ret <8 x i1> %1
340}
341
342define <16 x i1> @test_cmp_v16i16(<16 x i16> %a0, <16 x i16> %a1) nounwind {
343; SSE2-LABEL: test_cmp_v16i16:
344; SSE2:       # BB#0:
345; SSE2-NEXT:    pcmpgtw %xmm3, %xmm1
346; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
347; SSE2-NEXT:    pand %xmm3, %xmm1
348; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
349; SSE2-NEXT:    pand %xmm3, %xmm0
350; SSE2-NEXT:    packuswb %xmm1, %xmm0
351; SSE2-NEXT:    retq
352;
353; SSE42-LABEL: test_cmp_v16i16:
354; SSE42:       # BB#0:
355; SSE42-NEXT:    pcmpgtw %xmm3, %xmm1
356; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
357; SSE42-NEXT:    pshufb %xmm3, %xmm1
358; SSE42-NEXT:    pcmpgtw %xmm2, %xmm0
359; SSE42-NEXT:    pshufb %xmm3, %xmm0
360; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
361; SSE42-NEXT:    retq
362;
363; AVX1-LABEL: test_cmp_v16i16:
364; AVX1:       # BB#0:
365; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
366; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
367; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm3, %xmm2
368; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
369; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
370; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
371; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
372; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
373; AVX1-NEXT:    vzeroupper
374; AVX1-NEXT:    retq
375;
376; AVX2-LABEL: test_cmp_v16i16:
377; AVX2:       # BB#0:
378; AVX2-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
379; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
380; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
381; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
382; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
383; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
384; AVX2-NEXT:    vzeroupper
385; AVX2-NEXT:    retq
386;
387; AVX512-LABEL: test_cmp_v16i16:
388; AVX512:       # BB#0:
389; AVX512-NEXT:    vpcmpgtw %ymm1, %ymm0, %ymm0
390; AVX512-NEXT:    vpmovsxwd %ymm0, %zmm0
391; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
392; AVX512-NEXT:    retq
393  %1 = icmp sgt <16 x i16> %a0, %a1
394  ret <16 x i1> %1
395}
396
397define <32 x i1> @test_cmp_v32i8(<32 x i8> %a0, <32 x i8> %a1) nounwind {
398; SSE2-LABEL: test_cmp_v32i8:
399; SSE2:       # BB#0:
400; SSE2-NEXT:    pcmpgtb %xmm2, %xmm0
401; SSE2-NEXT:    pcmpgtb %xmm3, %xmm1
402; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
403; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
404; SSE2-NEXT:    andb $1, %al
405; SSE2-NEXT:    movb %al, 2(%rdi)
406; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
407; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
408; SSE2-NEXT:    andb $1, %al
409; SSE2-NEXT:    movb %al, (%rdi)
410; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
411; SSE2-NEXT:    andb $1, %al
412; SSE2-NEXT:    movb %al, 2(%rdi)
413; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
414; SSE2-NEXT:    andb $1, %al
415; SSE2-NEXT:    movb %al, (%rdi)
416; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
417; SSE2-NEXT:    andb $1, %al
418; SSE2-NEXT:    movb %al, 2(%rdi)
419; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
420; SSE2-NEXT:    andb $1, %al
421; SSE2-NEXT:    movb %al, (%rdi)
422; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
423; SSE2-NEXT:    andb $1, %al
424; SSE2-NEXT:    movb %al, 2(%rdi)
425; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
426; SSE2-NEXT:    andb $1, %al
427; SSE2-NEXT:    movb %al, (%rdi)
428; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
429; SSE2-NEXT:    andb $1, %al
430; SSE2-NEXT:    movb %al, 2(%rdi)
431; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
432; SSE2-NEXT:    andb $1, %al
433; SSE2-NEXT:    movb %al, (%rdi)
434; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
435; SSE2-NEXT:    andb $1, %al
436; SSE2-NEXT:    movb %al, 2(%rdi)
437; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
438; SSE2-NEXT:    andb $1, %al
439; SSE2-NEXT:    movb %al, (%rdi)
440; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
441; SSE2-NEXT:    andb $1, %al
442; SSE2-NEXT:    movb %al, 2(%rdi)
443; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
444; SSE2-NEXT:    andb $1, %al
445; SSE2-NEXT:    movb %al, (%rdi)
446; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
447; SSE2-NEXT:    andb $1, %al
448; SSE2-NEXT:    movb %al, 2(%rdi)
449; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
450; SSE2-NEXT:    andb $1, %al
451; SSE2-NEXT:    movb %al, (%rdi)
452; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
453; SSE2-NEXT:    andb $1, %al
454; SSE2-NEXT:    movb %al, 2(%rdi)
455; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
456; SSE2-NEXT:    andb $1, %al
457; SSE2-NEXT:    movb %al, (%rdi)
458; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
459; SSE2-NEXT:    andb $1, %al
460; SSE2-NEXT:    movb %al, 2(%rdi)
461; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
462; SSE2-NEXT:    andb $1, %al
463; SSE2-NEXT:    movb %al, (%rdi)
464; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
465; SSE2-NEXT:    andb $1, %al
466; SSE2-NEXT:    movb %al, 2(%rdi)
467; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
468; SSE2-NEXT:    andb $1, %al
469; SSE2-NEXT:    movb %al, (%rdi)
470; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
471; SSE2-NEXT:    andb $1, %al
472; SSE2-NEXT:    movb %al, 2(%rdi)
473; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
474; SSE2-NEXT:    andb $1, %al
475; SSE2-NEXT:    movb %al, (%rdi)
476; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
477; SSE2-NEXT:    andb $1, %al
478; SSE2-NEXT:    movb %al, 2(%rdi)
479; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
480; SSE2-NEXT:    andb $1, %al
481; SSE2-NEXT:    movb %al, (%rdi)
482; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
483; SSE2-NEXT:    andb $1, %al
484; SSE2-NEXT:    movb %al, 2(%rdi)
485; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
486; SSE2-NEXT:    andb $1, %al
487; SSE2-NEXT:    movb %al, (%rdi)
488; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
489; SSE2-NEXT:    andb $1, %al
490; SSE2-NEXT:    movb %al, 2(%rdi)
491; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
492; SSE2-NEXT:    andb $1, %al
493; SSE2-NEXT:    movb %al, (%rdi)
494; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
495; SSE2-NEXT:    andb $1, %al
496; SSE2-NEXT:    movb %al, 2(%rdi)
497; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
498; SSE2-NEXT:    andb $1, %al
499; SSE2-NEXT:    movb %al, (%rdi)
500; SSE2-NEXT:    movq %rdi, %rax
501; SSE2-NEXT:    retq
502;
503; SSE42-LABEL: test_cmp_v32i8:
504; SSE42:       # BB#0:
505; SSE42-NEXT:    pcmpgtb %xmm2, %xmm0
506; SSE42-NEXT:    pcmpgtb %xmm3, %xmm1
507; SSE42-NEXT:    pextrb $15, %xmm1, %eax
508; SSE42-NEXT:    andb $1, %al
509; SSE42-NEXT:    movb %al, 2(%rdi)
510; SSE42-NEXT:    pextrb $14, %xmm1, %eax
511; SSE42-NEXT:    andb $1, %al
512; SSE42-NEXT:    movb %al, 2(%rdi)
513; SSE42-NEXT:    pextrb $13, %xmm1, %eax
514; SSE42-NEXT:    andb $1, %al
515; SSE42-NEXT:    movb %al, 2(%rdi)
516; SSE42-NEXT:    pextrb $12, %xmm1, %eax
517; SSE42-NEXT:    andb $1, %al
518; SSE42-NEXT:    movb %al, 2(%rdi)
519; SSE42-NEXT:    pextrb $11, %xmm1, %eax
520; SSE42-NEXT:    andb $1, %al
521; SSE42-NEXT:    movb %al, 2(%rdi)
522; SSE42-NEXT:    pextrb $10, %xmm1, %eax
523; SSE42-NEXT:    andb $1, %al
524; SSE42-NEXT:    movb %al, 2(%rdi)
525; SSE42-NEXT:    pextrb $9, %xmm1, %eax
526; SSE42-NEXT:    andb $1, %al
527; SSE42-NEXT:    movb %al, 2(%rdi)
528; SSE42-NEXT:    pextrb $8, %xmm1, %eax
529; SSE42-NEXT:    andb $1, %al
530; SSE42-NEXT:    movb %al, 2(%rdi)
531; SSE42-NEXT:    pextrb $7, %xmm1, %eax
532; SSE42-NEXT:    andb $1, %al
533; SSE42-NEXT:    movb %al, 2(%rdi)
534; SSE42-NEXT:    pextrb $6, %xmm1, %eax
535; SSE42-NEXT:    andb $1, %al
536; SSE42-NEXT:    movb %al, 2(%rdi)
537; SSE42-NEXT:    pextrb $5, %xmm1, %eax
538; SSE42-NEXT:    andb $1, %al
539; SSE42-NEXT:    movb %al, 2(%rdi)
540; SSE42-NEXT:    pextrb $4, %xmm1, %eax
541; SSE42-NEXT:    andb $1, %al
542; SSE42-NEXT:    movb %al, 2(%rdi)
543; SSE42-NEXT:    pextrb $3, %xmm1, %eax
544; SSE42-NEXT:    andb $1, %al
545; SSE42-NEXT:    movb %al, 2(%rdi)
546; SSE42-NEXT:    pextrb $2, %xmm1, %eax
547; SSE42-NEXT:    andb $1, %al
548; SSE42-NEXT:    movb %al, 2(%rdi)
549; SSE42-NEXT:    pextrb $1, %xmm1, %eax
550; SSE42-NEXT:    andb $1, %al
551; SSE42-NEXT:    movb %al, 2(%rdi)
552; SSE42-NEXT:    pextrb $0, %xmm1, %eax
553; SSE42-NEXT:    andb $1, %al
554; SSE42-NEXT:    movb %al, 2(%rdi)
555; SSE42-NEXT:    pextrb $15, %xmm0, %eax
556; SSE42-NEXT:    andb $1, %al
557; SSE42-NEXT:    movb %al, (%rdi)
558; SSE42-NEXT:    pextrb $14, %xmm0, %eax
559; SSE42-NEXT:    andb $1, %al
560; SSE42-NEXT:    movb %al, (%rdi)
561; SSE42-NEXT:    pextrb $13, %xmm0, %eax
562; SSE42-NEXT:    andb $1, %al
563; SSE42-NEXT:    movb %al, (%rdi)
564; SSE42-NEXT:    pextrb $12, %xmm0, %eax
565; SSE42-NEXT:    andb $1, %al
566; SSE42-NEXT:    movb %al, (%rdi)
567; SSE42-NEXT:    pextrb $11, %xmm0, %eax
568; SSE42-NEXT:    andb $1, %al
569; SSE42-NEXT:    movb %al, (%rdi)
570; SSE42-NEXT:    pextrb $10, %xmm0, %eax
571; SSE42-NEXT:    andb $1, %al
572; SSE42-NEXT:    movb %al, (%rdi)
573; SSE42-NEXT:    pextrb $9, %xmm0, %eax
574; SSE42-NEXT:    andb $1, %al
575; SSE42-NEXT:    movb %al, (%rdi)
576; SSE42-NEXT:    pextrb $8, %xmm0, %eax
577; SSE42-NEXT:    andb $1, %al
578; SSE42-NEXT:    movb %al, (%rdi)
579; SSE42-NEXT:    pextrb $7, %xmm0, %eax
580; SSE42-NEXT:    andb $1, %al
581; SSE42-NEXT:    movb %al, (%rdi)
582; SSE42-NEXT:    pextrb $6, %xmm0, %eax
583; SSE42-NEXT:    andb $1, %al
584; SSE42-NEXT:    movb %al, (%rdi)
585; SSE42-NEXT:    pextrb $5, %xmm0, %eax
586; SSE42-NEXT:    andb $1, %al
587; SSE42-NEXT:    movb %al, (%rdi)
588; SSE42-NEXT:    pextrb $4, %xmm0, %eax
589; SSE42-NEXT:    andb $1, %al
590; SSE42-NEXT:    movb %al, (%rdi)
591; SSE42-NEXT:    pextrb $3, %xmm0, %eax
592; SSE42-NEXT:    andb $1, %al
593; SSE42-NEXT:    movb %al, (%rdi)
594; SSE42-NEXT:    pextrb $2, %xmm0, %eax
595; SSE42-NEXT:    andb $1, %al
596; SSE42-NEXT:    movb %al, (%rdi)
597; SSE42-NEXT:    pextrb $1, %xmm0, %eax
598; SSE42-NEXT:    andb $1, %al
599; SSE42-NEXT:    movb %al, (%rdi)
600; SSE42-NEXT:    pextrb $0, %xmm0, %eax
601; SSE42-NEXT:    andb $1, %al
602; SSE42-NEXT:    movb %al, (%rdi)
603; SSE42-NEXT:    movq %rdi, %rax
604; SSE42-NEXT:    retq
605;
606; AVX1-LABEL: test_cmp_v32i8:
607; AVX1:       # BB#0:
608; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
609; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
610; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm3, %xmm2
611; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
612; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
613; AVX1-NEXT:    retq
614;
615; AVX2-LABEL: test_cmp_v32i8:
616; AVX2:       # BB#0:
617; AVX2-NEXT:    vpcmpgtb %ymm1, %ymm0, %ymm0
618; AVX2-NEXT:    retq
619;
620; AVX512-LABEL: test_cmp_v32i8:
621; AVX512:       # BB#0:
622; AVX512-NEXT:    vpcmpgtb %ymm1, %ymm0, %ymm0
623; AVX512-NEXT:    retq
624  %1 = icmp sgt <32 x i8> %a0, %a1
625  ret <32 x i1> %1
626}
627
628;
629; 512-bit vector comparisons
630;
631
632define <8 x i1> @test_cmp_v8f64(<8 x double> %a0, <8 x double> %a1) nounwind {
633; SSE2-LABEL: test_cmp_v8f64:
634; SSE2:       # BB#0:
635; SSE2-NEXT:    cmpltpd %xmm3, %xmm7
636; SSE2-NEXT:    cmpltpd %xmm1, %xmm5
637; SSE2-NEXT:    pextrw $4, %xmm5, %eax
638; SSE2-NEXT:    punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1],xmm5[2],xmm7[2],xmm5[3],xmm7[3]
639; SSE2-NEXT:    cmpltpd %xmm2, %xmm6
640; SSE2-NEXT:    cmpltpd %xmm0, %xmm4
641; SSE2-NEXT:    pextrw $4, %xmm4, %ecx
642; SSE2-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1],xmm4[2],xmm6[2],xmm4[3],xmm6[3]
643; SSE2-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1],xmm4[2],xmm5[2],xmm4[3],xmm5[3]
644; SSE2-NEXT:    pextrw $4, %xmm7, %edx
645; SSE2-NEXT:    movd %edx, %xmm0
646; SSE2-NEXT:    movd %eax, %xmm1
647; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
648; SSE2-NEXT:    pextrw $4, %xmm6, %eax
649; SSE2-NEXT:    movd %eax, %xmm0
650; SSE2-NEXT:    movd %ecx, %xmm2
651; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
652; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
653; SSE2-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3]
654; SSE2-NEXT:    movdqa %xmm4, %xmm0
655; SSE2-NEXT:    retq
656;
657; SSE42-LABEL: test_cmp_v8f64:
658; SSE42:       # BB#0:
659; SSE42-NEXT:    cmpltpd %xmm3, %xmm7
660; SSE42-NEXT:    xorpd %xmm3, %xmm3
661; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm7[0],xmm3[1,2,3],xmm7[4],xmm3[5,6,7]
662; SSE42-NEXT:    cmpltpd %xmm2, %xmm6
663; SSE42-NEXT:    pblendw {{.*#+}} xmm6 = xmm6[0],xmm3[1,2,3],xmm6[4],xmm3[5,6,7]
664; SSE42-NEXT:    packusdw %xmm7, %xmm6
665; SSE42-NEXT:    cmpltpd %xmm1, %xmm5
666; SSE42-NEXT:    pblendw {{.*#+}} xmm5 = xmm5[0],xmm3[1,2,3],xmm5[4],xmm3[5,6,7]
667; SSE42-NEXT:    cmpltpd %xmm0, %xmm4
668; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm4[0],xmm3[1,2,3],xmm4[4],xmm3[5,6,7]
669; SSE42-NEXT:    packusdw %xmm5, %xmm3
670; SSE42-NEXT:    packusdw %xmm6, %xmm3
671; SSE42-NEXT:    movdqa %xmm3, %xmm0
672; SSE42-NEXT:    retq
673;
674; AVX1-LABEL: test_cmp_v8f64:
675; AVX1:       # BB#0:
676; AVX1-NEXT:    vcmpltpd %ymm1, %ymm3, %ymm1
677; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
678; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
679; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0],xmm4[1,2,3],xmm3[4],xmm4[5,6,7]
680; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1,2,3],xmm1[4],xmm4[5,6,7]
681; AVX1-NEXT:    vpackusdw %xmm3, %xmm1, %xmm1
682; AVX1-NEXT:    vcmpltpd %ymm0, %ymm2, %ymm0
683; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
684; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1,2,3],xmm2[4],xmm4[5,6,7]
685; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1,2,3],xmm0[4],xmm4[5,6,7]
686; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
687; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
688; AVX1-NEXT:    vzeroupper
689; AVX1-NEXT:    retq
690;
691; AVX2-LABEL: test_cmp_v8f64:
692; AVX2:       # BB#0:
693; AVX2-NEXT:    vcmpltpd %ymm0, %ymm2, %ymm0
694; AVX2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
695; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
696; AVX2-NEXT:    vcmpltpd %ymm1, %ymm3, %ymm1
697; AVX2-NEXT:    vpermilps {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
698; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
699; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
700; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
701; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
702; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
703; AVX2-NEXT:    vzeroupper
704; AVX2-NEXT:    retq
705;
706; AVX512-LABEL: test_cmp_v8f64:
707; AVX512:       # BB#0:
708; AVX512-NEXT:    vcmpltpd %zmm0, %zmm1, %k1
709; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
710; AVX512-NEXT:    vmovdqa64 %zmm0, %zmm0 {%k1} {z}
711; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
712; AVX512-NEXT:    retq
713  %1 = fcmp ogt <8 x double> %a0, %a1
714  ret <8 x i1> %1
715}
716
717define <16 x i1> @test_cmp_v16f32(<16 x float> %a0, <16 x float> %a1) nounwind {
718; SSE-LABEL: test_cmp_v16f32:
719; SSE:       # BB#0:
720; SSE-NEXT:    cmpltps %xmm3, %xmm7
721; SSE-NEXT:    movaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
722; SSE-NEXT:    andps %xmm3, %xmm7
723; SSE-NEXT:    cmpltps %xmm2, %xmm6
724; SSE-NEXT:    andps %xmm3, %xmm6
725; SSE-NEXT:    packuswb %xmm7, %xmm6
726; SSE-NEXT:    cmpltps %xmm1, %xmm5
727; SSE-NEXT:    andps %xmm3, %xmm5
728; SSE-NEXT:    cmpltps %xmm0, %xmm4
729; SSE-NEXT:    andps %xmm4, %xmm3
730; SSE-NEXT:    packuswb %xmm5, %xmm3
731; SSE-NEXT:    packuswb %xmm6, %xmm3
732; SSE-NEXT:    movdqa %xmm3, %xmm0
733; SSE-NEXT:    retq
734;
735; AVX1-LABEL: test_cmp_v16f32:
736; AVX1:       # BB#0:
737; AVX1-NEXT:    vcmpltps %ymm1, %ymm3, %ymm1
738; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
739; AVX1-NEXT:    vmovaps {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
740; AVX1-NEXT:    vandps %xmm4, %xmm3, %xmm3
741; AVX1-NEXT:    vandps %xmm4, %xmm1, %xmm1
742; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
743; AVX1-NEXT:    vcmpltps %ymm0, %ymm2, %ymm0
744; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
745; AVX1-NEXT:    vandps %xmm4, %xmm2, %xmm2
746; AVX1-NEXT:    vandps %xmm4, %xmm0, %xmm0
747; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
748; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
749; AVX1-NEXT:    vzeroupper
750; AVX1-NEXT:    retq
751;
752; AVX2-LABEL: test_cmp_v16f32:
753; AVX2:       # BB#0:
754; AVX2-NEXT:    vcmpltps %ymm1, %ymm3, %ymm1
755; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
756; AVX2-NEXT:    vpshufb %ymm3, %ymm1, %ymm1
757; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
758; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
759; AVX2-NEXT:    vpshufb %xmm4, %xmm1, %xmm1
760; AVX2-NEXT:    vcmpltps %ymm0, %ymm2, %ymm0
761; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
762; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
763; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
764; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
765; AVX2-NEXT:    vzeroupper
766; AVX2-NEXT:    retq
767;
768; AVX512-LABEL: test_cmp_v16f32:
769; AVX512:       # BB#0:
770; AVX512-NEXT:    vcmpltps %zmm0, %zmm1, %k1
771; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
772; AVX512-NEXT:    vmovdqa32 %zmm0, %zmm0 {%k1} {z}
773; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
774; AVX512-NEXT:    retq
775  %1 = fcmp ogt <16 x float> %a0, %a1
776  ret <16 x i1> %1
777}
778
779define <8 x i1> @test_cmp_v8i64(<8 x i64> %a0, <8 x i64> %a1) nounwind {
780; SSE2-LABEL: test_cmp_v8i64:
781; SSE2:       # BB#0:
782; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
783; SSE2-NEXT:    pxor %xmm8, %xmm7
784; SSE2-NEXT:    pxor %xmm8, %xmm3
785; SSE2-NEXT:    movdqa %xmm3, %xmm9
786; SSE2-NEXT:    pcmpgtd %xmm7, %xmm9
787; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
788; SSE2-NEXT:    pcmpeqd %xmm7, %xmm3
789; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
790; SSE2-NEXT:    pand %xmm10, %xmm7
791; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
792; SSE2-NEXT:    por %xmm7, %xmm9
793; SSE2-NEXT:    pxor %xmm8, %xmm5
794; SSE2-NEXT:    pxor %xmm8, %xmm1
795; SSE2-NEXT:    movdqa %xmm1, %xmm7
796; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
797; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]
798; SSE2-NEXT:    pcmpeqd %xmm5, %xmm1
799; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]
800; SSE2-NEXT:    pand %xmm3, %xmm5
801; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]
802; SSE2-NEXT:    por %xmm5, %xmm1
803; SSE2-NEXT:    pextrw $4, %xmm1, %eax
804; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm9[0],xmm1[1],xmm9[1],xmm1[2],xmm9[2],xmm1[3],xmm9[3]
805; SSE2-NEXT:    pxor %xmm8, %xmm6
806; SSE2-NEXT:    pxor %xmm8, %xmm2
807; SSE2-NEXT:    movdqa %xmm2, %xmm3
808; SSE2-NEXT:    pcmpgtd %xmm6, %xmm3
809; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
810; SSE2-NEXT:    pcmpeqd %xmm6, %xmm2
811; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
812; SSE2-NEXT:    pand %xmm5, %xmm2
813; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
814; SSE2-NEXT:    por %xmm2, %xmm3
815; SSE2-NEXT:    pxor %xmm8, %xmm4
816; SSE2-NEXT:    pxor %xmm8, %xmm0
817; SSE2-NEXT:    movdqa %xmm0, %xmm2
818; SSE2-NEXT:    pcmpgtd %xmm4, %xmm2
819; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[0,0,2,2]
820; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
821; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
822; SSE2-NEXT:    pand %xmm5, %xmm4
823; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
824; SSE2-NEXT:    por %xmm4, %xmm0
825; SSE2-NEXT:    pextrw $4, %xmm9, %ecx
826; SSE2-NEXT:    movd %ecx, %xmm2
827; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
828; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
829; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
830; SSE2-NEXT:    movd %eax, %xmm1
831; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
832; SSE2-NEXT:    pextrw $4, %xmm3, %eax
833; SSE2-NEXT:    movd %eax, %xmm2
834; SSE2-NEXT:    movd %ecx, %xmm3
835; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
836; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
837; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
838; SSE2-NEXT:    retq
839;
840; SSE42-LABEL: test_cmp_v8i64:
841; SSE42:       # BB#0:
842; SSE42-NEXT:    pcmpgtq %xmm7, %xmm3
843; SSE42-NEXT:    pxor %xmm7, %xmm7
844; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0],xmm7[1,2,3],xmm3[4],xmm7[5,6,7]
845; SSE42-NEXT:    pcmpgtq %xmm6, %xmm2
846; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0],xmm7[1,2,3],xmm2[4],xmm7[5,6,7]
847; SSE42-NEXT:    packusdw %xmm3, %xmm2
848; SSE42-NEXT:    pcmpgtq %xmm5, %xmm1
849; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm7[1,2,3],xmm1[4],xmm7[5,6,7]
850; SSE42-NEXT:    pcmpgtq %xmm4, %xmm0
851; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm7[1,2,3],xmm0[4],xmm7[5,6,7]
852; SSE42-NEXT:    packusdw %xmm1, %xmm0
853; SSE42-NEXT:    packusdw %xmm2, %xmm0
854; SSE42-NEXT:    retq
855;
856; AVX1-LABEL: test_cmp_v8i64:
857; AVX1:       # BB#0:
858; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
859; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
860; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
861; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
862; AVX1-NEXT:    vpblendw {{.*#+}} xmm4 = xmm4[0],xmm5[1,2,3],xmm4[4],xmm5[5,6,7]
863; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm1
864; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm5[1,2,3],xmm1[4],xmm5[5,6,7]
865; AVX1-NEXT:    vpackusdw %xmm4, %xmm1, %xmm1
866; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
867; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
868; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
869; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0],xmm5[1,2,3],xmm3[4],xmm5[5,6,7]
870; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm0
871; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm5[1,2,3],xmm0[4],xmm5[5,6,7]
872; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0
873; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
874; AVX1-NEXT:    vzeroupper
875; AVX1-NEXT:    retq
876;
877; AVX2-LABEL: test_cmp_v8i64:
878; AVX2:       # BB#0:
879; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm0
880; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
881; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
882; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm1
883; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
884; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
885; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
886; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
887; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
888; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
889; AVX2-NEXT:    vzeroupper
890; AVX2-NEXT:    retq
891;
892; AVX512-LABEL: test_cmp_v8i64:
893; AVX512:       # BB#0:
894; AVX512-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1
895; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
896; AVX512-NEXT:    vmovdqa64 %zmm0, %zmm0 {%k1} {z}
897; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
898; AVX512-NEXT:    retq
899  %1 = icmp sgt <8 x i64> %a0, %a1
900  ret <8 x i1> %1
901}
902
903define <16 x i1> @test_cmp_v16i32(<16 x i32> %a0, <16 x i32> %a1) nounwind {
904; SSE-LABEL: test_cmp_v16i32:
905; SSE:       # BB#0:
906; SSE-NEXT:    pcmpgtd %xmm7, %xmm3
907; SSE-NEXT:    movdqa {{.*#+}} xmm7 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
908; SSE-NEXT:    pand %xmm7, %xmm3
909; SSE-NEXT:    pcmpgtd %xmm6, %xmm2
910; SSE-NEXT:    pand %xmm7, %xmm2
911; SSE-NEXT:    packuswb %xmm3, %xmm2
912; SSE-NEXT:    pcmpgtd %xmm5, %xmm1
913; SSE-NEXT:    pand %xmm7, %xmm1
914; SSE-NEXT:    pcmpgtd %xmm4, %xmm0
915; SSE-NEXT:    pand %xmm7, %xmm0
916; SSE-NEXT:    packuswb %xmm1, %xmm0
917; SSE-NEXT:    packuswb %xmm2, %xmm0
918; SSE-NEXT:    retq
919;
920; AVX1-LABEL: test_cmp_v16i32:
921; AVX1:       # BB#0:
922; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
923; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
924; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm5, %xmm4
925; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
926; AVX1-NEXT:    vpand %xmm5, %xmm4, %xmm4
927; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm1, %xmm1
928; AVX1-NEXT:    vpand %xmm5, %xmm1, %xmm1
929; AVX1-NEXT:    vpackuswb %xmm4, %xmm1, %xmm1
930; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
931; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
932; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm4, %xmm3
933; AVX1-NEXT:    vpand %xmm5, %xmm3, %xmm3
934; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0
935; AVX1-NEXT:    vpand %xmm5, %xmm0, %xmm0
936; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
937; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
938; AVX1-NEXT:    vzeroupper
939; AVX1-NEXT:    retq
940;
941; AVX2-LABEL: test_cmp_v16i32:
942; AVX2:       # BB#0:
943; AVX2-NEXT:    vpcmpgtd %ymm3, %ymm1, %ymm1
944; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
945; AVX2-NEXT:    vpshufb %ymm3, %ymm1, %ymm1
946; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
947; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
948; AVX2-NEXT:    vpshufb %xmm4, %xmm1, %xmm1
949; AVX2-NEXT:    vpcmpgtd %ymm2, %ymm0, %ymm0
950; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
951; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
952; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
953; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
954; AVX2-NEXT:    vzeroupper
955; AVX2-NEXT:    retq
956;
957; AVX512-LABEL: test_cmp_v16i32:
958; AVX512:       # BB#0:
959; AVX512-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1
960; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
961; AVX512-NEXT:    vmovdqa32 %zmm0, %zmm0 {%k1} {z}
962; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
963; AVX512-NEXT:    retq
964  %1 = icmp sgt <16 x i32> %a0, %a1
965  ret <16 x i1> %1
966}
967
968define <32 x i1> @test_cmp_v32i16(<32 x i16> %a0, <32 x i16> %a1) nounwind {
969; SSE2-LABEL: test_cmp_v32i16:
970; SSE2:       # BB#0:
971; SSE2-NEXT:    pcmpgtw %xmm5, %xmm1
972; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255]
973; SSE2-NEXT:    pand %xmm5, %xmm1
974; SSE2-NEXT:    pcmpgtw %xmm4, %xmm0
975; SSE2-NEXT:    pand %xmm5, %xmm0
976; SSE2-NEXT:    packuswb %xmm1, %xmm0
977; SSE2-NEXT:    pcmpgtw %xmm7, %xmm3
978; SSE2-NEXT:    pand %xmm5, %xmm3
979; SSE2-NEXT:    pcmpgtw %xmm6, %xmm2
980; SSE2-NEXT:    pand %xmm5, %xmm2
981; SSE2-NEXT:    packuswb %xmm3, %xmm2
982; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
983; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
984; SSE2-NEXT:    andb $1, %al
985; SSE2-NEXT:    movb %al, 2(%rdi)
986; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
987; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
988; SSE2-NEXT:    andb $1, %al
989; SSE2-NEXT:    movb %al, (%rdi)
990; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
991; SSE2-NEXT:    andb $1, %al
992; SSE2-NEXT:    movb %al, 2(%rdi)
993; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
994; SSE2-NEXT:    andb $1, %al
995; SSE2-NEXT:    movb %al, (%rdi)
996; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
997; SSE2-NEXT:    andb $1, %al
998; SSE2-NEXT:    movb %al, 2(%rdi)
999; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1000; SSE2-NEXT:    andb $1, %al
1001; SSE2-NEXT:    movb %al, (%rdi)
1002; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1003; SSE2-NEXT:    andb $1, %al
1004; SSE2-NEXT:    movb %al, 2(%rdi)
1005; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1006; SSE2-NEXT:    andb $1, %al
1007; SSE2-NEXT:    movb %al, (%rdi)
1008; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1009; SSE2-NEXT:    andb $1, %al
1010; SSE2-NEXT:    movb %al, 2(%rdi)
1011; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1012; SSE2-NEXT:    andb $1, %al
1013; SSE2-NEXT:    movb %al, (%rdi)
1014; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1015; SSE2-NEXT:    andb $1, %al
1016; SSE2-NEXT:    movb %al, 2(%rdi)
1017; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1018; SSE2-NEXT:    andb $1, %al
1019; SSE2-NEXT:    movb %al, (%rdi)
1020; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1021; SSE2-NEXT:    andb $1, %al
1022; SSE2-NEXT:    movb %al, 2(%rdi)
1023; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1024; SSE2-NEXT:    andb $1, %al
1025; SSE2-NEXT:    movb %al, (%rdi)
1026; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1027; SSE2-NEXT:    andb $1, %al
1028; SSE2-NEXT:    movb %al, 2(%rdi)
1029; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1030; SSE2-NEXT:    andb $1, %al
1031; SSE2-NEXT:    movb %al, (%rdi)
1032; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1033; SSE2-NEXT:    andb $1, %al
1034; SSE2-NEXT:    movb %al, 2(%rdi)
1035; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1036; SSE2-NEXT:    andb $1, %al
1037; SSE2-NEXT:    movb %al, (%rdi)
1038; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1039; SSE2-NEXT:    andb $1, %al
1040; SSE2-NEXT:    movb %al, 2(%rdi)
1041; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1042; SSE2-NEXT:    andb $1, %al
1043; SSE2-NEXT:    movb %al, (%rdi)
1044; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1045; SSE2-NEXT:    andb $1, %al
1046; SSE2-NEXT:    movb %al, 2(%rdi)
1047; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1048; SSE2-NEXT:    andb $1, %al
1049; SSE2-NEXT:    movb %al, (%rdi)
1050; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1051; SSE2-NEXT:    andb $1, %al
1052; SSE2-NEXT:    movb %al, 2(%rdi)
1053; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1054; SSE2-NEXT:    andb $1, %al
1055; SSE2-NEXT:    movb %al, (%rdi)
1056; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1057; SSE2-NEXT:    andb $1, %al
1058; SSE2-NEXT:    movb %al, 2(%rdi)
1059; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1060; SSE2-NEXT:    andb $1, %al
1061; SSE2-NEXT:    movb %al, (%rdi)
1062; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1063; SSE2-NEXT:    andb $1, %al
1064; SSE2-NEXT:    movb %al, 2(%rdi)
1065; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1066; SSE2-NEXT:    andb $1, %al
1067; SSE2-NEXT:    movb %al, (%rdi)
1068; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1069; SSE2-NEXT:    andb $1, %al
1070; SSE2-NEXT:    movb %al, 2(%rdi)
1071; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1072; SSE2-NEXT:    andb $1, %al
1073; SSE2-NEXT:    movb %al, (%rdi)
1074; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1075; SSE2-NEXT:    andb $1, %al
1076; SSE2-NEXT:    movb %al, 2(%rdi)
1077; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1078; SSE2-NEXT:    andb $1, %al
1079; SSE2-NEXT:    movb %al, (%rdi)
1080; SSE2-NEXT:    movq %rdi, %rax
1081; SSE2-NEXT:    retq
1082;
1083; SSE42-LABEL: test_cmp_v32i16:
1084; SSE42:       # BB#0:
1085; SSE42-NEXT:    pcmpgtw %xmm5, %xmm1
1086; SSE42-NEXT:    movdqa {{.*#+}} xmm5 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1087; SSE42-NEXT:    pshufb %xmm5, %xmm1
1088; SSE42-NEXT:    pcmpgtw %xmm4, %xmm0
1089; SSE42-NEXT:    pshufb %xmm5, %xmm0
1090; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1091; SSE42-NEXT:    pcmpgtw %xmm7, %xmm3
1092; SSE42-NEXT:    pshufb %xmm5, %xmm3
1093; SSE42-NEXT:    pcmpgtw %xmm6, %xmm2
1094; SSE42-NEXT:    pshufb %xmm5, %xmm2
1095; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
1096; SSE42-NEXT:    pextrb $15, %xmm2, %eax
1097; SSE42-NEXT:    andb $1, %al
1098; SSE42-NEXT:    movb %al, 2(%rdi)
1099; SSE42-NEXT:    pextrb $14, %xmm2, %eax
1100; SSE42-NEXT:    andb $1, %al
1101; SSE42-NEXT:    movb %al, 2(%rdi)
1102; SSE42-NEXT:    pextrb $13, %xmm2, %eax
1103; SSE42-NEXT:    andb $1, %al
1104; SSE42-NEXT:    movb %al, 2(%rdi)
1105; SSE42-NEXT:    pextrb $12, %xmm2, %eax
1106; SSE42-NEXT:    andb $1, %al
1107; SSE42-NEXT:    movb %al, 2(%rdi)
1108; SSE42-NEXT:    pextrb $11, %xmm2, %eax
1109; SSE42-NEXT:    andb $1, %al
1110; SSE42-NEXT:    movb %al, 2(%rdi)
1111; SSE42-NEXT:    pextrb $10, %xmm2, %eax
1112; SSE42-NEXT:    andb $1, %al
1113; SSE42-NEXT:    movb %al, 2(%rdi)
1114; SSE42-NEXT:    pextrb $9, %xmm2, %eax
1115; SSE42-NEXT:    andb $1, %al
1116; SSE42-NEXT:    movb %al, 2(%rdi)
1117; SSE42-NEXT:    pextrb $8, %xmm2, %eax
1118; SSE42-NEXT:    andb $1, %al
1119; SSE42-NEXT:    movb %al, 2(%rdi)
1120; SSE42-NEXT:    pextrb $7, %xmm2, %eax
1121; SSE42-NEXT:    andb $1, %al
1122; SSE42-NEXT:    movb %al, 2(%rdi)
1123; SSE42-NEXT:    pextrb $6, %xmm2, %eax
1124; SSE42-NEXT:    andb $1, %al
1125; SSE42-NEXT:    movb %al, 2(%rdi)
1126; SSE42-NEXT:    pextrb $5, %xmm2, %eax
1127; SSE42-NEXT:    andb $1, %al
1128; SSE42-NEXT:    movb %al, 2(%rdi)
1129; SSE42-NEXT:    pextrb $4, %xmm2, %eax
1130; SSE42-NEXT:    andb $1, %al
1131; SSE42-NEXT:    movb %al, 2(%rdi)
1132; SSE42-NEXT:    pextrb $3, %xmm2, %eax
1133; SSE42-NEXT:    andb $1, %al
1134; SSE42-NEXT:    movb %al, 2(%rdi)
1135; SSE42-NEXT:    pextrb $2, %xmm2, %eax
1136; SSE42-NEXT:    andb $1, %al
1137; SSE42-NEXT:    movb %al, 2(%rdi)
1138; SSE42-NEXT:    pextrb $1, %xmm2, %eax
1139; SSE42-NEXT:    andb $1, %al
1140; SSE42-NEXT:    movb %al, 2(%rdi)
1141; SSE42-NEXT:    pextrb $0, %xmm2, %eax
1142; SSE42-NEXT:    andb $1, %al
1143; SSE42-NEXT:    movb %al, 2(%rdi)
1144; SSE42-NEXT:    pextrb $15, %xmm0, %eax
1145; SSE42-NEXT:    andb $1, %al
1146; SSE42-NEXT:    movb %al, (%rdi)
1147; SSE42-NEXT:    pextrb $14, %xmm0, %eax
1148; SSE42-NEXT:    andb $1, %al
1149; SSE42-NEXT:    movb %al, (%rdi)
1150; SSE42-NEXT:    pextrb $13, %xmm0, %eax
1151; SSE42-NEXT:    andb $1, %al
1152; SSE42-NEXT:    movb %al, (%rdi)
1153; SSE42-NEXT:    pextrb $12, %xmm0, %eax
1154; SSE42-NEXT:    andb $1, %al
1155; SSE42-NEXT:    movb %al, (%rdi)
1156; SSE42-NEXT:    pextrb $11, %xmm0, %eax
1157; SSE42-NEXT:    andb $1, %al
1158; SSE42-NEXT:    movb %al, (%rdi)
1159; SSE42-NEXT:    pextrb $10, %xmm0, %eax
1160; SSE42-NEXT:    andb $1, %al
1161; SSE42-NEXT:    movb %al, (%rdi)
1162; SSE42-NEXT:    pextrb $9, %xmm0, %eax
1163; SSE42-NEXT:    andb $1, %al
1164; SSE42-NEXT:    movb %al, (%rdi)
1165; SSE42-NEXT:    pextrb $8, %xmm0, %eax
1166; SSE42-NEXT:    andb $1, %al
1167; SSE42-NEXT:    movb %al, (%rdi)
1168; SSE42-NEXT:    pextrb $7, %xmm0, %eax
1169; SSE42-NEXT:    andb $1, %al
1170; SSE42-NEXT:    movb %al, (%rdi)
1171; SSE42-NEXT:    pextrb $6, %xmm0, %eax
1172; SSE42-NEXT:    andb $1, %al
1173; SSE42-NEXT:    movb %al, (%rdi)
1174; SSE42-NEXT:    pextrb $5, %xmm0, %eax
1175; SSE42-NEXT:    andb $1, %al
1176; SSE42-NEXT:    movb %al, (%rdi)
1177; SSE42-NEXT:    pextrb $4, %xmm0, %eax
1178; SSE42-NEXT:    andb $1, %al
1179; SSE42-NEXT:    movb %al, (%rdi)
1180; SSE42-NEXT:    pextrb $3, %xmm0, %eax
1181; SSE42-NEXT:    andb $1, %al
1182; SSE42-NEXT:    movb %al, (%rdi)
1183; SSE42-NEXT:    pextrb $2, %xmm0, %eax
1184; SSE42-NEXT:    andb $1, %al
1185; SSE42-NEXT:    movb %al, (%rdi)
1186; SSE42-NEXT:    pextrb $1, %xmm0, %eax
1187; SSE42-NEXT:    andb $1, %al
1188; SSE42-NEXT:    movb %al, (%rdi)
1189; SSE42-NEXT:    pextrb $0, %xmm0, %eax
1190; SSE42-NEXT:    andb $1, %al
1191; SSE42-NEXT:    movb %al, (%rdi)
1192; SSE42-NEXT:    movq %rdi, %rax
1193; SSE42-NEXT:    retq
1194;
1195; AVX1-LABEL: test_cmp_v32i16:
1196; AVX1:       # BB#0:
1197; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1198; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
1199; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm5, %xmm4
1200; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1201; AVX1-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
1202; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm1, %xmm1
1203; AVX1-NEXT:    vpshufb %xmm5, %xmm1, %xmm1
1204; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
1205; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
1206; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
1207; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm4, %xmm3
1208; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm3
1209; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm0, %xmm0
1210; AVX1-NEXT:    vpshufb %xmm5, %xmm0, %xmm0
1211; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]
1212; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1213; AVX1-NEXT:    retq
1214;
1215; AVX2-LABEL: test_cmp_v32i16:
1216; AVX2:       # BB#0:
1217; AVX2-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1218; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
1219; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1220; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3
1221; AVX2-NEXT:    vpshufb %xmm4, %xmm1, %xmm1
1222; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
1223; AVX2-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1224; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
1225; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
1226; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
1227; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
1228; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1229; AVX2-NEXT:    retq
1230;
1231; AVX512-LABEL: test_cmp_v32i16:
1232; AVX512:       # BB#0:
1233; AVX512-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
1234; AVX512-NEXT:    vpmovsxwd %ymm0, %zmm0
1235; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
1236; AVX512-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
1237; AVX512-NEXT:    vpmovsxwd %ymm1, %zmm1
1238; AVX512-NEXT:    vpmovdb %zmm1, %xmm1
1239; AVX512-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1240; AVX512-NEXT:    retq
1241  %1 = icmp sgt <32 x i16> %a0, %a1
1242  ret <32 x i1> %1
1243}
1244
1245define <64 x i1> @test_cmp_v64i8(<64 x i8> %a0, <64 x i8> %a1) nounwind {
1246; SSE2-LABEL: test_cmp_v64i8:
1247; SSE2:       # BB#0:
1248; SSE2-NEXT:    pcmpgtb %xmm4, %xmm0
1249; SSE2-NEXT:    pcmpgtb %xmm5, %xmm1
1250; SSE2-NEXT:    pcmpgtb %xmm6, %xmm2
1251; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
1252; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
1253; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1254; SSE2-NEXT:    andb $1, %al
1255; SSE2-NEXT:    movb %al, 6(%rdi)
1256; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
1257; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1258; SSE2-NEXT:    andb $1, %al
1259; SSE2-NEXT:    movb %al, 4(%rdi)
1260; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
1261; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1262; SSE2-NEXT:    andb $1, %al
1263; SSE2-NEXT:    movb %al, 2(%rdi)
1264; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
1265; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1266; SSE2-NEXT:    andb $1, %al
1267; SSE2-NEXT:    movb %al, (%rdi)
1268; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1269; SSE2-NEXT:    andb $1, %al
1270; SSE2-NEXT:    movb %al, 6(%rdi)
1271; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1272; SSE2-NEXT:    andb $1, %al
1273; SSE2-NEXT:    movb %al, 4(%rdi)
1274; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1275; SSE2-NEXT:    andb $1, %al
1276; SSE2-NEXT:    movb %al, 2(%rdi)
1277; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1278; SSE2-NEXT:    andb $1, %al
1279; SSE2-NEXT:    movb %al, (%rdi)
1280; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1281; SSE2-NEXT:    andb $1, %al
1282; SSE2-NEXT:    movb %al, 6(%rdi)
1283; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1284; SSE2-NEXT:    andb $1, %al
1285; SSE2-NEXT:    movb %al, 4(%rdi)
1286; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1287; SSE2-NEXT:    andb $1, %al
1288; SSE2-NEXT:    movb %al, 2(%rdi)
1289; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1290; SSE2-NEXT:    andb $1, %al
1291; SSE2-NEXT:    movb %al, (%rdi)
1292; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1293; SSE2-NEXT:    andb $1, %al
1294; SSE2-NEXT:    movb %al, 6(%rdi)
1295; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1296; SSE2-NEXT:    andb $1, %al
1297; SSE2-NEXT:    movb %al, 4(%rdi)
1298; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1299; SSE2-NEXT:    andb $1, %al
1300; SSE2-NEXT:    movb %al, 2(%rdi)
1301; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1302; SSE2-NEXT:    andb $1, %al
1303; SSE2-NEXT:    movb %al, (%rdi)
1304; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1305; SSE2-NEXT:    andb $1, %al
1306; SSE2-NEXT:    movb %al, 6(%rdi)
1307; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1308; SSE2-NEXT:    andb $1, %al
1309; SSE2-NEXT:    movb %al, 4(%rdi)
1310; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1311; SSE2-NEXT:    andb $1, %al
1312; SSE2-NEXT:    movb %al, 2(%rdi)
1313; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1314; SSE2-NEXT:    andb $1, %al
1315; SSE2-NEXT:    movb %al, (%rdi)
1316; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1317; SSE2-NEXT:    andb $1, %al
1318; SSE2-NEXT:    movb %al, 6(%rdi)
1319; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1320; SSE2-NEXT:    andb $1, %al
1321; SSE2-NEXT:    movb %al, 4(%rdi)
1322; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1323; SSE2-NEXT:    andb $1, %al
1324; SSE2-NEXT:    movb %al, 2(%rdi)
1325; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1326; SSE2-NEXT:    andb $1, %al
1327; SSE2-NEXT:    movb %al, (%rdi)
1328; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1329; SSE2-NEXT:    andb $1, %al
1330; SSE2-NEXT:    movb %al, 6(%rdi)
1331; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1332; SSE2-NEXT:    andb $1, %al
1333; SSE2-NEXT:    movb %al, 4(%rdi)
1334; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1335; SSE2-NEXT:    andb $1, %al
1336; SSE2-NEXT:    movb %al, 2(%rdi)
1337; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1338; SSE2-NEXT:    andb $1, %al
1339; SSE2-NEXT:    movb %al, (%rdi)
1340; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1341; SSE2-NEXT:    andb $1, %al
1342; SSE2-NEXT:    movb %al, 6(%rdi)
1343; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1344; SSE2-NEXT:    andb $1, %al
1345; SSE2-NEXT:    movb %al, 4(%rdi)
1346; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1347; SSE2-NEXT:    andb $1, %al
1348; SSE2-NEXT:    movb %al, 2(%rdi)
1349; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1350; SSE2-NEXT:    andb $1, %al
1351; SSE2-NEXT:    movb %al, (%rdi)
1352; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1353; SSE2-NEXT:    andb $1, %al
1354; SSE2-NEXT:    movb %al, 6(%rdi)
1355; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1356; SSE2-NEXT:    andb $1, %al
1357; SSE2-NEXT:    movb %al, 4(%rdi)
1358; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1359; SSE2-NEXT:    andb $1, %al
1360; SSE2-NEXT:    movb %al, 2(%rdi)
1361; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1362; SSE2-NEXT:    andb $1, %al
1363; SSE2-NEXT:    movb %al, (%rdi)
1364; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1365; SSE2-NEXT:    andb $1, %al
1366; SSE2-NEXT:    movb %al, 6(%rdi)
1367; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1368; SSE2-NEXT:    andb $1, %al
1369; SSE2-NEXT:    movb %al, 4(%rdi)
1370; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1371; SSE2-NEXT:    andb $1, %al
1372; SSE2-NEXT:    movb %al, 2(%rdi)
1373; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1374; SSE2-NEXT:    andb $1, %al
1375; SSE2-NEXT:    movb %al, (%rdi)
1376; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1377; SSE2-NEXT:    andb $1, %al
1378; SSE2-NEXT:    movb %al, 6(%rdi)
1379; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1380; SSE2-NEXT:    andb $1, %al
1381; SSE2-NEXT:    movb %al, 4(%rdi)
1382; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1383; SSE2-NEXT:    andb $1, %al
1384; SSE2-NEXT:    movb %al, 2(%rdi)
1385; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1386; SSE2-NEXT:    andb $1, %al
1387; SSE2-NEXT:    movb %al, (%rdi)
1388; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1389; SSE2-NEXT:    andb $1, %al
1390; SSE2-NEXT:    movb %al, 6(%rdi)
1391; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1392; SSE2-NEXT:    andb $1, %al
1393; SSE2-NEXT:    movb %al, 4(%rdi)
1394; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1395; SSE2-NEXT:    andb $1, %al
1396; SSE2-NEXT:    movb %al, 2(%rdi)
1397; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1398; SSE2-NEXT:    andb $1, %al
1399; SSE2-NEXT:    movb %al, (%rdi)
1400; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1401; SSE2-NEXT:    andb $1, %al
1402; SSE2-NEXT:    movb %al, 6(%rdi)
1403; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1404; SSE2-NEXT:    andb $1, %al
1405; SSE2-NEXT:    movb %al, 4(%rdi)
1406; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1407; SSE2-NEXT:    andb $1, %al
1408; SSE2-NEXT:    movb %al, 2(%rdi)
1409; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1410; SSE2-NEXT:    andb $1, %al
1411; SSE2-NEXT:    movb %al, (%rdi)
1412; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1413; SSE2-NEXT:    andb $1, %al
1414; SSE2-NEXT:    movb %al, 6(%rdi)
1415; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1416; SSE2-NEXT:    andb $1, %al
1417; SSE2-NEXT:    movb %al, 4(%rdi)
1418; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1419; SSE2-NEXT:    andb $1, %al
1420; SSE2-NEXT:    movb %al, 2(%rdi)
1421; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1422; SSE2-NEXT:    andb $1, %al
1423; SSE2-NEXT:    movb %al, (%rdi)
1424; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1425; SSE2-NEXT:    andb $1, %al
1426; SSE2-NEXT:    movb %al, 6(%rdi)
1427; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1428; SSE2-NEXT:    andb $1, %al
1429; SSE2-NEXT:    movb %al, 4(%rdi)
1430; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1431; SSE2-NEXT:    andb $1, %al
1432; SSE2-NEXT:    movb %al, 2(%rdi)
1433; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1434; SSE2-NEXT:    andb $1, %al
1435; SSE2-NEXT:    movb %al, (%rdi)
1436; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1437; SSE2-NEXT:    andb $1, %al
1438; SSE2-NEXT:    movb %al, 6(%rdi)
1439; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1440; SSE2-NEXT:    andb $1, %al
1441; SSE2-NEXT:    movb %al, 4(%rdi)
1442; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1443; SSE2-NEXT:    andb $1, %al
1444; SSE2-NEXT:    movb %al, 2(%rdi)
1445; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1446; SSE2-NEXT:    andb $1, %al
1447; SSE2-NEXT:    movb %al, (%rdi)
1448; SSE2-NEXT:    movq %rdi, %rax
1449; SSE2-NEXT:    retq
1450;
1451; SSE42-LABEL: test_cmp_v64i8:
1452; SSE42:       # BB#0:
1453; SSE42-NEXT:    pcmpgtb %xmm4, %xmm0
1454; SSE42-NEXT:    pcmpgtb %xmm5, %xmm1
1455; SSE42-NEXT:    pcmpgtb %xmm6, %xmm2
1456; SSE42-NEXT:    pcmpgtb %xmm7, %xmm3
1457; SSE42-NEXT:    pextrb $15, %xmm3, %eax
1458; SSE42-NEXT:    andb $1, %al
1459; SSE42-NEXT:    movb %al, 6(%rdi)
1460; SSE42-NEXT:    pextrb $14, %xmm3, %eax
1461; SSE42-NEXT:    andb $1, %al
1462; SSE42-NEXT:    movb %al, 6(%rdi)
1463; SSE42-NEXT:    pextrb $13, %xmm3, %eax
1464; SSE42-NEXT:    andb $1, %al
1465; SSE42-NEXT:    movb %al, 6(%rdi)
1466; SSE42-NEXT:    pextrb $12, %xmm3, %eax
1467; SSE42-NEXT:    andb $1, %al
1468; SSE42-NEXT:    movb %al, 6(%rdi)
1469; SSE42-NEXT:    pextrb $11, %xmm3, %eax
1470; SSE42-NEXT:    andb $1, %al
1471; SSE42-NEXT:    movb %al, 6(%rdi)
1472; SSE42-NEXT:    pextrb $10, %xmm3, %eax
1473; SSE42-NEXT:    andb $1, %al
1474; SSE42-NEXT:    movb %al, 6(%rdi)
1475; SSE42-NEXT:    pextrb $9, %xmm3, %eax
1476; SSE42-NEXT:    andb $1, %al
1477; SSE42-NEXT:    movb %al, 6(%rdi)
1478; SSE42-NEXT:    pextrb $8, %xmm3, %eax
1479; SSE42-NEXT:    andb $1, %al
1480; SSE42-NEXT:    movb %al, 6(%rdi)
1481; SSE42-NEXT:    pextrb $7, %xmm3, %eax
1482; SSE42-NEXT:    andb $1, %al
1483; SSE42-NEXT:    movb %al, 6(%rdi)
1484; SSE42-NEXT:    pextrb $6, %xmm3, %eax
1485; SSE42-NEXT:    andb $1, %al
1486; SSE42-NEXT:    movb %al, 6(%rdi)
1487; SSE42-NEXT:    pextrb $5, %xmm3, %eax
1488; SSE42-NEXT:    andb $1, %al
1489; SSE42-NEXT:    movb %al, 6(%rdi)
1490; SSE42-NEXT:    pextrb $4, %xmm3, %eax
1491; SSE42-NEXT:    andb $1, %al
1492; SSE42-NEXT:    movb %al, 6(%rdi)
1493; SSE42-NEXT:    pextrb $3, %xmm3, %eax
1494; SSE42-NEXT:    andb $1, %al
1495; SSE42-NEXT:    movb %al, 6(%rdi)
1496; SSE42-NEXT:    pextrb $2, %xmm3, %eax
1497; SSE42-NEXT:    andb $1, %al
1498; SSE42-NEXT:    movb %al, 6(%rdi)
1499; SSE42-NEXT:    pextrb $1, %xmm3, %eax
1500; SSE42-NEXT:    andb $1, %al
1501; SSE42-NEXT:    movb %al, 6(%rdi)
1502; SSE42-NEXT:    pextrb $0, %xmm3, %eax
1503; SSE42-NEXT:    andb $1, %al
1504; SSE42-NEXT:    movb %al, 6(%rdi)
1505; SSE42-NEXT:    pextrb $15, %xmm2, %eax
1506; SSE42-NEXT:    andb $1, %al
1507; SSE42-NEXT:    movb %al, 4(%rdi)
1508; SSE42-NEXT:    pextrb $14, %xmm2, %eax
1509; SSE42-NEXT:    andb $1, %al
1510; SSE42-NEXT:    movb %al, 4(%rdi)
1511; SSE42-NEXT:    pextrb $13, %xmm2, %eax
1512; SSE42-NEXT:    andb $1, %al
1513; SSE42-NEXT:    movb %al, 4(%rdi)
1514; SSE42-NEXT:    pextrb $12, %xmm2, %eax
1515; SSE42-NEXT:    andb $1, %al
1516; SSE42-NEXT:    movb %al, 4(%rdi)
1517; SSE42-NEXT:    pextrb $11, %xmm2, %eax
1518; SSE42-NEXT:    andb $1, %al
1519; SSE42-NEXT:    movb %al, 4(%rdi)
1520; SSE42-NEXT:    pextrb $10, %xmm2, %eax
1521; SSE42-NEXT:    andb $1, %al
1522; SSE42-NEXT:    movb %al, 4(%rdi)
1523; SSE42-NEXT:    pextrb $9, %xmm2, %eax
1524; SSE42-NEXT:    andb $1, %al
1525; SSE42-NEXT:    movb %al, 4(%rdi)
1526; SSE42-NEXT:    pextrb $8, %xmm2, %eax
1527; SSE42-NEXT:    andb $1, %al
1528; SSE42-NEXT:    movb %al, 4(%rdi)
1529; SSE42-NEXT:    pextrb $7, %xmm2, %eax
1530; SSE42-NEXT:    andb $1, %al
1531; SSE42-NEXT:    movb %al, 4(%rdi)
1532; SSE42-NEXT:    pextrb $6, %xmm2, %eax
1533; SSE42-NEXT:    andb $1, %al
1534; SSE42-NEXT:    movb %al, 4(%rdi)
1535; SSE42-NEXT:    pextrb $5, %xmm2, %eax
1536; SSE42-NEXT:    andb $1, %al
1537; SSE42-NEXT:    movb %al, 4(%rdi)
1538; SSE42-NEXT:    pextrb $4, %xmm2, %eax
1539; SSE42-NEXT:    andb $1, %al
1540; SSE42-NEXT:    movb %al, 4(%rdi)
1541; SSE42-NEXT:    pextrb $3, %xmm2, %eax
1542; SSE42-NEXT:    andb $1, %al
1543; SSE42-NEXT:    movb %al, 4(%rdi)
1544; SSE42-NEXT:    pextrb $2, %xmm2, %eax
1545; SSE42-NEXT:    andb $1, %al
1546; SSE42-NEXT:    movb %al, 4(%rdi)
1547; SSE42-NEXT:    pextrb $1, %xmm2, %eax
1548; SSE42-NEXT:    andb $1, %al
1549; SSE42-NEXT:    movb %al, 4(%rdi)
1550; SSE42-NEXT:    pextrb $0, %xmm2, %eax
1551; SSE42-NEXT:    andb $1, %al
1552; SSE42-NEXT:    movb %al, 4(%rdi)
1553; SSE42-NEXT:    pextrb $15, %xmm1, %eax
1554; SSE42-NEXT:    andb $1, %al
1555; SSE42-NEXT:    movb %al, 2(%rdi)
1556; SSE42-NEXT:    pextrb $14, %xmm1, %eax
1557; SSE42-NEXT:    andb $1, %al
1558; SSE42-NEXT:    movb %al, 2(%rdi)
1559; SSE42-NEXT:    pextrb $13, %xmm1, %eax
1560; SSE42-NEXT:    andb $1, %al
1561; SSE42-NEXT:    movb %al, 2(%rdi)
1562; SSE42-NEXT:    pextrb $12, %xmm1, %eax
1563; SSE42-NEXT:    andb $1, %al
1564; SSE42-NEXT:    movb %al, 2(%rdi)
1565; SSE42-NEXT:    pextrb $11, %xmm1, %eax
1566; SSE42-NEXT:    andb $1, %al
1567; SSE42-NEXT:    movb %al, 2(%rdi)
1568; SSE42-NEXT:    pextrb $10, %xmm1, %eax
1569; SSE42-NEXT:    andb $1, %al
1570; SSE42-NEXT:    movb %al, 2(%rdi)
1571; SSE42-NEXT:    pextrb $9, %xmm1, %eax
1572; SSE42-NEXT:    andb $1, %al
1573; SSE42-NEXT:    movb %al, 2(%rdi)
1574; SSE42-NEXT:    pextrb $8, %xmm1, %eax
1575; SSE42-NEXT:    andb $1, %al
1576; SSE42-NEXT:    movb %al, 2(%rdi)
1577; SSE42-NEXT:    pextrb $7, %xmm1, %eax
1578; SSE42-NEXT:    andb $1, %al
1579; SSE42-NEXT:    movb %al, 2(%rdi)
1580; SSE42-NEXT:    pextrb $6, %xmm1, %eax
1581; SSE42-NEXT:    andb $1, %al
1582; SSE42-NEXT:    movb %al, 2(%rdi)
1583; SSE42-NEXT:    pextrb $5, %xmm1, %eax
1584; SSE42-NEXT:    andb $1, %al
1585; SSE42-NEXT:    movb %al, 2(%rdi)
1586; SSE42-NEXT:    pextrb $4, %xmm1, %eax
1587; SSE42-NEXT:    andb $1, %al
1588; SSE42-NEXT:    movb %al, 2(%rdi)
1589; SSE42-NEXT:    pextrb $3, %xmm1, %eax
1590; SSE42-NEXT:    andb $1, %al
1591; SSE42-NEXT:    movb %al, 2(%rdi)
1592; SSE42-NEXT:    pextrb $2, %xmm1, %eax
1593; SSE42-NEXT:    andb $1, %al
1594; SSE42-NEXT:    movb %al, 2(%rdi)
1595; SSE42-NEXT:    pextrb $1, %xmm1, %eax
1596; SSE42-NEXT:    andb $1, %al
1597; SSE42-NEXT:    movb %al, 2(%rdi)
1598; SSE42-NEXT:    pextrb $0, %xmm1, %eax
1599; SSE42-NEXT:    andb $1, %al
1600; SSE42-NEXT:    movb %al, 2(%rdi)
1601; SSE42-NEXT:    pextrb $15, %xmm0, %eax
1602; SSE42-NEXT:    andb $1, %al
1603; SSE42-NEXT:    movb %al, (%rdi)
1604; SSE42-NEXT:    pextrb $14, %xmm0, %eax
1605; SSE42-NEXT:    andb $1, %al
1606; SSE42-NEXT:    movb %al, (%rdi)
1607; SSE42-NEXT:    pextrb $13, %xmm0, %eax
1608; SSE42-NEXT:    andb $1, %al
1609; SSE42-NEXT:    movb %al, (%rdi)
1610; SSE42-NEXT:    pextrb $12, %xmm0, %eax
1611; SSE42-NEXT:    andb $1, %al
1612; SSE42-NEXT:    movb %al, (%rdi)
1613; SSE42-NEXT:    pextrb $11, %xmm0, %eax
1614; SSE42-NEXT:    andb $1, %al
1615; SSE42-NEXT:    movb %al, (%rdi)
1616; SSE42-NEXT:    pextrb $10, %xmm0, %eax
1617; SSE42-NEXT:    andb $1, %al
1618; SSE42-NEXT:    movb %al, (%rdi)
1619; SSE42-NEXT:    pextrb $9, %xmm0, %eax
1620; SSE42-NEXT:    andb $1, %al
1621; SSE42-NEXT:    movb %al, (%rdi)
1622; SSE42-NEXT:    pextrb $8, %xmm0, %eax
1623; SSE42-NEXT:    andb $1, %al
1624; SSE42-NEXT:    movb %al, (%rdi)
1625; SSE42-NEXT:    pextrb $7, %xmm0, %eax
1626; SSE42-NEXT:    andb $1, %al
1627; SSE42-NEXT:    movb %al, (%rdi)
1628; SSE42-NEXT:    pextrb $6, %xmm0, %eax
1629; SSE42-NEXT:    andb $1, %al
1630; SSE42-NEXT:    movb %al, (%rdi)
1631; SSE42-NEXT:    pextrb $5, %xmm0, %eax
1632; SSE42-NEXT:    andb $1, %al
1633; SSE42-NEXT:    movb %al, (%rdi)
1634; SSE42-NEXT:    pextrb $4, %xmm0, %eax
1635; SSE42-NEXT:    andb $1, %al
1636; SSE42-NEXT:    movb %al, (%rdi)
1637; SSE42-NEXT:    pextrb $3, %xmm0, %eax
1638; SSE42-NEXT:    andb $1, %al
1639; SSE42-NEXT:    movb %al, (%rdi)
1640; SSE42-NEXT:    pextrb $2, %xmm0, %eax
1641; SSE42-NEXT:    andb $1, %al
1642; SSE42-NEXT:    movb %al, (%rdi)
1643; SSE42-NEXT:    pextrb $1, %xmm0, %eax
1644; SSE42-NEXT:    andb $1, %al
1645; SSE42-NEXT:    movb %al, (%rdi)
1646; SSE42-NEXT:    pextrb $0, %xmm0, %eax
1647; SSE42-NEXT:    andb $1, %al
1648; SSE42-NEXT:    movb %al, (%rdi)
1649; SSE42-NEXT:    movq %rdi, %rax
1650; SSE42-NEXT:    retq
1651;
1652; AVX1-LABEL: test_cmp_v64i8:
1653; AVX1:       # BB#0:
1654; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm4
1655; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
1656; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1657; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm0
1658; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm2
1659; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
1660; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1661; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm1
1662; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
1663; AVX1-NEXT:    andb $1, %al
1664; AVX1-NEXT:    movb %al, 4(%rdi)
1665; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
1666; AVX1-NEXT:    andb $1, %al
1667; AVX1-NEXT:    movb %al, 4(%rdi)
1668; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
1669; AVX1-NEXT:    andb $1, %al
1670; AVX1-NEXT:    movb %al, 4(%rdi)
1671; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
1672; AVX1-NEXT:    andb $1, %al
1673; AVX1-NEXT:    movb %al, 4(%rdi)
1674; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
1675; AVX1-NEXT:    andb $1, %al
1676; AVX1-NEXT:    movb %al, 4(%rdi)
1677; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
1678; AVX1-NEXT:    andb $1, %al
1679; AVX1-NEXT:    movb %al, 4(%rdi)
1680; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
1681; AVX1-NEXT:    andb $1, %al
1682; AVX1-NEXT:    movb %al, 4(%rdi)
1683; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
1684; AVX1-NEXT:    andb $1, %al
1685; AVX1-NEXT:    movb %al, 4(%rdi)
1686; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
1687; AVX1-NEXT:    andb $1, %al
1688; AVX1-NEXT:    movb %al, 4(%rdi)
1689; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
1690; AVX1-NEXT:    andb $1, %al
1691; AVX1-NEXT:    movb %al, 4(%rdi)
1692; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
1693; AVX1-NEXT:    andb $1, %al
1694; AVX1-NEXT:    movb %al, 4(%rdi)
1695; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
1696; AVX1-NEXT:    andb $1, %al
1697; AVX1-NEXT:    movb %al, 4(%rdi)
1698; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
1699; AVX1-NEXT:    andb $1, %al
1700; AVX1-NEXT:    movb %al, 4(%rdi)
1701; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
1702; AVX1-NEXT:    andb $1, %al
1703; AVX1-NEXT:    movb %al, 4(%rdi)
1704; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
1705; AVX1-NEXT:    andb $1, %al
1706; AVX1-NEXT:    movb %al, 4(%rdi)
1707; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
1708; AVX1-NEXT:    andb $1, %al
1709; AVX1-NEXT:    movb %al, 4(%rdi)
1710; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
1711; AVX1-NEXT:    andb $1, %al
1712; AVX1-NEXT:    movb %al, 4(%rdi)
1713; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
1714; AVX1-NEXT:    andb $1, %al
1715; AVX1-NEXT:    movb %al, 4(%rdi)
1716; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
1717; AVX1-NEXT:    andb $1, %al
1718; AVX1-NEXT:    movb %al, 4(%rdi)
1719; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
1720; AVX1-NEXT:    andb $1, %al
1721; AVX1-NEXT:    movb %al, 4(%rdi)
1722; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
1723; AVX1-NEXT:    andb $1, %al
1724; AVX1-NEXT:    movb %al, 4(%rdi)
1725; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
1726; AVX1-NEXT:    andb $1, %al
1727; AVX1-NEXT:    movb %al, 4(%rdi)
1728; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
1729; AVX1-NEXT:    andb $1, %al
1730; AVX1-NEXT:    movb %al, 4(%rdi)
1731; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
1732; AVX1-NEXT:    andb $1, %al
1733; AVX1-NEXT:    movb %al, 4(%rdi)
1734; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
1735; AVX1-NEXT:    andb $1, %al
1736; AVX1-NEXT:    movb %al, 4(%rdi)
1737; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
1738; AVX1-NEXT:    andb $1, %al
1739; AVX1-NEXT:    movb %al, 4(%rdi)
1740; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
1741; AVX1-NEXT:    andb $1, %al
1742; AVX1-NEXT:    movb %al, 4(%rdi)
1743; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
1744; AVX1-NEXT:    andb $1, %al
1745; AVX1-NEXT:    movb %al, 4(%rdi)
1746; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
1747; AVX1-NEXT:    andb $1, %al
1748; AVX1-NEXT:    movb %al, 4(%rdi)
1749; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
1750; AVX1-NEXT:    andb $1, %al
1751; AVX1-NEXT:    movb %al, 4(%rdi)
1752; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
1753; AVX1-NEXT:    andb $1, %al
1754; AVX1-NEXT:    movb %al, 4(%rdi)
1755; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
1756; AVX1-NEXT:    andb $1, %al
1757; AVX1-NEXT:    movb %al, 4(%rdi)
1758; AVX1-NEXT:    vpextrb $15, %xmm0, %eax
1759; AVX1-NEXT:    andb $1, %al
1760; AVX1-NEXT:    movb %al, (%rdi)
1761; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
1762; AVX1-NEXT:    andb $1, %al
1763; AVX1-NEXT:    movb %al, (%rdi)
1764; AVX1-NEXT:    vpextrb $13, %xmm0, %eax
1765; AVX1-NEXT:    andb $1, %al
1766; AVX1-NEXT:    movb %al, (%rdi)
1767; AVX1-NEXT:    vpextrb $12, %xmm0, %eax
1768; AVX1-NEXT:    andb $1, %al
1769; AVX1-NEXT:    movb %al, (%rdi)
1770; AVX1-NEXT:    vpextrb $11, %xmm0, %eax
1771; AVX1-NEXT:    andb $1, %al
1772; AVX1-NEXT:    movb %al, (%rdi)
1773; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
1774; AVX1-NEXT:    andb $1, %al
1775; AVX1-NEXT:    movb %al, (%rdi)
1776; AVX1-NEXT:    vpextrb $9, %xmm0, %eax
1777; AVX1-NEXT:    andb $1, %al
1778; AVX1-NEXT:    movb %al, (%rdi)
1779; AVX1-NEXT:    vpextrb $8, %xmm0, %eax
1780; AVX1-NEXT:    andb $1, %al
1781; AVX1-NEXT:    movb %al, (%rdi)
1782; AVX1-NEXT:    vpextrb $7, %xmm0, %eax
1783; AVX1-NEXT:    andb $1, %al
1784; AVX1-NEXT:    movb %al, (%rdi)
1785; AVX1-NEXT:    vpextrb $6, %xmm0, %eax
1786; AVX1-NEXT:    andb $1, %al
1787; AVX1-NEXT:    movb %al, (%rdi)
1788; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
1789; AVX1-NEXT:    andb $1, %al
1790; AVX1-NEXT:    movb %al, (%rdi)
1791; AVX1-NEXT:    vpextrb $4, %xmm0, %eax
1792; AVX1-NEXT:    andb $1, %al
1793; AVX1-NEXT:    movb %al, (%rdi)
1794; AVX1-NEXT:    vpextrb $3, %xmm0, %eax
1795; AVX1-NEXT:    andb $1, %al
1796; AVX1-NEXT:    movb %al, (%rdi)
1797; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
1798; AVX1-NEXT:    andb $1, %al
1799; AVX1-NEXT:    movb %al, (%rdi)
1800; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
1801; AVX1-NEXT:    andb $1, %al
1802; AVX1-NEXT:    movb %al, (%rdi)
1803; AVX1-NEXT:    vpextrb $0, %xmm0, %eax
1804; AVX1-NEXT:    andb $1, %al
1805; AVX1-NEXT:    movb %al, (%rdi)
1806; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
1807; AVX1-NEXT:    andb $1, %al
1808; AVX1-NEXT:    movb %al, (%rdi)
1809; AVX1-NEXT:    vpextrb $14, %xmm4, %eax
1810; AVX1-NEXT:    andb $1, %al
1811; AVX1-NEXT:    movb %al, (%rdi)
1812; AVX1-NEXT:    vpextrb $13, %xmm4, %eax
1813; AVX1-NEXT:    andb $1, %al
1814; AVX1-NEXT:    movb %al, (%rdi)
1815; AVX1-NEXT:    vpextrb $12, %xmm4, %eax
1816; AVX1-NEXT:    andb $1, %al
1817; AVX1-NEXT:    movb %al, (%rdi)
1818; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
1819; AVX1-NEXT:    andb $1, %al
1820; AVX1-NEXT:    movb %al, (%rdi)
1821; AVX1-NEXT:    vpextrb $10, %xmm4, %eax
1822; AVX1-NEXT:    andb $1, %al
1823; AVX1-NEXT:    movb %al, (%rdi)
1824; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
1825; AVX1-NEXT:    andb $1, %al
1826; AVX1-NEXT:    movb %al, (%rdi)
1827; AVX1-NEXT:    vpextrb $8, %xmm4, %eax
1828; AVX1-NEXT:    andb $1, %al
1829; AVX1-NEXT:    movb %al, (%rdi)
1830; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
1831; AVX1-NEXT:    andb $1, %al
1832; AVX1-NEXT:    movb %al, (%rdi)
1833; AVX1-NEXT:    vpextrb $6, %xmm4, %eax
1834; AVX1-NEXT:    andb $1, %al
1835; AVX1-NEXT:    movb %al, (%rdi)
1836; AVX1-NEXT:    vpextrb $5, %xmm4, %eax
1837; AVX1-NEXT:    andb $1, %al
1838; AVX1-NEXT:    movb %al, (%rdi)
1839; AVX1-NEXT:    vpextrb $4, %xmm4, %eax
1840; AVX1-NEXT:    andb $1, %al
1841; AVX1-NEXT:    movb %al, (%rdi)
1842; AVX1-NEXT:    vpextrb $3, %xmm4, %eax
1843; AVX1-NEXT:    andb $1, %al
1844; AVX1-NEXT:    movb %al, (%rdi)
1845; AVX1-NEXT:    vpextrb $2, %xmm4, %eax
1846; AVX1-NEXT:    andb $1, %al
1847; AVX1-NEXT:    movb %al, (%rdi)
1848; AVX1-NEXT:    vpextrb $1, %xmm4, %eax
1849; AVX1-NEXT:    andb $1, %al
1850; AVX1-NEXT:    movb %al, (%rdi)
1851; AVX1-NEXT:    vpextrb $0, %xmm4, %eax
1852; AVX1-NEXT:    andb $1, %al
1853; AVX1-NEXT:    movb %al, (%rdi)
1854; AVX1-NEXT:    movq %rdi, %rax
1855; AVX1-NEXT:    vzeroupper
1856; AVX1-NEXT:    retq
1857;
1858; AVX2-LABEL: test_cmp_v64i8:
1859; AVX2:       # BB#0:
1860; AVX2-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
1861; AVX2-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm1
1862; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
1863; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
1864; AVX2-NEXT:    andb $1, %al
1865; AVX2-NEXT:    movb %al, 4(%rdi)
1866; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
1867; AVX2-NEXT:    andb $1, %al
1868; AVX2-NEXT:    movb %al, 4(%rdi)
1869; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
1870; AVX2-NEXT:    andb $1, %al
1871; AVX2-NEXT:    movb %al, 4(%rdi)
1872; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
1873; AVX2-NEXT:    andb $1, %al
1874; AVX2-NEXT:    movb %al, 4(%rdi)
1875; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
1876; AVX2-NEXT:    andb $1, %al
1877; AVX2-NEXT:    movb %al, 4(%rdi)
1878; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
1879; AVX2-NEXT:    andb $1, %al
1880; AVX2-NEXT:    movb %al, 4(%rdi)
1881; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
1882; AVX2-NEXT:    andb $1, %al
1883; AVX2-NEXT:    movb %al, 4(%rdi)
1884; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
1885; AVX2-NEXT:    andb $1, %al
1886; AVX2-NEXT:    movb %al, 4(%rdi)
1887; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
1888; AVX2-NEXT:    andb $1, %al
1889; AVX2-NEXT:    movb %al, 4(%rdi)
1890; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
1891; AVX2-NEXT:    andb $1, %al
1892; AVX2-NEXT:    movb %al, 4(%rdi)
1893; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
1894; AVX2-NEXT:    andb $1, %al
1895; AVX2-NEXT:    movb %al, 4(%rdi)
1896; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
1897; AVX2-NEXT:    andb $1, %al
1898; AVX2-NEXT:    movb %al, 4(%rdi)
1899; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
1900; AVX2-NEXT:    andb $1, %al
1901; AVX2-NEXT:    movb %al, 4(%rdi)
1902; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
1903; AVX2-NEXT:    andb $1, %al
1904; AVX2-NEXT:    movb %al, 4(%rdi)
1905; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
1906; AVX2-NEXT:    andb $1, %al
1907; AVX2-NEXT:    movb %al, 4(%rdi)
1908; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
1909; AVX2-NEXT:    andb $1, %al
1910; AVX2-NEXT:    movb %al, 4(%rdi)
1911; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
1912; AVX2-NEXT:    andb $1, %al
1913; AVX2-NEXT:    movb %al, 4(%rdi)
1914; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
1915; AVX2-NEXT:    andb $1, %al
1916; AVX2-NEXT:    movb %al, 4(%rdi)
1917; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
1918; AVX2-NEXT:    andb $1, %al
1919; AVX2-NEXT:    movb %al, 4(%rdi)
1920; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
1921; AVX2-NEXT:    andb $1, %al
1922; AVX2-NEXT:    movb %al, 4(%rdi)
1923; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
1924; AVX2-NEXT:    andb $1, %al
1925; AVX2-NEXT:    movb %al, 4(%rdi)
1926; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
1927; AVX2-NEXT:    andb $1, %al
1928; AVX2-NEXT:    movb %al, 4(%rdi)
1929; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
1930; AVX2-NEXT:    andb $1, %al
1931; AVX2-NEXT:    movb %al, 4(%rdi)
1932; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
1933; AVX2-NEXT:    andb $1, %al
1934; AVX2-NEXT:    movb %al, 4(%rdi)
1935; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
1936; AVX2-NEXT:    andb $1, %al
1937; AVX2-NEXT:    movb %al, 4(%rdi)
1938; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
1939; AVX2-NEXT:    andb $1, %al
1940; AVX2-NEXT:    movb %al, 4(%rdi)
1941; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
1942; AVX2-NEXT:    andb $1, %al
1943; AVX2-NEXT:    movb %al, 4(%rdi)
1944; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
1945; AVX2-NEXT:    andb $1, %al
1946; AVX2-NEXT:    movb %al, 4(%rdi)
1947; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
1948; AVX2-NEXT:    andb $1, %al
1949; AVX2-NEXT:    movb %al, 4(%rdi)
1950; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
1951; AVX2-NEXT:    andb $1, %al
1952; AVX2-NEXT:    movb %al, 4(%rdi)
1953; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
1954; AVX2-NEXT:    andb $1, %al
1955; AVX2-NEXT:    movb %al, 4(%rdi)
1956; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
1957; AVX2-NEXT:    andb $1, %al
1958; AVX2-NEXT:    movb %al, 4(%rdi)
1959; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1960; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
1961; AVX2-NEXT:    andb $1, %al
1962; AVX2-NEXT:    movb %al, (%rdi)
1963; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
1964; AVX2-NEXT:    andb $1, %al
1965; AVX2-NEXT:    movb %al, (%rdi)
1966; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
1967; AVX2-NEXT:    andb $1, %al
1968; AVX2-NEXT:    movb %al, (%rdi)
1969; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
1970; AVX2-NEXT:    andb $1, %al
1971; AVX2-NEXT:    movb %al, (%rdi)
1972; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
1973; AVX2-NEXT:    andb $1, %al
1974; AVX2-NEXT:    movb %al, (%rdi)
1975; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
1976; AVX2-NEXT:    andb $1, %al
1977; AVX2-NEXT:    movb %al, (%rdi)
1978; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
1979; AVX2-NEXT:    andb $1, %al
1980; AVX2-NEXT:    movb %al, (%rdi)
1981; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
1982; AVX2-NEXT:    andb $1, %al
1983; AVX2-NEXT:    movb %al, (%rdi)
1984; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
1985; AVX2-NEXT:    andb $1, %al
1986; AVX2-NEXT:    movb %al, (%rdi)
1987; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
1988; AVX2-NEXT:    andb $1, %al
1989; AVX2-NEXT:    movb %al, (%rdi)
1990; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
1991; AVX2-NEXT:    andb $1, %al
1992; AVX2-NEXT:    movb %al, (%rdi)
1993; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
1994; AVX2-NEXT:    andb $1, %al
1995; AVX2-NEXT:    movb %al, (%rdi)
1996; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
1997; AVX2-NEXT:    andb $1, %al
1998; AVX2-NEXT:    movb %al, (%rdi)
1999; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
2000; AVX2-NEXT:    andb $1, %al
2001; AVX2-NEXT:    movb %al, (%rdi)
2002; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
2003; AVX2-NEXT:    andb $1, %al
2004; AVX2-NEXT:    movb %al, (%rdi)
2005; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
2006; AVX2-NEXT:    andb $1, %al
2007; AVX2-NEXT:    movb %al, (%rdi)
2008; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
2009; AVX2-NEXT:    andb $1, %al
2010; AVX2-NEXT:    movb %al, (%rdi)
2011; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
2012; AVX2-NEXT:    andb $1, %al
2013; AVX2-NEXT:    movb %al, (%rdi)
2014; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
2015; AVX2-NEXT:    andb $1, %al
2016; AVX2-NEXT:    movb %al, (%rdi)
2017; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
2018; AVX2-NEXT:    andb $1, %al
2019; AVX2-NEXT:    movb %al, (%rdi)
2020; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
2021; AVX2-NEXT:    andb $1, %al
2022; AVX2-NEXT:    movb %al, (%rdi)
2023; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
2024; AVX2-NEXT:    andb $1, %al
2025; AVX2-NEXT:    movb %al, (%rdi)
2026; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
2027; AVX2-NEXT:    andb $1, %al
2028; AVX2-NEXT:    movb %al, (%rdi)
2029; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
2030; AVX2-NEXT:    andb $1, %al
2031; AVX2-NEXT:    movb %al, (%rdi)
2032; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
2033; AVX2-NEXT:    andb $1, %al
2034; AVX2-NEXT:    movb %al, (%rdi)
2035; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
2036; AVX2-NEXT:    andb $1, %al
2037; AVX2-NEXT:    movb %al, (%rdi)
2038; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
2039; AVX2-NEXT:    andb $1, %al
2040; AVX2-NEXT:    movb %al, (%rdi)
2041; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
2042; AVX2-NEXT:    andb $1, %al
2043; AVX2-NEXT:    movb %al, (%rdi)
2044; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
2045; AVX2-NEXT:    andb $1, %al
2046; AVX2-NEXT:    movb %al, (%rdi)
2047; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
2048; AVX2-NEXT:    andb $1, %al
2049; AVX2-NEXT:    movb %al, (%rdi)
2050; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
2051; AVX2-NEXT:    andb $1, %al
2052; AVX2-NEXT:    movb %al, (%rdi)
2053; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
2054; AVX2-NEXT:    andb $1, %al
2055; AVX2-NEXT:    movb %al, (%rdi)
2056; AVX2-NEXT:    movq %rdi, %rax
2057; AVX2-NEXT:    vzeroupper
2058; AVX2-NEXT:    retq
2059;
2060; AVX512-LABEL: test_cmp_v64i8:
2061; AVX512:       # BB#0:
2062; AVX512-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm3
2063; AVX512-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm1
2064; AVX512-NEXT:    vpsllw $7, %xmm1, %xmm0
2065; AVX512-NEXT:    vmovdqa {{.*#+}} xmm4 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
2066; AVX512-NEXT:    vpand %xmm4, %xmm0, %xmm0
2067; AVX512-NEXT:    vpxor %xmm5, %xmm5, %xmm5
2068; AVX512-NEXT:    vpcmpgtb %xmm0, %xmm5, %xmm0
2069; AVX512-NEXT:    vextracti128 $1, %ymm1, %xmm1
2070; AVX512-NEXT:    vpsllw $7, %xmm1, %xmm1
2071; AVX512-NEXT:    vpand %xmm4, %xmm1, %xmm1
2072; AVX512-NEXT:    vpcmpgtb %xmm1, %xmm5, %xmm1
2073; AVX512-NEXT:    vpsllw $7, %xmm3, %xmm2
2074; AVX512-NEXT:    vpand %xmm4, %xmm2, %xmm2
2075; AVX512-NEXT:    vpcmpgtb %xmm2, %xmm5, %xmm2
2076; AVX512-NEXT:    vextracti128 $1, %ymm3, %xmm3
2077; AVX512-NEXT:    vpsllw $7, %xmm3, %xmm3
2078; AVX512-NEXT:    vpand %xmm4, %xmm3, %xmm3
2079; AVX512-NEXT:    vpcmpgtb %xmm3, %xmm5, %xmm3
2080; AVX512-NEXT:    retq
2081  %1 = icmp sgt <64 x i8> %a0, %a1
2082  ret <64 x i1> %1
2083}
2084
2085;
2086; 1024-bit vector comparisons
2087;
2088
2089define <16 x i1> @test_cmp_v16f64(<16 x double> %a0, <16 x double> %a1) nounwind {
2090; SSE-LABEL: test_cmp_v16f64:
2091; SSE:       # BB#0:
2092; SSE-NEXT:    movapd %xmm0, %xmm8
2093; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
2094; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm11
2095; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm10
2096; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm12
2097; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm9
2098; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm13
2099; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm14
2100; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm15
2101; SSE-NEXT:    cmpltpd %xmm7, %xmm15
2102; SSE-NEXT:    movapd {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2103; SSE-NEXT:    andpd %xmm7, %xmm15
2104; SSE-NEXT:    cmpltpd %xmm6, %xmm14
2105; SSE-NEXT:    andpd %xmm7, %xmm14
2106; SSE-NEXT:    packuswb %xmm15, %xmm14
2107; SSE-NEXT:    cmpltpd %xmm5, %xmm13
2108; SSE-NEXT:    andpd %xmm7, %xmm13
2109; SSE-NEXT:    cmpltpd %xmm4, %xmm9
2110; SSE-NEXT:    andpd %xmm7, %xmm9
2111; SSE-NEXT:    packuswb %xmm13, %xmm9
2112; SSE-NEXT:    packuswb %xmm14, %xmm9
2113; SSE-NEXT:    cmpltpd %xmm3, %xmm12
2114; SSE-NEXT:    andpd %xmm7, %xmm12
2115; SSE-NEXT:    cmpltpd %xmm2, %xmm10
2116; SSE-NEXT:    andpd %xmm7, %xmm10
2117; SSE-NEXT:    packuswb %xmm12, %xmm10
2118; SSE-NEXT:    cmpltpd %xmm1, %xmm11
2119; SSE-NEXT:    andpd %xmm7, %xmm11
2120; SSE-NEXT:    cmpltpd %xmm8, %xmm0
2121; SSE-NEXT:    andpd %xmm7, %xmm0
2122; SSE-NEXT:    packuswb %xmm11, %xmm0
2123; SSE-NEXT:    packuswb %xmm10, %xmm0
2124; SSE-NEXT:    packuswb %xmm9, %xmm0
2125; SSE-NEXT:    retq
2126;
2127; AVX1-LABEL: test_cmp_v16f64:
2128; AVX1:       # BB#0:
2129; AVX1-NEXT:    vcmpltpd %ymm3, %ymm7, %ymm3
2130; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm8
2131; AVX1-NEXT:    vmovapd {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2132; AVX1-NEXT:    vandpd %xmm7, %xmm8, %xmm8
2133; AVX1-NEXT:    vandpd %xmm7, %xmm3, %xmm3
2134; AVX1-NEXT:    vpackuswb %xmm8, %xmm3, %xmm3
2135; AVX1-NEXT:    vcmpltpd %ymm2, %ymm6, %ymm2
2136; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
2137; AVX1-NEXT:    vandpd %xmm7, %xmm6, %xmm6
2138; AVX1-NEXT:    vandpd %xmm7, %xmm2, %xmm2
2139; AVX1-NEXT:    vpackuswb %xmm6, %xmm2, %xmm2
2140; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
2141; AVX1-NEXT:    vcmpltpd %ymm1, %ymm5, %ymm1
2142; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
2143; AVX1-NEXT:    vandpd %xmm7, %xmm3, %xmm3
2144; AVX1-NEXT:    vandpd %xmm7, %xmm1, %xmm1
2145; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
2146; AVX1-NEXT:    vcmpltpd %ymm0, %ymm4, %ymm0
2147; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2148; AVX1-NEXT:    vandpd %xmm7, %xmm3, %xmm3
2149; AVX1-NEXT:    vandpd %xmm7, %xmm0, %xmm0
2150; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
2151; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
2152; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
2153; AVX1-NEXT:    vzeroupper
2154; AVX1-NEXT:    retq
2155;
2156; AVX2-LABEL: test_cmp_v16f64:
2157; AVX2:       # BB#0:
2158; AVX2-NEXT:    vcmpltpd %ymm2, %ymm6, %ymm2
2159; AVX2-NEXT:    vpermilps {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
2160; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
2161; AVX2-NEXT:    vcmpltpd %ymm3, %ymm7, %ymm3
2162; AVX2-NEXT:    vpermilps {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
2163; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
2164; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
2165; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
2166; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
2167; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
2168; AVX2-NEXT:    vmovdqa {{.*#+}} xmm6 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2169; AVX2-NEXT:    vpshufb %xmm6, %xmm2, %xmm2
2170; AVX2-NEXT:    vcmpltpd %ymm0, %ymm4, %ymm0
2171; AVX2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
2172; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
2173; AVX2-NEXT:    vcmpltpd %ymm1, %ymm5, %ymm1
2174; AVX2-NEXT:    vpermilps {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
2175; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
2176; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
2177; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
2178; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
2179; AVX2-NEXT:    vpshufb %xmm6, %xmm0, %xmm0
2180; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
2181; AVX2-NEXT:    vzeroupper
2182; AVX2-NEXT:    retq
2183;
2184; AVX512-LABEL: test_cmp_v16f64:
2185; AVX512:       # BB#0:
2186; AVX512-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2187; AVX512-NEXT:    vextractf32x4 $3, %zmm0, %xmm5
2188; AVX512-NEXT:    xorl %eax, %eax
2189; AVX512-NEXT:    vucomisd %xmm4, %xmm5
2190; AVX512-NEXT:    movq $-1, %rcx
2191; AVX512-NEXT:    movl $0, %edx
2192; AVX512-NEXT:    cmovaq %rcx, %rdx
2193; AVX512-NEXT:    vmovq %rdx, %xmm6
2194; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2195; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2196; AVX512-NEXT:    vucomisd %xmm4, %xmm5
2197; AVX512-NEXT:    movl $0, %edx
2198; AVX512-NEXT:    cmovaq %rcx, %rdx
2199; AVX512-NEXT:    vmovq %rdx, %xmm4
2200; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2201; AVX512-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2202; AVX512-NEXT:    vextractf32x4 $2, %zmm0, %xmm6
2203; AVX512-NEXT:    vucomisd %xmm5, %xmm6
2204; AVX512-NEXT:    movl $0, %edx
2205; AVX512-NEXT:    cmovaq %rcx, %rdx
2206; AVX512-NEXT:    vmovq %rdx, %xmm7
2207; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2208; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2209; AVX512-NEXT:    vucomisd %xmm5, %xmm6
2210; AVX512-NEXT:    movl $0, %edx
2211; AVX512-NEXT:    cmovaq %rcx, %rdx
2212; AVX512-NEXT:    vmovq %rdx, %xmm5
2213; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2214; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
2215; AVX512-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
2216; AVX512-NEXT:    vextractf32x4 $1, %zmm0, %xmm6
2217; AVX512-NEXT:    vucomisd %xmm5, %xmm6
2218; AVX512-NEXT:    movl $0, %edx
2219; AVX512-NEXT:    cmovaq %rcx, %rdx
2220; AVX512-NEXT:    vmovq %rdx, %xmm7
2221; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2222; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm6[1,0]
2223; AVX512-NEXT:    vucomisd %xmm5, %xmm6
2224; AVX512-NEXT:    movl $0, %edx
2225; AVX512-NEXT:    cmovaq %rcx, %rdx
2226; AVX512-NEXT:    vmovq %rdx, %xmm5
2227; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm7[0],xmm5[0]
2228; AVX512-NEXT:    vucomisd %xmm2, %xmm0
2229; AVX512-NEXT:    movl $0, %edx
2230; AVX512-NEXT:    cmovaq %rcx, %rdx
2231; AVX512-NEXT:    vmovq %rdx, %xmm6
2232; AVX512-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2233; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2234; AVX512-NEXT:    vucomisd %xmm2, %xmm0
2235; AVX512-NEXT:    movl $0, %edx
2236; AVX512-NEXT:    cmovaq %rcx, %rdx
2237; AVX512-NEXT:    vmovq %rdx, %xmm0
2238; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm6[0],xmm0[0]
2239; AVX512-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
2240; AVX512-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
2241; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
2242; AVX512-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
2243; AVX512-NEXT:    vextractf32x4 $3, %zmm1, %xmm4
2244; AVX512-NEXT:    vucomisd %xmm2, %xmm4
2245; AVX512-NEXT:    movl $0, %edx
2246; AVX512-NEXT:    cmovaq %rcx, %rdx
2247; AVX512-NEXT:    vmovq %rdx, %xmm5
2248; AVX512-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2249; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2250; AVX512-NEXT:    vucomisd %xmm2, %xmm4
2251; AVX512-NEXT:    movl $0, %edx
2252; AVX512-NEXT:    cmovaq %rcx, %rdx
2253; AVX512-NEXT:    vmovq %rdx, %xmm2
2254; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
2255; AVX512-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
2256; AVX512-NEXT:    vextractf32x4 $2, %zmm1, %xmm5
2257; AVX512-NEXT:    vucomisd %xmm4, %xmm5
2258; AVX512-NEXT:    movl $0, %edx
2259; AVX512-NEXT:    cmovaq %rcx, %rdx
2260; AVX512-NEXT:    vmovq %rdx, %xmm6
2261; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2262; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2263; AVX512-NEXT:    vucomisd %xmm4, %xmm5
2264; AVX512-NEXT:    movl $0, %edx
2265; AVX512-NEXT:    cmovaq %rcx, %rdx
2266; AVX512-NEXT:    vmovq %rdx, %xmm4
2267; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2268; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
2269; AVX512-NEXT:    vextractf32x4 $1, %zmm3, %xmm4
2270; AVX512-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
2271; AVX512-NEXT:    vucomisd %xmm4, %xmm5
2272; AVX512-NEXT:    movl $0, %edx
2273; AVX512-NEXT:    cmovaq %rcx, %rdx
2274; AVX512-NEXT:    vmovq %rdx, %xmm6
2275; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm4[1,0]
2276; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm5[1,0]
2277; AVX512-NEXT:    vucomisd %xmm4, %xmm5
2278; AVX512-NEXT:    movl $0, %edx
2279; AVX512-NEXT:    cmovaq %rcx, %rdx
2280; AVX512-NEXT:    vmovq %rdx, %xmm4
2281; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
2282; AVX512-NEXT:    vucomisd %xmm3, %xmm1
2283; AVX512-NEXT:    movl $0, %edx
2284; AVX512-NEXT:    cmovaq %rcx, %rdx
2285; AVX512-NEXT:    vmovq %rdx, %xmm5
2286; AVX512-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm3[1,0]
2287; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
2288; AVX512-NEXT:    vucomisd %xmm3, %xmm1
2289; AVX512-NEXT:    cmovaq %rcx, %rax
2290; AVX512-NEXT:    vmovq %rax, %xmm1
2291; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
2292; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
2293; AVX512-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
2294; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
2295; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2296; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
2297; AVX512-NEXT:    retq
2298  %1 = fcmp ogt <16 x double> %a0, %a1
2299  ret <16 x i1> %1
2300}
2301
2302define <32 x i1> @test_cmp_v32f32(<32 x float> %a0, <32 x float> %a1) nounwind {
2303; SSE2-LABEL: test_cmp_v32f32:
2304; SSE2:       # BB#0:
2305; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
2306; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
2307; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
2308; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
2309; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
2310; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
2311; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
2312; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
2313; SSE2-NEXT:    cmpltps %xmm3, %xmm15
2314; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm15[0,2,2,3,4,5,6,7]
2315; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
2316; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
2317; SSE2-NEXT:    cmpltps %xmm2, %xmm14
2318; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm14[0,2,2,3,4,5,6,7]
2319; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
2320; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2321; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
2322; SSE2-NEXT:    psllw $15, %xmm2
2323; SSE2-NEXT:    psraw $15, %xmm2
2324; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
2325; SSE2-NEXT:    pand %xmm3, %xmm2
2326; SSE2-NEXT:    cmpltps %xmm1, %xmm13
2327; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm13[0,2,2,3,4,5,6,7]
2328; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2329; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2330; SSE2-NEXT:    cmpltps %xmm0, %xmm12
2331; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm12[0,2,2,3,4,5,6,7]
2332; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
2333; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2334; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2335; SSE2-NEXT:    psllw $15, %xmm0
2336; SSE2-NEXT:    psraw $15, %xmm0
2337; SSE2-NEXT:    pand %xmm3, %xmm0
2338; SSE2-NEXT:    packuswb %xmm2, %xmm0
2339; SSE2-NEXT:    cmpltps %xmm7, %xmm11
2340; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm11[0,2,2,3,4,5,6,7]
2341; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2342; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2343; SSE2-NEXT:    cmpltps %xmm6, %xmm10
2344; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm10[0,2,2,3,4,5,6,7]
2345; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
2346; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2347; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
2348; SSE2-NEXT:    psllw $15, %xmm2
2349; SSE2-NEXT:    psraw $15, %xmm2
2350; SSE2-NEXT:    pand %xmm3, %xmm2
2351; SSE2-NEXT:    cmpltps %xmm5, %xmm9
2352; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm9[0,2,2,3,4,5,6,7]
2353; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2354; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2355; SSE2-NEXT:    cmpltps %xmm4, %xmm8
2356; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm8[0,2,2,3,4,5,6,7]
2357; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
2358; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
2359; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm1[0]
2360; SSE2-NEXT:    psllw $15, %xmm4
2361; SSE2-NEXT:    psraw $15, %xmm4
2362; SSE2-NEXT:    pand %xmm3, %xmm4
2363; SSE2-NEXT:    packuswb %xmm2, %xmm4
2364; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
2365; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2366; SSE2-NEXT:    andb $1, %al
2367; SSE2-NEXT:    movb %al, 2(%rdi)
2368; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
2369; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2370; SSE2-NEXT:    andb $1, %al
2371; SSE2-NEXT:    movb %al, (%rdi)
2372; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2373; SSE2-NEXT:    andb $1, %al
2374; SSE2-NEXT:    movb %al, 2(%rdi)
2375; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2376; SSE2-NEXT:    andb $1, %al
2377; SSE2-NEXT:    movb %al, (%rdi)
2378; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2379; SSE2-NEXT:    andb $1, %al
2380; SSE2-NEXT:    movb %al, 2(%rdi)
2381; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2382; SSE2-NEXT:    andb $1, %al
2383; SSE2-NEXT:    movb %al, (%rdi)
2384; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2385; SSE2-NEXT:    andb $1, %al
2386; SSE2-NEXT:    movb %al, 2(%rdi)
2387; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2388; SSE2-NEXT:    andb $1, %al
2389; SSE2-NEXT:    movb %al, (%rdi)
2390; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2391; SSE2-NEXT:    andb $1, %al
2392; SSE2-NEXT:    movb %al, 2(%rdi)
2393; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2394; SSE2-NEXT:    andb $1, %al
2395; SSE2-NEXT:    movb %al, (%rdi)
2396; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2397; SSE2-NEXT:    andb $1, %al
2398; SSE2-NEXT:    movb %al, 2(%rdi)
2399; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2400; SSE2-NEXT:    andb $1, %al
2401; SSE2-NEXT:    movb %al, (%rdi)
2402; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2403; SSE2-NEXT:    andb $1, %al
2404; SSE2-NEXT:    movb %al, 2(%rdi)
2405; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2406; SSE2-NEXT:    andb $1, %al
2407; SSE2-NEXT:    movb %al, (%rdi)
2408; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2409; SSE2-NEXT:    andb $1, %al
2410; SSE2-NEXT:    movb %al, 2(%rdi)
2411; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2412; SSE2-NEXT:    andb $1, %al
2413; SSE2-NEXT:    movb %al, (%rdi)
2414; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2415; SSE2-NEXT:    andb $1, %al
2416; SSE2-NEXT:    movb %al, 2(%rdi)
2417; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2418; SSE2-NEXT:    andb $1, %al
2419; SSE2-NEXT:    movb %al, (%rdi)
2420; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2421; SSE2-NEXT:    andb $1, %al
2422; SSE2-NEXT:    movb %al, 2(%rdi)
2423; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2424; SSE2-NEXT:    andb $1, %al
2425; SSE2-NEXT:    movb %al, (%rdi)
2426; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2427; SSE2-NEXT:    andb $1, %al
2428; SSE2-NEXT:    movb %al, 2(%rdi)
2429; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2430; SSE2-NEXT:    andb $1, %al
2431; SSE2-NEXT:    movb %al, (%rdi)
2432; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2433; SSE2-NEXT:    andb $1, %al
2434; SSE2-NEXT:    movb %al, 2(%rdi)
2435; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2436; SSE2-NEXT:    andb $1, %al
2437; SSE2-NEXT:    movb %al, (%rdi)
2438; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2439; SSE2-NEXT:    andb $1, %al
2440; SSE2-NEXT:    movb %al, 2(%rdi)
2441; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2442; SSE2-NEXT:    andb $1, %al
2443; SSE2-NEXT:    movb %al, (%rdi)
2444; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2445; SSE2-NEXT:    andb $1, %al
2446; SSE2-NEXT:    movb %al, 2(%rdi)
2447; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2448; SSE2-NEXT:    andb $1, %al
2449; SSE2-NEXT:    movb %al, (%rdi)
2450; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2451; SSE2-NEXT:    andb $1, %al
2452; SSE2-NEXT:    movb %al, 2(%rdi)
2453; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2454; SSE2-NEXT:    andb $1, %al
2455; SSE2-NEXT:    movb %al, (%rdi)
2456; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2457; SSE2-NEXT:    andb $1, %al
2458; SSE2-NEXT:    movb %al, 2(%rdi)
2459; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
2460; SSE2-NEXT:    andb $1, %al
2461; SSE2-NEXT:    movb %al, (%rdi)
2462; SSE2-NEXT:    movq %rdi, %rax
2463; SSE2-NEXT:    retq
2464;
2465; SSE42-LABEL: test_cmp_v32f32:
2466; SSE42:       # BB#0:
2467; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
2468; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
2469; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
2470; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
2471; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
2472; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
2473; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
2474; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
2475; SSE42-NEXT:    cmpltps %xmm3, %xmm15
2476; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2477; SSE42-NEXT:    pshufb %xmm3, %xmm15
2478; SSE42-NEXT:    cmpltps %xmm2, %xmm13
2479; SSE42-NEXT:    pshufb %xmm3, %xmm13
2480; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm13 = xmm13[0],xmm15[0]
2481; SSE42-NEXT:    psllw $15, %xmm13
2482; SSE42-NEXT:    psraw $15, %xmm13
2483; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2484; SSE42-NEXT:    pshufb %xmm2, %xmm13
2485; SSE42-NEXT:    cmpltps %xmm1, %xmm14
2486; SSE42-NEXT:    pshufb %xmm3, %xmm14
2487; SSE42-NEXT:    cmpltps %xmm0, %xmm8
2488; SSE42-NEXT:    pshufb %xmm3, %xmm8
2489; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm14[0]
2490; SSE42-NEXT:    psllw $15, %xmm8
2491; SSE42-NEXT:    psraw $15, %xmm8
2492; SSE42-NEXT:    pshufb %xmm2, %xmm8
2493; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm13[0]
2494; SSE42-NEXT:    cmpltps %xmm7, %xmm12
2495; SSE42-NEXT:    pshufb %xmm3, %xmm12
2496; SSE42-NEXT:    cmpltps %xmm6, %xmm10
2497; SSE42-NEXT:    pshufb %xmm3, %xmm10
2498; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm10 = xmm10[0],xmm12[0]
2499; SSE42-NEXT:    psllw $15, %xmm10
2500; SSE42-NEXT:    psraw $15, %xmm10
2501; SSE42-NEXT:    pshufb %xmm2, %xmm10
2502; SSE42-NEXT:    cmpltps %xmm5, %xmm11
2503; SSE42-NEXT:    pshufb %xmm3, %xmm11
2504; SSE42-NEXT:    cmpltps %xmm4, %xmm9
2505; SSE42-NEXT:    pshufb %xmm3, %xmm9
2506; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm11[0]
2507; SSE42-NEXT:    psllw $15, %xmm9
2508; SSE42-NEXT:    psraw $15, %xmm9
2509; SSE42-NEXT:    pshufb %xmm2, %xmm9
2510; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm9 = xmm9[0],xmm10[0]
2511; SSE42-NEXT:    pextrb $15, %xmm9, %eax
2512; SSE42-NEXT:    andb $1, %al
2513; SSE42-NEXT:    movb %al, 2(%rdi)
2514; SSE42-NEXT:    pextrb $14, %xmm9, %eax
2515; SSE42-NEXT:    andb $1, %al
2516; SSE42-NEXT:    movb %al, 2(%rdi)
2517; SSE42-NEXT:    pextrb $13, %xmm9, %eax
2518; SSE42-NEXT:    andb $1, %al
2519; SSE42-NEXT:    movb %al, 2(%rdi)
2520; SSE42-NEXT:    pextrb $12, %xmm9, %eax
2521; SSE42-NEXT:    andb $1, %al
2522; SSE42-NEXT:    movb %al, 2(%rdi)
2523; SSE42-NEXT:    pextrb $11, %xmm9, %eax
2524; SSE42-NEXT:    andb $1, %al
2525; SSE42-NEXT:    movb %al, 2(%rdi)
2526; SSE42-NEXT:    pextrb $10, %xmm9, %eax
2527; SSE42-NEXT:    andb $1, %al
2528; SSE42-NEXT:    movb %al, 2(%rdi)
2529; SSE42-NEXT:    pextrb $9, %xmm9, %eax
2530; SSE42-NEXT:    andb $1, %al
2531; SSE42-NEXT:    movb %al, 2(%rdi)
2532; SSE42-NEXT:    pextrb $8, %xmm9, %eax
2533; SSE42-NEXT:    andb $1, %al
2534; SSE42-NEXT:    movb %al, 2(%rdi)
2535; SSE42-NEXT:    pextrb $7, %xmm9, %eax
2536; SSE42-NEXT:    andb $1, %al
2537; SSE42-NEXT:    movb %al, 2(%rdi)
2538; SSE42-NEXT:    pextrb $6, %xmm9, %eax
2539; SSE42-NEXT:    andb $1, %al
2540; SSE42-NEXT:    movb %al, 2(%rdi)
2541; SSE42-NEXT:    pextrb $5, %xmm9, %eax
2542; SSE42-NEXT:    andb $1, %al
2543; SSE42-NEXT:    movb %al, 2(%rdi)
2544; SSE42-NEXT:    pextrb $4, %xmm9, %eax
2545; SSE42-NEXT:    andb $1, %al
2546; SSE42-NEXT:    movb %al, 2(%rdi)
2547; SSE42-NEXT:    pextrb $3, %xmm9, %eax
2548; SSE42-NEXT:    andb $1, %al
2549; SSE42-NEXT:    movb %al, 2(%rdi)
2550; SSE42-NEXT:    pextrb $2, %xmm9, %eax
2551; SSE42-NEXT:    andb $1, %al
2552; SSE42-NEXT:    movb %al, 2(%rdi)
2553; SSE42-NEXT:    pextrb $1, %xmm9, %eax
2554; SSE42-NEXT:    andb $1, %al
2555; SSE42-NEXT:    movb %al, 2(%rdi)
2556; SSE42-NEXT:    pextrb $0, %xmm9, %eax
2557; SSE42-NEXT:    andb $1, %al
2558; SSE42-NEXT:    movb %al, 2(%rdi)
2559; SSE42-NEXT:    pextrb $15, %xmm8, %eax
2560; SSE42-NEXT:    andb $1, %al
2561; SSE42-NEXT:    movb %al, (%rdi)
2562; SSE42-NEXT:    pextrb $14, %xmm8, %eax
2563; SSE42-NEXT:    andb $1, %al
2564; SSE42-NEXT:    movb %al, (%rdi)
2565; SSE42-NEXT:    pextrb $13, %xmm8, %eax
2566; SSE42-NEXT:    andb $1, %al
2567; SSE42-NEXT:    movb %al, (%rdi)
2568; SSE42-NEXT:    pextrb $12, %xmm8, %eax
2569; SSE42-NEXT:    andb $1, %al
2570; SSE42-NEXT:    movb %al, (%rdi)
2571; SSE42-NEXT:    pextrb $11, %xmm8, %eax
2572; SSE42-NEXT:    andb $1, %al
2573; SSE42-NEXT:    movb %al, (%rdi)
2574; SSE42-NEXT:    pextrb $10, %xmm8, %eax
2575; SSE42-NEXT:    andb $1, %al
2576; SSE42-NEXT:    movb %al, (%rdi)
2577; SSE42-NEXT:    pextrb $9, %xmm8, %eax
2578; SSE42-NEXT:    andb $1, %al
2579; SSE42-NEXT:    movb %al, (%rdi)
2580; SSE42-NEXT:    pextrb $8, %xmm8, %eax
2581; SSE42-NEXT:    andb $1, %al
2582; SSE42-NEXT:    movb %al, (%rdi)
2583; SSE42-NEXT:    pextrb $7, %xmm8, %eax
2584; SSE42-NEXT:    andb $1, %al
2585; SSE42-NEXT:    movb %al, (%rdi)
2586; SSE42-NEXT:    pextrb $6, %xmm8, %eax
2587; SSE42-NEXT:    andb $1, %al
2588; SSE42-NEXT:    movb %al, (%rdi)
2589; SSE42-NEXT:    pextrb $5, %xmm8, %eax
2590; SSE42-NEXT:    andb $1, %al
2591; SSE42-NEXT:    movb %al, (%rdi)
2592; SSE42-NEXT:    pextrb $4, %xmm8, %eax
2593; SSE42-NEXT:    andb $1, %al
2594; SSE42-NEXT:    movb %al, (%rdi)
2595; SSE42-NEXT:    pextrb $3, %xmm8, %eax
2596; SSE42-NEXT:    andb $1, %al
2597; SSE42-NEXT:    movb %al, (%rdi)
2598; SSE42-NEXT:    pextrb $2, %xmm8, %eax
2599; SSE42-NEXT:    andb $1, %al
2600; SSE42-NEXT:    movb %al, (%rdi)
2601; SSE42-NEXT:    pextrb $1, %xmm8, %eax
2602; SSE42-NEXT:    andb $1, %al
2603; SSE42-NEXT:    movb %al, (%rdi)
2604; SSE42-NEXT:    pextrb $0, %xmm8, %eax
2605; SSE42-NEXT:    andb $1, %al
2606; SSE42-NEXT:    movb %al, (%rdi)
2607; SSE42-NEXT:    movq %rdi, %rax
2608; SSE42-NEXT:    retq
2609;
2610; AVX1-LABEL: test_cmp_v32f32:
2611; AVX1:       # BB#0:
2612; AVX1-NEXT:    vcmpltps %ymm3, %ymm7, %ymm3
2613; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm8
2614; AVX1-NEXT:    vmovaps {{.*#+}} xmm7 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
2615; AVX1-NEXT:    vandps %xmm7, %xmm8, %xmm8
2616; AVX1-NEXT:    vandps %xmm7, %xmm3, %xmm3
2617; AVX1-NEXT:    vpackuswb %xmm8, %xmm3, %xmm3
2618; AVX1-NEXT:    vcmpltps %ymm2, %ymm6, %ymm2
2619; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
2620; AVX1-NEXT:    vandps %xmm7, %xmm6, %xmm6
2621; AVX1-NEXT:    vandps %xmm7, %xmm2, %xmm2
2622; AVX1-NEXT:    vpackuswb %xmm6, %xmm2, %xmm2
2623; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
2624; AVX1-NEXT:    vcmpltps %ymm1, %ymm5, %ymm1
2625; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
2626; AVX1-NEXT:    vandps %xmm7, %xmm3, %xmm3
2627; AVX1-NEXT:    vandps %xmm7, %xmm1, %xmm1
2628; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
2629; AVX1-NEXT:    vcmpltps %ymm0, %ymm4, %ymm0
2630; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2631; AVX1-NEXT:    vandps %xmm7, %xmm3, %xmm3
2632; AVX1-NEXT:    vandps %xmm7, %xmm0, %xmm0
2633; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
2634; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
2635; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2636; AVX1-NEXT:    retq
2637;
2638; AVX2-LABEL: test_cmp_v32f32:
2639; AVX2:       # BB#0:
2640; AVX2-NEXT:    vcmpltps %ymm3, %ymm7, %ymm3
2641; AVX2-NEXT:    vmovdqa {{.*#+}} ymm8 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
2642; AVX2-NEXT:    vpshufb %ymm8, %ymm3, %ymm3
2643; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,2,2,3]
2644; AVX2-NEXT:    vmovdqa {{.*#+}} xmm7 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2645; AVX2-NEXT:    vpshufb %xmm7, %xmm3, %xmm3
2646; AVX2-NEXT:    vcmpltps %ymm2, %ymm6, %ymm2
2647; AVX2-NEXT:    vpshufb %ymm8, %ymm2, %ymm2
2648; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
2649; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2
2650; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
2651; AVX2-NEXT:    vcmpltps %ymm1, %ymm5, %ymm1
2652; AVX2-NEXT:    vpshufb %ymm8, %ymm1, %ymm1
2653; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
2654; AVX2-NEXT:    vpshufb %xmm7, %xmm1, %xmm1
2655; AVX2-NEXT:    vcmpltps %ymm0, %ymm4, %ymm0
2656; AVX2-NEXT:    vpshufb %ymm8, %ymm0, %ymm0
2657; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
2658; AVX2-NEXT:    vpshufb %xmm7, %xmm0, %xmm0
2659; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2660; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
2661; AVX2-NEXT:    retq
2662;
2663; AVX512-LABEL: test_cmp_v32f32:
2664; AVX512:       # BB#0:
2665; AVX512-NEXT:    vextractf32x4 $3, %zmm2, %xmm4
2666; AVX512-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
2667; AVX512-NEXT:    vextractf32x4 $3, %zmm0, %xmm6
2668; AVX512-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
2669; AVX512-NEXT:    xorl %eax, %eax
2670; AVX512-NEXT:    vucomiss %xmm5, %xmm7
2671; AVX512-NEXT:    movl $-1, %ecx
2672; AVX512-NEXT:    movl $0, %edx
2673; AVX512-NEXT:    cmoval %ecx, %edx
2674; AVX512-NEXT:    vucomiss %xmm4, %xmm6
2675; AVX512-NEXT:    movl $0, %esi
2676; AVX512-NEXT:    cmoval %ecx, %esi
2677; AVX512-NEXT:    vmovd %esi, %xmm5
2678; AVX512-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm8
2679; AVX512-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
2680; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm6[1,0]
2681; AVX512-NEXT:    vucomiss %xmm7, %xmm5
2682; AVX512-NEXT:    movl $0, %edx
2683; AVX512-NEXT:    cmoval %ecx, %edx
2684; AVX512-NEXT:    vpinsrd $2, %edx, %xmm8, %xmm5
2685; AVX512-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
2686; AVX512-NEXT:    vpermilps {{.*#+}} xmm6 = xmm6[3,1,2,3]
2687; AVX512-NEXT:    vucomiss %xmm4, %xmm6
2688; AVX512-NEXT:    movl $0, %edx
2689; AVX512-NEXT:    cmoval %ecx, %edx
2690; AVX512-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm8
2691; AVX512-NEXT:    vextractf32x4 $2, %zmm2, %xmm5
2692; AVX512-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2693; AVX512-NEXT:    vextractf32x4 $2, %zmm0, %xmm7
2694; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2695; AVX512-NEXT:    vucomiss %xmm6, %xmm4
2696; AVX512-NEXT:    movl $0, %edx
2697; AVX512-NEXT:    cmoval %ecx, %edx
2698; AVX512-NEXT:    vucomiss %xmm5, %xmm7
2699; AVX512-NEXT:    movl $0, %esi
2700; AVX512-NEXT:    cmoval %ecx, %esi
2701; AVX512-NEXT:    vmovd %esi, %xmm4
2702; AVX512-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
2703; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
2704; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
2705; AVX512-NEXT:    vucomiss %xmm6, %xmm4
2706; AVX512-NEXT:    movl $0, %edx
2707; AVX512-NEXT:    cmoval %ecx, %edx
2708; AVX512-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
2709; AVX512-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2710; AVX512-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
2711; AVX512-NEXT:    vucomiss %xmm5, %xmm6
2712; AVX512-NEXT:    movl $0, %edx
2713; AVX512-NEXT:    cmoval %ecx, %edx
2714; AVX512-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
2715; AVX512-NEXT:    vinserti128 $1, %xmm8, %ymm4, %ymm8
2716; AVX512-NEXT:    vextractf32x4 $1, %zmm2, %xmm5
2717; AVX512-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2718; AVX512-NEXT:    vextractf32x4 $1, %zmm0, %xmm7
2719; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm7[1,1,3,3]
2720; AVX512-NEXT:    vucomiss %xmm6, %xmm4
2721; AVX512-NEXT:    movl $0, %edx
2722; AVX512-NEXT:    cmoval %ecx, %edx
2723; AVX512-NEXT:    vucomiss %xmm5, %xmm7
2724; AVX512-NEXT:    movl $0, %esi
2725; AVX512-NEXT:    cmoval %ecx, %esi
2726; AVX512-NEXT:    vmovd %esi, %xmm4
2727; AVX512-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm9
2728; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm5[1,0]
2729; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm7[1,0]
2730; AVX512-NEXT:    vucomiss %xmm6, %xmm4
2731; AVX512-NEXT:    movl $0, %edx
2732; AVX512-NEXT:    cmoval %ecx, %edx
2733; AVX512-NEXT:    vpinsrd $2, %edx, %xmm9, %xmm4
2734; AVX512-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2735; AVX512-NEXT:    vpermilps {{.*#+}} xmm6 = xmm7[3,1,2,3]
2736; AVX512-NEXT:    vucomiss %xmm5, %xmm6
2737; AVX512-NEXT:    movl $0, %edx
2738; AVX512-NEXT:    cmoval %ecx, %edx
2739; AVX512-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm4
2740; AVX512-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]
2741; AVX512-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
2742; AVX512-NEXT:    vucomiss %xmm5, %xmm6
2743; AVX512-NEXT:    movl $0, %edx
2744; AVX512-NEXT:    cmoval %ecx, %edx
2745; AVX512-NEXT:    vucomiss %xmm2, %xmm0
2746; AVX512-NEXT:    movl $0, %esi
2747; AVX512-NEXT:    cmoval %ecx, %esi
2748; AVX512-NEXT:    vmovd %esi, %xmm5
2749; AVX512-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
2750; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
2751; AVX512-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm0[1,0]
2752; AVX512-NEXT:    vucomiss %xmm6, %xmm7
2753; AVX512-NEXT:    movl $0, %edx
2754; AVX512-NEXT:    cmoval %ecx, %edx
2755; AVX512-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
2756; AVX512-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
2757; AVX512-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2758; AVX512-NEXT:    vucomiss %xmm2, %xmm0
2759; AVX512-NEXT:    movl $0, %edx
2760; AVX512-NEXT:    cmoval %ecx, %edx
2761; AVX512-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm0
2762; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
2763; AVX512-NEXT:    vinserti64x4 $1, %ymm8, %zmm0, %zmm0
2764; AVX512-NEXT:    vpmovdb %zmm0, %xmm8
2765; AVX512-NEXT:    vextractf32x4 $3, %zmm3, %xmm2
2766; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]
2767; AVX512-NEXT:    vextractf32x4 $3, %zmm1, %xmm5
2768; AVX512-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2769; AVX512-NEXT:    vucomiss %xmm4, %xmm6
2770; AVX512-NEXT:    movl $0, %edx
2771; AVX512-NEXT:    cmoval %ecx, %edx
2772; AVX512-NEXT:    vucomiss %xmm2, %xmm5
2773; AVX512-NEXT:    movl $0, %esi
2774; AVX512-NEXT:    cmoval %ecx, %esi
2775; AVX512-NEXT:    vmovd %esi, %xmm4
2776; AVX512-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2777; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm2[1,0]
2778; AVX512-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
2779; AVX512-NEXT:    vucomiss %xmm6, %xmm7
2780; AVX512-NEXT:    movl $0, %edx
2781; AVX512-NEXT:    cmoval %ecx, %edx
2782; AVX512-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2783; AVX512-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
2784; AVX512-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2785; AVX512-NEXT:    vucomiss %xmm2, %xmm5
2786; AVX512-NEXT:    movl $0, %edx
2787; AVX512-NEXT:    cmoval %ecx, %edx
2788; AVX512-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm2
2789; AVX512-NEXT:    vextractf32x4 $2, %zmm3, %xmm4
2790; AVX512-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
2791; AVX512-NEXT:    vextractf32x4 $2, %zmm1, %xmm6
2792; AVX512-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm6[1,1,3,3]
2793; AVX512-NEXT:    vucomiss %xmm5, %xmm7
2794; AVX512-NEXT:    movl $0, %edx
2795; AVX512-NEXT:    cmoval %ecx, %edx
2796; AVX512-NEXT:    vucomiss %xmm4, %xmm6
2797; AVX512-NEXT:    movl $0, %esi
2798; AVX512-NEXT:    cmoval %ecx, %esi
2799; AVX512-NEXT:    vmovd %esi, %xmm5
2800; AVX512-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
2801; AVX512-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm4[1,0]
2802; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm6[1,0]
2803; AVX512-NEXT:    vucomiss %xmm7, %xmm0
2804; AVX512-NEXT:    movl $0, %edx
2805; AVX512-NEXT:    cmoval %ecx, %edx
2806; AVX512-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm0
2807; AVX512-NEXT:    vpermilps {{.*#+}} xmm4 = xmm4[3,1,2,3]
2808; AVX512-NEXT:    vpermilps {{.*#+}} xmm5 = xmm6[3,1,2,3]
2809; AVX512-NEXT:    vucomiss %xmm4, %xmm5
2810; AVX512-NEXT:    movl $0, %edx
2811; AVX512-NEXT:    cmoval %ecx, %edx
2812; AVX512-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm0
2813; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2814; AVX512-NEXT:    vextractf32x4 $1, %zmm3, %xmm0
2815; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
2816; AVX512-NEXT:    vextractf32x4 $1, %zmm1, %xmm5
2817; AVX512-NEXT:    vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
2818; AVX512-NEXT:    vucomiss %xmm4, %xmm6
2819; AVX512-NEXT:    movl $0, %edx
2820; AVX512-NEXT:    cmoval %ecx, %edx
2821; AVX512-NEXT:    vucomiss %xmm0, %xmm5
2822; AVX512-NEXT:    movl $0, %esi
2823; AVX512-NEXT:    cmoval %ecx, %esi
2824; AVX512-NEXT:    vmovd %esi, %xmm4
2825; AVX512-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2826; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm0[1,0]
2827; AVX512-NEXT:    vpermilpd {{.*#+}} xmm7 = xmm5[1,0]
2828; AVX512-NEXT:    vucomiss %xmm6, %xmm7
2829; AVX512-NEXT:    movl $0, %edx
2830; AVX512-NEXT:    cmoval %ecx, %edx
2831; AVX512-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2832; AVX512-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2833; AVX512-NEXT:    vpermilps {{.*#+}} xmm5 = xmm5[3,1,2,3]
2834; AVX512-NEXT:    vucomiss %xmm0, %xmm5
2835; AVX512-NEXT:    movl $0, %edx
2836; AVX512-NEXT:    cmoval %ecx, %edx
2837; AVX512-NEXT:    vpinsrd $3, %edx, %xmm4, %xmm0
2838; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
2839; AVX512-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]
2840; AVX512-NEXT:    vucomiss %xmm4, %xmm5
2841; AVX512-NEXT:    movl $0, %edx
2842; AVX512-NEXT:    cmoval %ecx, %edx
2843; AVX512-NEXT:    vucomiss %xmm3, %xmm1
2844; AVX512-NEXT:    movl $0, %esi
2845; AVX512-NEXT:    cmoval %ecx, %esi
2846; AVX512-NEXT:    vmovd %esi, %xmm4
2847; AVX512-NEXT:    vpinsrd $1, %edx, %xmm4, %xmm4
2848; AVX512-NEXT:    vpermilpd {{.*#+}} xmm5 = xmm3[1,0]
2849; AVX512-NEXT:    vpermilpd {{.*#+}} xmm6 = xmm1[1,0]
2850; AVX512-NEXT:    vucomiss %xmm5, %xmm6
2851; AVX512-NEXT:    movl $0, %edx
2852; AVX512-NEXT:    cmoval %ecx, %edx
2853; AVX512-NEXT:    vpinsrd $2, %edx, %xmm4, %xmm4
2854; AVX512-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[3,1,2,3]
2855; AVX512-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
2856; AVX512-NEXT:    vucomiss %xmm3, %xmm1
2857; AVX512-NEXT:    cmoval %ecx, %eax
2858; AVX512-NEXT:    vpinsrd $3, %eax, %xmm4, %xmm1
2859; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
2860; AVX512-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
2861; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
2862; AVX512-NEXT:    vinsertf128 $1, %xmm0, %ymm8, %ymm0
2863; AVX512-NEXT:    retq
2864  %1 = fcmp ogt <32 x float> %a0, %a1
2865  ret <32 x i1> %1
2866}
2867
2868define <16 x i1> @test_cmp_v16i64(<16 x i64> %a0, <16 x i64> %a1) nounwind {
2869; SSE2-LABEL: test_cmp_v16i64:
2870; SSE2:       # BB#0:
2871; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
2872; SSE2-NEXT:    pxor %xmm8, %xmm7
2873; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
2874; SSE2-NEXT:    pxor %xmm8, %xmm9
2875; SSE2-NEXT:    movdqa %xmm7, %xmm10
2876; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
2877; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
2878; SSE2-NEXT:    pcmpeqd %xmm7, %xmm9
2879; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
2880; SSE2-NEXT:    pand %xmm11, %xmm7
2881; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
2882; SSE2-NEXT:    por %xmm7, %xmm9
2883; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2884; SSE2-NEXT:    pand %xmm10, %xmm9
2885; SSE2-NEXT:    pxor %xmm8, %xmm6
2886; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
2887; SSE2-NEXT:    pxor %xmm8, %xmm7
2888; SSE2-NEXT:    movdqa %xmm6, %xmm11
2889; SSE2-NEXT:    pcmpgtd %xmm7, %xmm11
2890; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
2891; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
2892; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
2893; SSE2-NEXT:    pand %xmm12, %xmm7
2894; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
2895; SSE2-NEXT:    por %xmm7, %xmm11
2896; SSE2-NEXT:    pand %xmm10, %xmm11
2897; SSE2-NEXT:    packuswb %xmm9, %xmm11
2898; SSE2-NEXT:    pxor %xmm8, %xmm5
2899; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
2900; SSE2-NEXT:    pxor %xmm8, %xmm7
2901; SSE2-NEXT:    movdqa %xmm5, %xmm6
2902; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
2903; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2]
2904; SSE2-NEXT:    pcmpeqd %xmm5, %xmm7
2905; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
2906; SSE2-NEXT:    pand %xmm9, %xmm5
2907; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2908; SSE2-NEXT:    por %xmm5, %xmm6
2909; SSE2-NEXT:    pand %xmm10, %xmm6
2910; SSE2-NEXT:    pxor %xmm8, %xmm4
2911; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
2912; SSE2-NEXT:    pxor %xmm8, %xmm5
2913; SSE2-NEXT:    movdqa %xmm4, %xmm7
2914; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
2915; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,0,2,2]
2916; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
2917; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2918; SSE2-NEXT:    pand %xmm9, %xmm5
2919; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
2920; SSE2-NEXT:    por %xmm5, %xmm4
2921; SSE2-NEXT:    pand %xmm10, %xmm4
2922; SSE2-NEXT:    packuswb %xmm6, %xmm4
2923; SSE2-NEXT:    packuswb %xmm11, %xmm4
2924; SSE2-NEXT:    pxor %xmm8, %xmm3
2925; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
2926; SSE2-NEXT:    pxor %xmm8, %xmm5
2927; SSE2-NEXT:    movdqa %xmm3, %xmm6
2928; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2929; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2930; SSE2-NEXT:    pcmpeqd %xmm3, %xmm5
2931; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
2932; SSE2-NEXT:    pand %xmm7, %xmm3
2933; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
2934; SSE2-NEXT:    por %xmm3, %xmm5
2935; SSE2-NEXT:    pand %xmm10, %xmm5
2936; SSE2-NEXT:    pxor %xmm8, %xmm2
2937; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
2938; SSE2-NEXT:    pxor %xmm8, %xmm3
2939; SSE2-NEXT:    movdqa %xmm2, %xmm6
2940; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
2941; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2942; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
2943; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2944; SSE2-NEXT:    pand %xmm7, %xmm3
2945; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
2946; SSE2-NEXT:    por %xmm3, %xmm2
2947; SSE2-NEXT:    pand %xmm10, %xmm2
2948; SSE2-NEXT:    packuswb %xmm5, %xmm2
2949; SSE2-NEXT:    pxor %xmm8, %xmm1
2950; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
2951; SSE2-NEXT:    pxor %xmm8, %xmm3
2952; SSE2-NEXT:    movdqa %xmm1, %xmm5
2953; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
2954; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
2955; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
2956; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
2957; SSE2-NEXT:    pand %xmm6, %xmm1
2958; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
2959; SSE2-NEXT:    por %xmm1, %xmm3
2960; SSE2-NEXT:    pand %xmm10, %xmm3
2961; SSE2-NEXT:    pxor %xmm8, %xmm0
2962; SSE2-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm8
2963; SSE2-NEXT:    movdqa %xmm0, %xmm1
2964; SSE2-NEXT:    pcmpgtd %xmm8, %xmm1
2965; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
2966; SSE2-NEXT:    pcmpeqd %xmm0, %xmm8
2967; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[1,1,3,3]
2968; SSE2-NEXT:    pand %xmm5, %xmm6
2969; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
2970; SSE2-NEXT:    por %xmm6, %xmm0
2971; SSE2-NEXT:    pand %xmm10, %xmm0
2972; SSE2-NEXT:    packuswb %xmm3, %xmm0
2973; SSE2-NEXT:    packuswb %xmm2, %xmm0
2974; SSE2-NEXT:    packuswb %xmm4, %xmm0
2975; SSE2-NEXT:    retq
2976;
2977; SSE42-LABEL: test_cmp_v16i64:
2978; SSE42:       # BB#0:
2979; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm7
2980; SSE42-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2981; SSE42-NEXT:    pand %xmm8, %xmm7
2982; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm6
2983; SSE42-NEXT:    pand %xmm8, %xmm6
2984; SSE42-NEXT:    packuswb %xmm7, %xmm6
2985; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm5
2986; SSE42-NEXT:    pand %xmm8, %xmm5
2987; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm4
2988; SSE42-NEXT:    pand %xmm8, %xmm4
2989; SSE42-NEXT:    packuswb %xmm5, %xmm4
2990; SSE42-NEXT:    packuswb %xmm6, %xmm4
2991; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm3
2992; SSE42-NEXT:    pand %xmm8, %xmm3
2993; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm2
2994; SSE42-NEXT:    pand %xmm8, %xmm2
2995; SSE42-NEXT:    packuswb %xmm3, %xmm2
2996; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
2997; SSE42-NEXT:    pand %xmm8, %xmm1
2998; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm0
2999; SSE42-NEXT:    pand %xmm8, %xmm0
3000; SSE42-NEXT:    packuswb %xmm1, %xmm0
3001; SSE42-NEXT:    packuswb %xmm2, %xmm0
3002; SSE42-NEXT:    packuswb %xmm4, %xmm0
3003; SSE42-NEXT:    retq
3004;
3005; AVX1-LABEL: test_cmp_v16i64:
3006; AVX1:       # BB#0:
3007; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm8
3008; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm9
3009; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm9, %xmm9
3010; AVX1-NEXT:    vmovdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
3011; AVX1-NEXT:    vpand %xmm8, %xmm9, %xmm9
3012; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm3, %xmm3
3013; AVX1-NEXT:    vpand %xmm8, %xmm3, %xmm3
3014; AVX1-NEXT:    vpackuswb %xmm9, %xmm3, %xmm9
3015; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
3016; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
3017; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm3, %xmm3
3018; AVX1-NEXT:    vpand %xmm8, %xmm3, %xmm3
3019; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm2, %xmm2
3020; AVX1-NEXT:    vpand %xmm8, %xmm2, %xmm2
3021; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
3022; AVX1-NEXT:    vpackuswb %xmm9, %xmm2, %xmm2
3023; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
3024; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
3025; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm3
3026; AVX1-NEXT:    vpand %xmm8, %xmm3, %xmm3
3027; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm1, %xmm1
3028; AVX1-NEXT:    vpand %xmm8, %xmm1, %xmm1
3029; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
3030; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm3
3031; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3032; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3
3033; AVX1-NEXT:    vpand %xmm8, %xmm3, %xmm3
3034; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm0
3035; AVX1-NEXT:    vpand %xmm8, %xmm0, %xmm0
3036; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
3037; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3038; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
3039; AVX1-NEXT:    vzeroupper
3040; AVX1-NEXT:    retq
3041;
3042; AVX2-LABEL: test_cmp_v16i64:
3043; AVX2:       # BB#0:
3044; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm2, %ymm2
3045; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
3046; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
3047; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm3, %ymm3
3048; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
3049; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
3050; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
3051; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
3052; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
3053; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
3054; AVX2-NEXT:    vmovdqa {{.*#+}} xmm6 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3055; AVX2-NEXT:    vpshufb %xmm6, %xmm2, %xmm2
3056; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm0
3057; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
3058; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
3059; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm1, %ymm1
3060; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
3061; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
3062; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3063; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
3064; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3065; AVX2-NEXT:    vpshufb %xmm6, %xmm0, %xmm0
3066; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
3067; AVX2-NEXT:    vzeroupper
3068; AVX2-NEXT:    retq
3069;
3070; AVX512-LABEL: test_cmp_v16i64:
3071; AVX512:       # BB#0:
3072; AVX512-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
3073; AVX512-NEXT:    vpextrq $1, %xmm4, %rcx
3074; AVX512-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
3075; AVX512-NEXT:    vpextrq $1, %xmm5, %rdx
3076; AVX512-NEXT:    xorl %eax, %eax
3077; AVX512-NEXT:    cmpq %rcx, %rdx
3078; AVX512-NEXT:    movq $-1, %rcx
3079; AVX512-NEXT:    movl $0, %edx
3080; AVX512-NEXT:    cmovgq %rcx, %rdx
3081; AVX512-NEXT:    vmovq %rdx, %xmm6
3082; AVX512-NEXT:    vmovq %xmm4, %rdx
3083; AVX512-NEXT:    vmovq %xmm5, %rsi
3084; AVX512-NEXT:    cmpq %rdx, %rsi
3085; AVX512-NEXT:    movl $0, %edx
3086; AVX512-NEXT:    cmovgq %rcx, %rdx
3087; AVX512-NEXT:    vmovq %rdx, %xmm4
3088; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3089; AVX512-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
3090; AVX512-NEXT:    vpextrq $1, %xmm5, %rdx
3091; AVX512-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
3092; AVX512-NEXT:    vpextrq $1, %xmm6, %rsi
3093; AVX512-NEXT:    cmpq %rdx, %rsi
3094; AVX512-NEXT:    movl $0, %edx
3095; AVX512-NEXT:    cmovgq %rcx, %rdx
3096; AVX512-NEXT:    vmovq %rdx, %xmm7
3097; AVX512-NEXT:    vmovq %xmm5, %rdx
3098; AVX512-NEXT:    vmovq %xmm6, %rsi
3099; AVX512-NEXT:    cmpq %rdx, %rsi
3100; AVX512-NEXT:    movl $0, %edx
3101; AVX512-NEXT:    cmovgq %rcx, %rdx
3102; AVX512-NEXT:    vmovq %rdx, %xmm5
3103; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3104; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
3105; AVX512-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
3106; AVX512-NEXT:    vpextrq $1, %xmm5, %rdx
3107; AVX512-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
3108; AVX512-NEXT:    vpextrq $1, %xmm6, %rsi
3109; AVX512-NEXT:    cmpq %rdx, %rsi
3110; AVX512-NEXT:    movl $0, %edx
3111; AVX512-NEXT:    cmovgq %rcx, %rdx
3112; AVX512-NEXT:    vmovq %rdx, %xmm7
3113; AVX512-NEXT:    vmovq %xmm5, %rdx
3114; AVX512-NEXT:    vmovq %xmm6, %rsi
3115; AVX512-NEXT:    cmpq %rdx, %rsi
3116; AVX512-NEXT:    movl $0, %edx
3117; AVX512-NEXT:    cmovgq %rcx, %rdx
3118; AVX512-NEXT:    vmovq %rdx, %xmm5
3119; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm7[0]
3120; AVX512-NEXT:    vpextrq $1, %xmm2, %rdx
3121; AVX512-NEXT:    vpextrq $1, %xmm0, %rsi
3122; AVX512-NEXT:    cmpq %rdx, %rsi
3123; AVX512-NEXT:    movl $0, %edx
3124; AVX512-NEXT:    cmovgq %rcx, %rdx
3125; AVX512-NEXT:    vmovq %rdx, %xmm6
3126; AVX512-NEXT:    vmovq %xmm2, %rdx
3127; AVX512-NEXT:    vmovq %xmm0, %rsi
3128; AVX512-NEXT:    cmpq %rdx, %rsi
3129; AVX512-NEXT:    movl $0, %edx
3130; AVX512-NEXT:    cmovgq %rcx, %rdx
3131; AVX512-NEXT:    vmovq %rdx, %xmm0
3132; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]
3133; AVX512-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
3134; AVX512-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
3135; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
3136; AVX512-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
3137; AVX512-NEXT:    vpextrq $1, %xmm2, %rdx
3138; AVX512-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
3139; AVX512-NEXT:    vpextrq $1, %xmm4, %rsi
3140; AVX512-NEXT:    cmpq %rdx, %rsi
3141; AVX512-NEXT:    movl $0, %edx
3142; AVX512-NEXT:    cmovgq %rcx, %rdx
3143; AVX512-NEXT:    vmovq %rdx, %xmm5
3144; AVX512-NEXT:    vmovq %xmm2, %rdx
3145; AVX512-NEXT:    vmovq %xmm4, %rsi
3146; AVX512-NEXT:    cmpq %rdx, %rsi
3147; AVX512-NEXT:    movl $0, %edx
3148; AVX512-NEXT:    cmovgq %rcx, %rdx
3149; AVX512-NEXT:    vmovq %rdx, %xmm2
3150; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
3151; AVX512-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
3152; AVX512-NEXT:    vpextrq $1, %xmm4, %rdx
3153; AVX512-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
3154; AVX512-NEXT:    vpextrq $1, %xmm5, %rsi
3155; AVX512-NEXT:    cmpq %rdx, %rsi
3156; AVX512-NEXT:    movl $0, %edx
3157; AVX512-NEXT:    cmovgq %rcx, %rdx
3158; AVX512-NEXT:    vmovq %rdx, %xmm6
3159; AVX512-NEXT:    vmovq %xmm4, %rdx
3160; AVX512-NEXT:    vmovq %xmm5, %rsi
3161; AVX512-NEXT:    cmpq %rdx, %rsi
3162; AVX512-NEXT:    movl $0, %edx
3163; AVX512-NEXT:    cmovgq %rcx, %rdx
3164; AVX512-NEXT:    vmovq %rdx, %xmm4
3165; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3166; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
3167; AVX512-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
3168; AVX512-NEXT:    vpextrq $1, %xmm4, %rdx
3169; AVX512-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
3170; AVX512-NEXT:    vpextrq $1, %xmm5, %rsi
3171; AVX512-NEXT:    cmpq %rdx, %rsi
3172; AVX512-NEXT:    movl $0, %edx
3173; AVX512-NEXT:    cmovgq %rcx, %rdx
3174; AVX512-NEXT:    vmovq %rdx, %xmm6
3175; AVX512-NEXT:    vmovq %xmm4, %rdx
3176; AVX512-NEXT:    vmovq %xmm5, %rsi
3177; AVX512-NEXT:    cmpq %rdx, %rsi
3178; AVX512-NEXT:    movl $0, %edx
3179; AVX512-NEXT:    cmovgq %rcx, %rdx
3180; AVX512-NEXT:    vmovq %rdx, %xmm4
3181; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3182; AVX512-NEXT:    vpextrq $1, %xmm3, %rdx
3183; AVX512-NEXT:    vpextrq $1, %xmm1, %rsi
3184; AVX512-NEXT:    cmpq %rdx, %rsi
3185; AVX512-NEXT:    movl $0, %edx
3186; AVX512-NEXT:    cmovgq %rcx, %rdx
3187; AVX512-NEXT:    vmovq %rdx, %xmm5
3188; AVX512-NEXT:    vmovq %xmm3, %rdx
3189; AVX512-NEXT:    vmovq %xmm1, %rsi
3190; AVX512-NEXT:    cmpq %rdx, %rsi
3191; AVX512-NEXT:    cmovgq %rcx, %rax
3192; AVX512-NEXT:    vmovq %rax, %xmm1
3193; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
3194; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
3195; AVX512-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
3196; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
3197; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3198; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
3199; AVX512-NEXT:    retq
3200  %1 = icmp sgt <16 x i64> %a0, %a1
3201  ret <16 x i1> %1
3202}
3203
3204define <32 x i1> @test_cmp_v32i32(<32 x i32> %a0, <32 x i32> %a1) nounwind {
3205; SSE2-LABEL: test_cmp_v32i32:
3206; SSE2:       # BB#0:
3207; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
3208; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
3209; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
3210; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
3211; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
3212; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
3213; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
3214; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
3215; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
3216; SSE2-NEXT:    psllw $15, %xmm2
3217; SSE2-NEXT:    psraw $15, %xmm2
3218; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
3219; SSE2-NEXT:    pand %xmm3, %xmm2
3220; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
3221; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
3222; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
3223; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3224; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
3225; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
3226; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
3227; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
3228; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3229; SSE2-NEXT:    psllw $15, %xmm0
3230; SSE2-NEXT:    psraw $15, %xmm0
3231; SSE2-NEXT:    pand %xmm3, %xmm0
3232; SSE2-NEXT:    packuswb %xmm2, %xmm0
3233; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
3234; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm7[0,2,2,3,4,5,6,7]
3235; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
3236; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3237; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
3238; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm6[0,2,2,3,4,5,6,7]
3239; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
3240; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
3241; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
3242; SSE2-NEXT:    psllw $15, %xmm2
3243; SSE2-NEXT:    psraw $15, %xmm2
3244; SSE2-NEXT:    pand %xmm3, %xmm2
3245; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
3246; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm5[0,2,2,3,4,5,6,7]
3247; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
3248; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3249; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
3250; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,2,2,3,4,5,6,7]
3251; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
3252; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
3253; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm1[0]
3254; SSE2-NEXT:    psllw $15, %xmm4
3255; SSE2-NEXT:    psraw $15, %xmm4
3256; SSE2-NEXT:    pand %xmm3, %xmm4
3257; SSE2-NEXT:    packuswb %xmm2, %xmm4
3258; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
3259; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3260; SSE2-NEXT:    andb $1, %al
3261; SSE2-NEXT:    movb %al, 2(%rdi)
3262; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
3263; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3264; SSE2-NEXT:    andb $1, %al
3265; SSE2-NEXT:    movb %al, (%rdi)
3266; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3267; SSE2-NEXT:    andb $1, %al
3268; SSE2-NEXT:    movb %al, 2(%rdi)
3269; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3270; SSE2-NEXT:    andb $1, %al
3271; SSE2-NEXT:    movb %al, (%rdi)
3272; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3273; SSE2-NEXT:    andb $1, %al
3274; SSE2-NEXT:    movb %al, 2(%rdi)
3275; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3276; SSE2-NEXT:    andb $1, %al
3277; SSE2-NEXT:    movb %al, (%rdi)
3278; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3279; SSE2-NEXT:    andb $1, %al
3280; SSE2-NEXT:    movb %al, 2(%rdi)
3281; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3282; SSE2-NEXT:    andb $1, %al
3283; SSE2-NEXT:    movb %al, (%rdi)
3284; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3285; SSE2-NEXT:    andb $1, %al
3286; SSE2-NEXT:    movb %al, 2(%rdi)
3287; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3288; SSE2-NEXT:    andb $1, %al
3289; SSE2-NEXT:    movb %al, (%rdi)
3290; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3291; SSE2-NEXT:    andb $1, %al
3292; SSE2-NEXT:    movb %al, 2(%rdi)
3293; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3294; SSE2-NEXT:    andb $1, %al
3295; SSE2-NEXT:    movb %al, (%rdi)
3296; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3297; SSE2-NEXT:    andb $1, %al
3298; SSE2-NEXT:    movb %al, 2(%rdi)
3299; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3300; SSE2-NEXT:    andb $1, %al
3301; SSE2-NEXT:    movb %al, (%rdi)
3302; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3303; SSE2-NEXT:    andb $1, %al
3304; SSE2-NEXT:    movb %al, 2(%rdi)
3305; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3306; SSE2-NEXT:    andb $1, %al
3307; SSE2-NEXT:    movb %al, (%rdi)
3308; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3309; SSE2-NEXT:    andb $1, %al
3310; SSE2-NEXT:    movb %al, 2(%rdi)
3311; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3312; SSE2-NEXT:    andb $1, %al
3313; SSE2-NEXT:    movb %al, (%rdi)
3314; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3315; SSE2-NEXT:    andb $1, %al
3316; SSE2-NEXT:    movb %al, 2(%rdi)
3317; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3318; SSE2-NEXT:    andb $1, %al
3319; SSE2-NEXT:    movb %al, (%rdi)
3320; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3321; SSE2-NEXT:    andb $1, %al
3322; SSE2-NEXT:    movb %al, 2(%rdi)
3323; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3324; SSE2-NEXT:    andb $1, %al
3325; SSE2-NEXT:    movb %al, (%rdi)
3326; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3327; SSE2-NEXT:    andb $1, %al
3328; SSE2-NEXT:    movb %al, 2(%rdi)
3329; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3330; SSE2-NEXT:    andb $1, %al
3331; SSE2-NEXT:    movb %al, (%rdi)
3332; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3333; SSE2-NEXT:    andb $1, %al
3334; SSE2-NEXT:    movb %al, 2(%rdi)
3335; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3336; SSE2-NEXT:    andb $1, %al
3337; SSE2-NEXT:    movb %al, (%rdi)
3338; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3339; SSE2-NEXT:    andb $1, %al
3340; SSE2-NEXT:    movb %al, 2(%rdi)
3341; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3342; SSE2-NEXT:    andb $1, %al
3343; SSE2-NEXT:    movb %al, (%rdi)
3344; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3345; SSE2-NEXT:    andb $1, %al
3346; SSE2-NEXT:    movb %al, 2(%rdi)
3347; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3348; SSE2-NEXT:    andb $1, %al
3349; SSE2-NEXT:    movb %al, (%rdi)
3350; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3351; SSE2-NEXT:    andb $1, %al
3352; SSE2-NEXT:    movb %al, 2(%rdi)
3353; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3354; SSE2-NEXT:    andb $1, %al
3355; SSE2-NEXT:    movb %al, (%rdi)
3356; SSE2-NEXT:    movq %rdi, %rax
3357; SSE2-NEXT:    retq
3358;
3359; SSE42-LABEL: test_cmp_v32i32:
3360; SSE42:       # BB#0:
3361; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
3362; SSE42-NEXT:    movdqa {{.*#+}} xmm8 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
3363; SSE42-NEXT:    pshufb %xmm8, %xmm3
3364; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
3365; SSE42-NEXT:    pshufb %xmm8, %xmm2
3366; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
3367; SSE42-NEXT:    psllw $15, %xmm2
3368; SSE42-NEXT:    psraw $15, %xmm2
3369; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3370; SSE42-NEXT:    pshufb %xmm3, %xmm2
3371; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
3372; SSE42-NEXT:    pshufb %xmm8, %xmm1
3373; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
3374; SSE42-NEXT:    pshufb %xmm8, %xmm0
3375; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3376; SSE42-NEXT:    psllw $15, %xmm0
3377; SSE42-NEXT:    psraw $15, %xmm0
3378; SSE42-NEXT:    pshufb %xmm3, %xmm0
3379; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
3380; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
3381; SSE42-NEXT:    pshufb %xmm8, %xmm7
3382; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
3383; SSE42-NEXT:    pshufb %xmm8, %xmm6
3384; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]
3385; SSE42-NEXT:    psllw $15, %xmm6
3386; SSE42-NEXT:    psraw $15, %xmm6
3387; SSE42-NEXT:    pshufb %xmm3, %xmm6
3388; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
3389; SSE42-NEXT:    pshufb %xmm8, %xmm5
3390; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
3391; SSE42-NEXT:    pshufb %xmm8, %xmm4
3392; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
3393; SSE42-NEXT:    psllw $15, %xmm4
3394; SSE42-NEXT:    psraw $15, %xmm4
3395; SSE42-NEXT:    pshufb %xmm3, %xmm4
3396; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
3397; SSE42-NEXT:    pextrb $15, %xmm4, %eax
3398; SSE42-NEXT:    andb $1, %al
3399; SSE42-NEXT:    movb %al, 2(%rdi)
3400; SSE42-NEXT:    pextrb $14, %xmm4, %eax
3401; SSE42-NEXT:    andb $1, %al
3402; SSE42-NEXT:    movb %al, 2(%rdi)
3403; SSE42-NEXT:    pextrb $13, %xmm4, %eax
3404; SSE42-NEXT:    andb $1, %al
3405; SSE42-NEXT:    movb %al, 2(%rdi)
3406; SSE42-NEXT:    pextrb $12, %xmm4, %eax
3407; SSE42-NEXT:    andb $1, %al
3408; SSE42-NEXT:    movb %al, 2(%rdi)
3409; SSE42-NEXT:    pextrb $11, %xmm4, %eax
3410; SSE42-NEXT:    andb $1, %al
3411; SSE42-NEXT:    movb %al, 2(%rdi)
3412; SSE42-NEXT:    pextrb $10, %xmm4, %eax
3413; SSE42-NEXT:    andb $1, %al
3414; SSE42-NEXT:    movb %al, 2(%rdi)
3415; SSE42-NEXT:    pextrb $9, %xmm4, %eax
3416; SSE42-NEXT:    andb $1, %al
3417; SSE42-NEXT:    movb %al, 2(%rdi)
3418; SSE42-NEXT:    pextrb $8, %xmm4, %eax
3419; SSE42-NEXT:    andb $1, %al
3420; SSE42-NEXT:    movb %al, 2(%rdi)
3421; SSE42-NEXT:    pextrb $7, %xmm4, %eax
3422; SSE42-NEXT:    andb $1, %al
3423; SSE42-NEXT:    movb %al, 2(%rdi)
3424; SSE42-NEXT:    pextrb $6, %xmm4, %eax
3425; SSE42-NEXT:    andb $1, %al
3426; SSE42-NEXT:    movb %al, 2(%rdi)
3427; SSE42-NEXT:    pextrb $5, %xmm4, %eax
3428; SSE42-NEXT:    andb $1, %al
3429; SSE42-NEXT:    movb %al, 2(%rdi)
3430; SSE42-NEXT:    pextrb $4, %xmm4, %eax
3431; SSE42-NEXT:    andb $1, %al
3432; SSE42-NEXT:    movb %al, 2(%rdi)
3433; SSE42-NEXT:    pextrb $3, %xmm4, %eax
3434; SSE42-NEXT:    andb $1, %al
3435; SSE42-NEXT:    movb %al, 2(%rdi)
3436; SSE42-NEXT:    pextrb $2, %xmm4, %eax
3437; SSE42-NEXT:    andb $1, %al
3438; SSE42-NEXT:    movb %al, 2(%rdi)
3439; SSE42-NEXT:    pextrb $1, %xmm4, %eax
3440; SSE42-NEXT:    andb $1, %al
3441; SSE42-NEXT:    movb %al, 2(%rdi)
3442; SSE42-NEXT:    pextrb $0, %xmm4, %eax
3443; SSE42-NEXT:    andb $1, %al
3444; SSE42-NEXT:    movb %al, 2(%rdi)
3445; SSE42-NEXT:    pextrb $15, %xmm0, %eax
3446; SSE42-NEXT:    andb $1, %al
3447; SSE42-NEXT:    movb %al, (%rdi)
3448; SSE42-NEXT:    pextrb $14, %xmm0, %eax
3449; SSE42-NEXT:    andb $1, %al
3450; SSE42-NEXT:    movb %al, (%rdi)
3451; SSE42-NEXT:    pextrb $13, %xmm0, %eax
3452; SSE42-NEXT:    andb $1, %al
3453; SSE42-NEXT:    movb %al, (%rdi)
3454; SSE42-NEXT:    pextrb $12, %xmm0, %eax
3455; SSE42-NEXT:    andb $1, %al
3456; SSE42-NEXT:    movb %al, (%rdi)
3457; SSE42-NEXT:    pextrb $11, %xmm0, %eax
3458; SSE42-NEXT:    andb $1, %al
3459; SSE42-NEXT:    movb %al, (%rdi)
3460; SSE42-NEXT:    pextrb $10, %xmm0, %eax
3461; SSE42-NEXT:    andb $1, %al
3462; SSE42-NEXT:    movb %al, (%rdi)
3463; SSE42-NEXT:    pextrb $9, %xmm0, %eax
3464; SSE42-NEXT:    andb $1, %al
3465; SSE42-NEXT:    movb %al, (%rdi)
3466; SSE42-NEXT:    pextrb $8, %xmm0, %eax
3467; SSE42-NEXT:    andb $1, %al
3468; SSE42-NEXT:    movb %al, (%rdi)
3469; SSE42-NEXT:    pextrb $7, %xmm0, %eax
3470; SSE42-NEXT:    andb $1, %al
3471; SSE42-NEXT:    movb %al, (%rdi)
3472; SSE42-NEXT:    pextrb $6, %xmm0, %eax
3473; SSE42-NEXT:    andb $1, %al
3474; SSE42-NEXT:    movb %al, (%rdi)
3475; SSE42-NEXT:    pextrb $5, %xmm0, %eax
3476; SSE42-NEXT:    andb $1, %al
3477; SSE42-NEXT:    movb %al, (%rdi)
3478; SSE42-NEXT:    pextrb $4, %xmm0, %eax
3479; SSE42-NEXT:    andb $1, %al
3480; SSE42-NEXT:    movb %al, (%rdi)
3481; SSE42-NEXT:    pextrb $3, %xmm0, %eax
3482; SSE42-NEXT:    andb $1, %al
3483; SSE42-NEXT:    movb %al, (%rdi)
3484; SSE42-NEXT:    pextrb $2, %xmm0, %eax
3485; SSE42-NEXT:    andb $1, %al
3486; SSE42-NEXT:    movb %al, (%rdi)
3487; SSE42-NEXT:    pextrb $1, %xmm0, %eax
3488; SSE42-NEXT:    andb $1, %al
3489; SSE42-NEXT:    movb %al, (%rdi)
3490; SSE42-NEXT:    pextrb $0, %xmm0, %eax
3491; SSE42-NEXT:    andb $1, %al
3492; SSE42-NEXT:    movb %al, (%rdi)
3493; SSE42-NEXT:    movq %rdi, %rax
3494; SSE42-NEXT:    retq
3495;
3496; AVX1-LABEL: test_cmp_v32i32:
3497; AVX1:       # BB#0:
3498; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm8
3499; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm9
3500; AVX1-NEXT:    vpcmpgtd %xmm8, %xmm9, %xmm9
3501; AVX1-NEXT:    vmovdqa {{.*#+}} xmm8 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
3502; AVX1-NEXT:    vpand %xmm8, %xmm9, %xmm9
3503; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm3, %xmm3
3504; AVX1-NEXT:    vpand %xmm8, %xmm3, %xmm3
3505; AVX1-NEXT:    vpackuswb %xmm9, %xmm3, %xmm9
3506; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm7
3507; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
3508; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm3, %xmm3
3509; AVX1-NEXT:    vpand %xmm8, %xmm3, %xmm3
3510; AVX1-NEXT:    vpcmpgtd %xmm6, %xmm2, %xmm2
3511; AVX1-NEXT:    vpand %xmm8, %xmm2, %xmm2
3512; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
3513; AVX1-NEXT:    vpackuswb %xmm9, %xmm2, %xmm2
3514; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm3
3515; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
3516; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm6, %xmm3
3517; AVX1-NEXT:    vpand %xmm8, %xmm3, %xmm3
3518; AVX1-NEXT:    vpcmpgtd %xmm5, %xmm1, %xmm1
3519; AVX1-NEXT:    vpand %xmm8, %xmm1, %xmm1
3520; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
3521; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm3
3522; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3523; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm5, %xmm3
3524; AVX1-NEXT:    vpand %xmm8, %xmm3, %xmm3
3525; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm0, %xmm0
3526; AVX1-NEXT:    vpand %xmm8, %xmm0, %xmm0
3527; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
3528; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3529; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3530; AVX1-NEXT:    retq
3531;
3532; AVX2-LABEL: test_cmp_v32i32:
3533; AVX2:       # BB#0:
3534; AVX2-NEXT:    vpcmpgtd %ymm7, %ymm3, %ymm3
3535; AVX2-NEXT:    vmovdqa {{.*#+}} ymm8 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
3536; AVX2-NEXT:    vpshufb %ymm8, %ymm3, %ymm3
3537; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,2,2,3]
3538; AVX2-NEXT:    vmovdqa {{.*#+}} xmm7 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3539; AVX2-NEXT:    vpshufb %xmm7, %xmm3, %xmm3
3540; AVX2-NEXT:    vpcmpgtd %ymm6, %ymm2, %ymm2
3541; AVX2-NEXT:    vpshufb %ymm8, %ymm2, %ymm2
3542; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
3543; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2
3544; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
3545; AVX2-NEXT:    vpcmpgtd %ymm5, %ymm1, %ymm1
3546; AVX2-NEXT:    vpshufb %ymm8, %ymm1, %ymm1
3547; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
3548; AVX2-NEXT:    vpshufb %xmm7, %xmm1, %xmm1
3549; AVX2-NEXT:    vpcmpgtd %ymm4, %ymm0, %ymm0
3550; AVX2-NEXT:    vpshufb %ymm8, %ymm0, %ymm0
3551; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3552; AVX2-NEXT:    vpshufb %xmm7, %xmm0, %xmm0
3553; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3554; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
3555; AVX2-NEXT:    retq
3556;
3557; AVX512-LABEL: test_cmp_v32i32:
3558; AVX512:       # BB#0:
3559; AVX512-NEXT:    vextracti32x4 $3, %zmm2, %xmm4
3560; AVX512-NEXT:    vpextrd $1, %xmm4, %ecx
3561; AVX512-NEXT:    vextracti32x4 $3, %zmm0, %xmm5
3562; AVX512-NEXT:    vpextrd $1, %xmm5, %edx
3563; AVX512-NEXT:    xorl %eax, %eax
3564; AVX512-NEXT:    cmpl %ecx, %edx
3565; AVX512-NEXT:    movl $-1, %ecx
3566; AVX512-NEXT:    movl $0, %edx
3567; AVX512-NEXT:    cmovgl %ecx, %edx
3568; AVX512-NEXT:    vmovd %xmm4, %esi
3569; AVX512-NEXT:    vmovd %xmm5, %edi
3570; AVX512-NEXT:    cmpl %esi, %edi
3571; AVX512-NEXT:    movl $0, %esi
3572; AVX512-NEXT:    cmovgl %ecx, %esi
3573; AVX512-NEXT:    vmovd %esi, %xmm6
3574; AVX512-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
3575; AVX512-NEXT:    vpextrd $2, %xmm4, %edx
3576; AVX512-NEXT:    vpextrd $2, %xmm5, %esi
3577; AVX512-NEXT:    cmpl %edx, %esi
3578; AVX512-NEXT:    movl $0, %edx
3579; AVX512-NEXT:    cmovgl %ecx, %edx
3580; AVX512-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
3581; AVX512-NEXT:    vpextrd $3, %xmm4, %edx
3582; AVX512-NEXT:    vpextrd $3, %xmm5, %esi
3583; AVX512-NEXT:    cmpl %edx, %esi
3584; AVX512-NEXT:    movl $0, %edx
3585; AVX512-NEXT:    cmovgl %ecx, %edx
3586; AVX512-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
3587; AVX512-NEXT:    vextracti32x4 $2, %zmm2, %xmm5
3588; AVX512-NEXT:    vpextrd $1, %xmm5, %edx
3589; AVX512-NEXT:    vextracti32x4 $2, %zmm0, %xmm6
3590; AVX512-NEXT:    vpextrd $1, %xmm6, %esi
3591; AVX512-NEXT:    cmpl %edx, %esi
3592; AVX512-NEXT:    movl $0, %edx
3593; AVX512-NEXT:    cmovgl %ecx, %edx
3594; AVX512-NEXT:    vmovd %xmm5, %esi
3595; AVX512-NEXT:    vmovd %xmm6, %edi
3596; AVX512-NEXT:    cmpl %esi, %edi
3597; AVX512-NEXT:    movl $0, %esi
3598; AVX512-NEXT:    cmovgl %ecx, %esi
3599; AVX512-NEXT:    vmovd %esi, %xmm7
3600; AVX512-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
3601; AVX512-NEXT:    vpextrd $2, %xmm5, %edx
3602; AVX512-NEXT:    vpextrd $2, %xmm6, %esi
3603; AVX512-NEXT:    cmpl %edx, %esi
3604; AVX512-NEXT:    movl $0, %edx
3605; AVX512-NEXT:    cmovgl %ecx, %edx
3606; AVX512-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
3607; AVX512-NEXT:    vpextrd $3, %xmm5, %edx
3608; AVX512-NEXT:    vpextrd $3, %xmm6, %esi
3609; AVX512-NEXT:    cmpl %edx, %esi
3610; AVX512-NEXT:    movl $0, %edx
3611; AVX512-NEXT:    cmovgl %ecx, %edx
3612; AVX512-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
3613; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm4
3614; AVX512-NEXT:    vextracti32x4 $1, %zmm2, %xmm5
3615; AVX512-NEXT:    vpextrd $1, %xmm5, %edx
3616; AVX512-NEXT:    vextracti32x4 $1, %zmm0, %xmm6
3617; AVX512-NEXT:    vpextrd $1, %xmm6, %esi
3618; AVX512-NEXT:    cmpl %edx, %esi
3619; AVX512-NEXT:    movl $0, %edx
3620; AVX512-NEXT:    cmovgl %ecx, %edx
3621; AVX512-NEXT:    vmovd %xmm5, %esi
3622; AVX512-NEXT:    vmovd %xmm6, %edi
3623; AVX512-NEXT:    cmpl %esi, %edi
3624; AVX512-NEXT:    movl $0, %esi
3625; AVX512-NEXT:    cmovgl %ecx, %esi
3626; AVX512-NEXT:    vmovd %esi, %xmm7
3627; AVX512-NEXT:    vpinsrd $1, %edx, %xmm7, %xmm7
3628; AVX512-NEXT:    vpextrd $2, %xmm5, %edx
3629; AVX512-NEXT:    vpextrd $2, %xmm6, %esi
3630; AVX512-NEXT:    cmpl %edx, %esi
3631; AVX512-NEXT:    movl $0, %edx
3632; AVX512-NEXT:    cmovgl %ecx, %edx
3633; AVX512-NEXT:    vpinsrd $2, %edx, %xmm7, %xmm7
3634; AVX512-NEXT:    vpextrd $3, %xmm5, %edx
3635; AVX512-NEXT:    vpextrd $3, %xmm6, %esi
3636; AVX512-NEXT:    cmpl %edx, %esi
3637; AVX512-NEXT:    movl $0, %edx
3638; AVX512-NEXT:    cmovgl %ecx, %edx
3639; AVX512-NEXT:    vpinsrd $3, %edx, %xmm7, %xmm5
3640; AVX512-NEXT:    vpextrd $1, %xmm2, %edx
3641; AVX512-NEXT:    vpextrd $1, %xmm0, %esi
3642; AVX512-NEXT:    cmpl %edx, %esi
3643; AVX512-NEXT:    movl $0, %edx
3644; AVX512-NEXT:    cmovgl %ecx, %edx
3645; AVX512-NEXT:    vmovd %xmm2, %esi
3646; AVX512-NEXT:    vmovd %xmm0, %edi
3647; AVX512-NEXT:    cmpl %esi, %edi
3648; AVX512-NEXT:    movl $0, %esi
3649; AVX512-NEXT:    cmovgl %ecx, %esi
3650; AVX512-NEXT:    vmovd %esi, %xmm6
3651; AVX512-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
3652; AVX512-NEXT:    vpextrd $2, %xmm2, %edx
3653; AVX512-NEXT:    vpextrd $2, %xmm0, %esi
3654; AVX512-NEXT:    cmpl %edx, %esi
3655; AVX512-NEXT:    movl $0, %edx
3656; AVX512-NEXT:    cmovgl %ecx, %edx
3657; AVX512-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
3658; AVX512-NEXT:    vpextrd $3, %xmm2, %edx
3659; AVX512-NEXT:    vpextrd $3, %xmm0, %esi
3660; AVX512-NEXT:    cmpl %edx, %esi
3661; AVX512-NEXT:    movl $0, %edx
3662; AVX512-NEXT:    cmovgl %ecx, %edx
3663; AVX512-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm0
3664; AVX512-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0
3665; AVX512-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0
3666; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
3667; AVX512-NEXT:    vextracti32x4 $3, %zmm3, %xmm2
3668; AVX512-NEXT:    vpextrd $1, %xmm2, %edx
3669; AVX512-NEXT:    vextracti32x4 $3, %zmm1, %xmm4
3670; AVX512-NEXT:    vpextrd $1, %xmm4, %esi
3671; AVX512-NEXT:    cmpl %edx, %esi
3672; AVX512-NEXT:    movl $0, %edx
3673; AVX512-NEXT:    cmovgl %ecx, %edx
3674; AVX512-NEXT:    vmovd %xmm2, %esi
3675; AVX512-NEXT:    vmovd %xmm4, %edi
3676; AVX512-NEXT:    cmpl %esi, %edi
3677; AVX512-NEXT:    movl $0, %esi
3678; AVX512-NEXT:    cmovgl %ecx, %esi
3679; AVX512-NEXT:    vmovd %esi, %xmm5
3680; AVX512-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3681; AVX512-NEXT:    vpextrd $2, %xmm2, %edx
3682; AVX512-NEXT:    vpextrd $2, %xmm4, %esi
3683; AVX512-NEXT:    cmpl %edx, %esi
3684; AVX512-NEXT:    movl $0, %edx
3685; AVX512-NEXT:    cmovgl %ecx, %edx
3686; AVX512-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
3687; AVX512-NEXT:    vpextrd $3, %xmm2, %edx
3688; AVX512-NEXT:    vpextrd $3, %xmm4, %esi
3689; AVX512-NEXT:    cmpl %edx, %esi
3690; AVX512-NEXT:    movl $0, %edx
3691; AVX512-NEXT:    cmovgl %ecx, %edx
3692; AVX512-NEXT:    vpinsrd $3, %edx, %xmm5, %xmm2
3693; AVX512-NEXT:    vextracti32x4 $2, %zmm3, %xmm4
3694; AVX512-NEXT:    vpextrd $1, %xmm4, %edx
3695; AVX512-NEXT:    vextracti32x4 $2, %zmm1, %xmm5
3696; AVX512-NEXT:    vpextrd $1, %xmm5, %esi
3697; AVX512-NEXT:    cmpl %edx, %esi
3698; AVX512-NEXT:    movl $0, %edx
3699; AVX512-NEXT:    cmovgl %ecx, %edx
3700; AVX512-NEXT:    vmovd %xmm4, %esi
3701; AVX512-NEXT:    vmovd %xmm5, %edi
3702; AVX512-NEXT:    cmpl %esi, %edi
3703; AVX512-NEXT:    movl $0, %esi
3704; AVX512-NEXT:    cmovgl %ecx, %esi
3705; AVX512-NEXT:    vmovd %esi, %xmm6
3706; AVX512-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
3707; AVX512-NEXT:    vpextrd $2, %xmm4, %edx
3708; AVX512-NEXT:    vpextrd $2, %xmm5, %esi
3709; AVX512-NEXT:    cmpl %edx, %esi
3710; AVX512-NEXT:    movl $0, %edx
3711; AVX512-NEXT:    cmovgl %ecx, %edx
3712; AVX512-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
3713; AVX512-NEXT:    vpextrd $3, %xmm4, %edx
3714; AVX512-NEXT:    vpextrd $3, %xmm5, %esi
3715; AVX512-NEXT:    cmpl %edx, %esi
3716; AVX512-NEXT:    movl $0, %edx
3717; AVX512-NEXT:    cmovgl %ecx, %edx
3718; AVX512-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
3719; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm4, %ymm2
3720; AVX512-NEXT:    vextracti32x4 $1, %zmm3, %xmm4
3721; AVX512-NEXT:    vpextrd $1, %xmm4, %edx
3722; AVX512-NEXT:    vextracti32x4 $1, %zmm1, %xmm5
3723; AVX512-NEXT:    vpextrd $1, %xmm5, %esi
3724; AVX512-NEXT:    cmpl %edx, %esi
3725; AVX512-NEXT:    movl $0, %edx
3726; AVX512-NEXT:    cmovgl %ecx, %edx
3727; AVX512-NEXT:    vmovd %xmm4, %esi
3728; AVX512-NEXT:    vmovd %xmm5, %edi
3729; AVX512-NEXT:    cmpl %esi, %edi
3730; AVX512-NEXT:    movl $0, %esi
3731; AVX512-NEXT:    cmovgl %ecx, %esi
3732; AVX512-NEXT:    vmovd %esi, %xmm6
3733; AVX512-NEXT:    vpinsrd $1, %edx, %xmm6, %xmm6
3734; AVX512-NEXT:    vpextrd $2, %xmm4, %edx
3735; AVX512-NEXT:    vpextrd $2, %xmm5, %esi
3736; AVX512-NEXT:    cmpl %edx, %esi
3737; AVX512-NEXT:    movl $0, %edx
3738; AVX512-NEXT:    cmovgl %ecx, %edx
3739; AVX512-NEXT:    vpinsrd $2, %edx, %xmm6, %xmm6
3740; AVX512-NEXT:    vpextrd $3, %xmm4, %edx
3741; AVX512-NEXT:    vpextrd $3, %xmm5, %esi
3742; AVX512-NEXT:    cmpl %edx, %esi
3743; AVX512-NEXT:    movl $0, %edx
3744; AVX512-NEXT:    cmovgl %ecx, %edx
3745; AVX512-NEXT:    vpinsrd $3, %edx, %xmm6, %xmm4
3746; AVX512-NEXT:    vpextrd $1, %xmm3, %edx
3747; AVX512-NEXT:    vpextrd $1, %xmm1, %esi
3748; AVX512-NEXT:    cmpl %edx, %esi
3749; AVX512-NEXT:    movl $0, %edx
3750; AVX512-NEXT:    cmovgl %ecx, %edx
3751; AVX512-NEXT:    vmovd %xmm3, %esi
3752; AVX512-NEXT:    vmovd %xmm1, %edi
3753; AVX512-NEXT:    cmpl %esi, %edi
3754; AVX512-NEXT:    movl $0, %esi
3755; AVX512-NEXT:    cmovgl %ecx, %esi
3756; AVX512-NEXT:    vmovd %esi, %xmm5
3757; AVX512-NEXT:    vpinsrd $1, %edx, %xmm5, %xmm5
3758; AVX512-NEXT:    vpextrd $2, %xmm3, %edx
3759; AVX512-NEXT:    vpextrd $2, %xmm1, %esi
3760; AVX512-NEXT:    cmpl %edx, %esi
3761; AVX512-NEXT:    movl $0, %edx
3762; AVX512-NEXT:    cmovgl %ecx, %edx
3763; AVX512-NEXT:    vpinsrd $2, %edx, %xmm5, %xmm5
3764; AVX512-NEXT:    vpextrd $3, %xmm3, %edx
3765; AVX512-NEXT:    vpextrd $3, %xmm1, %esi
3766; AVX512-NEXT:    cmpl %edx, %esi
3767; AVX512-NEXT:    cmovgl %ecx, %eax
3768; AVX512-NEXT:    vpinsrd $3, %eax, %xmm5, %xmm1
3769; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1
3770; AVX512-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1
3771; AVX512-NEXT:    vpmovdb %zmm1, %xmm1
3772; AVX512-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3773; AVX512-NEXT:    retq
3774  %1 = icmp sgt <32 x i32> %a0, %a1
3775  ret <32 x i1> %1
3776}
3777
3778define <64 x i1> @test_cmp_v64i16(<64 x i16> %a0, <64 x i16> %a1) nounwind {
3779; SSE2-LABEL: test_cmp_v64i16:
3780; SSE2:       # BB#0:
3781; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
3782; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [255,255,255,255,255,255,255,255]
3783; SSE2-NEXT:    pand %xmm8, %xmm1
3784; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
3785; SSE2-NEXT:    pand %xmm8, %xmm0
3786; SSE2-NEXT:    packuswb %xmm1, %xmm0
3787; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
3788; SSE2-NEXT:    pand %xmm8, %xmm3
3789; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
3790; SSE2-NEXT:    pand %xmm8, %xmm2
3791; SSE2-NEXT:    packuswb %xmm3, %xmm2
3792; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
3793; SSE2-NEXT:    pand %xmm8, %xmm5
3794; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
3795; SSE2-NEXT:    pand %xmm8, %xmm4
3796; SSE2-NEXT:    packuswb %xmm5, %xmm4
3797; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
3798; SSE2-NEXT:    pand %xmm8, %xmm7
3799; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
3800; SSE2-NEXT:    pand %xmm8, %xmm6
3801; SSE2-NEXT:    packuswb %xmm7, %xmm6
3802; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
3803; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3804; SSE2-NEXT:    andb $1, %al
3805; SSE2-NEXT:    movb %al, 6(%rdi)
3806; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
3807; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3808; SSE2-NEXT:    andb $1, %al
3809; SSE2-NEXT:    movb %al, 4(%rdi)
3810; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
3811; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3812; SSE2-NEXT:    andb $1, %al
3813; SSE2-NEXT:    movb %al, 2(%rdi)
3814; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
3815; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3816; SSE2-NEXT:    andb $1, %al
3817; SSE2-NEXT:    movb %al, (%rdi)
3818; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3819; SSE2-NEXT:    andb $1, %al
3820; SSE2-NEXT:    movb %al, 6(%rdi)
3821; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3822; SSE2-NEXT:    andb $1, %al
3823; SSE2-NEXT:    movb %al, 4(%rdi)
3824; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3825; SSE2-NEXT:    andb $1, %al
3826; SSE2-NEXT:    movb %al, 2(%rdi)
3827; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3828; SSE2-NEXT:    andb $1, %al
3829; SSE2-NEXT:    movb %al, (%rdi)
3830; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3831; SSE2-NEXT:    andb $1, %al
3832; SSE2-NEXT:    movb %al, 6(%rdi)
3833; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3834; SSE2-NEXT:    andb $1, %al
3835; SSE2-NEXT:    movb %al, 4(%rdi)
3836; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3837; SSE2-NEXT:    andb $1, %al
3838; SSE2-NEXT:    movb %al, 2(%rdi)
3839; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3840; SSE2-NEXT:    andb $1, %al
3841; SSE2-NEXT:    movb %al, (%rdi)
3842; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3843; SSE2-NEXT:    andb $1, %al
3844; SSE2-NEXT:    movb %al, 6(%rdi)
3845; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3846; SSE2-NEXT:    andb $1, %al
3847; SSE2-NEXT:    movb %al, 4(%rdi)
3848; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3849; SSE2-NEXT:    andb $1, %al
3850; SSE2-NEXT:    movb %al, 2(%rdi)
3851; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3852; SSE2-NEXT:    andb $1, %al
3853; SSE2-NEXT:    movb %al, (%rdi)
3854; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3855; SSE2-NEXT:    andb $1, %al
3856; SSE2-NEXT:    movb %al, 6(%rdi)
3857; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3858; SSE2-NEXT:    andb $1, %al
3859; SSE2-NEXT:    movb %al, 4(%rdi)
3860; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3861; SSE2-NEXT:    andb $1, %al
3862; SSE2-NEXT:    movb %al, 2(%rdi)
3863; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3864; SSE2-NEXT:    andb $1, %al
3865; SSE2-NEXT:    movb %al, (%rdi)
3866; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3867; SSE2-NEXT:    andb $1, %al
3868; SSE2-NEXT:    movb %al, 6(%rdi)
3869; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3870; SSE2-NEXT:    andb $1, %al
3871; SSE2-NEXT:    movb %al, 4(%rdi)
3872; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3873; SSE2-NEXT:    andb $1, %al
3874; SSE2-NEXT:    movb %al, 2(%rdi)
3875; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3876; SSE2-NEXT:    andb $1, %al
3877; SSE2-NEXT:    movb %al, (%rdi)
3878; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3879; SSE2-NEXT:    andb $1, %al
3880; SSE2-NEXT:    movb %al, 6(%rdi)
3881; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3882; SSE2-NEXT:    andb $1, %al
3883; SSE2-NEXT:    movb %al, 4(%rdi)
3884; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3885; SSE2-NEXT:    andb $1, %al
3886; SSE2-NEXT:    movb %al, 2(%rdi)
3887; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3888; SSE2-NEXT:    andb $1, %al
3889; SSE2-NEXT:    movb %al, (%rdi)
3890; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3891; SSE2-NEXT:    andb $1, %al
3892; SSE2-NEXT:    movb %al, 6(%rdi)
3893; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3894; SSE2-NEXT:    andb $1, %al
3895; SSE2-NEXT:    movb %al, 4(%rdi)
3896; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3897; SSE2-NEXT:    andb $1, %al
3898; SSE2-NEXT:    movb %al, 2(%rdi)
3899; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3900; SSE2-NEXT:    andb $1, %al
3901; SSE2-NEXT:    movb %al, (%rdi)
3902; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3903; SSE2-NEXT:    andb $1, %al
3904; SSE2-NEXT:    movb %al, 6(%rdi)
3905; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3906; SSE2-NEXT:    andb $1, %al
3907; SSE2-NEXT:    movb %al, 4(%rdi)
3908; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3909; SSE2-NEXT:    andb $1, %al
3910; SSE2-NEXT:    movb %al, 2(%rdi)
3911; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3912; SSE2-NEXT:    andb $1, %al
3913; SSE2-NEXT:    movb %al, (%rdi)
3914; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3915; SSE2-NEXT:    andb $1, %al
3916; SSE2-NEXT:    movb %al, 6(%rdi)
3917; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3918; SSE2-NEXT:    andb $1, %al
3919; SSE2-NEXT:    movb %al, 4(%rdi)
3920; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3921; SSE2-NEXT:    andb $1, %al
3922; SSE2-NEXT:    movb %al, 2(%rdi)
3923; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3924; SSE2-NEXT:    andb $1, %al
3925; SSE2-NEXT:    movb %al, (%rdi)
3926; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3927; SSE2-NEXT:    andb $1, %al
3928; SSE2-NEXT:    movb %al, 6(%rdi)
3929; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3930; SSE2-NEXT:    andb $1, %al
3931; SSE2-NEXT:    movb %al, 4(%rdi)
3932; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3933; SSE2-NEXT:    andb $1, %al
3934; SSE2-NEXT:    movb %al, 2(%rdi)
3935; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3936; SSE2-NEXT:    andb $1, %al
3937; SSE2-NEXT:    movb %al, (%rdi)
3938; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3939; SSE2-NEXT:    andb $1, %al
3940; SSE2-NEXT:    movb %al, 6(%rdi)
3941; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3942; SSE2-NEXT:    andb $1, %al
3943; SSE2-NEXT:    movb %al, 4(%rdi)
3944; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3945; SSE2-NEXT:    andb $1, %al
3946; SSE2-NEXT:    movb %al, 2(%rdi)
3947; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3948; SSE2-NEXT:    andb $1, %al
3949; SSE2-NEXT:    movb %al, (%rdi)
3950; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3951; SSE2-NEXT:    andb $1, %al
3952; SSE2-NEXT:    movb %al, 6(%rdi)
3953; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3954; SSE2-NEXT:    andb $1, %al
3955; SSE2-NEXT:    movb %al, 4(%rdi)
3956; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3957; SSE2-NEXT:    andb $1, %al
3958; SSE2-NEXT:    movb %al, 2(%rdi)
3959; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3960; SSE2-NEXT:    andb $1, %al
3961; SSE2-NEXT:    movb %al, (%rdi)
3962; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3963; SSE2-NEXT:    andb $1, %al
3964; SSE2-NEXT:    movb %al, 6(%rdi)
3965; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3966; SSE2-NEXT:    andb $1, %al
3967; SSE2-NEXT:    movb %al, 4(%rdi)
3968; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3969; SSE2-NEXT:    andb $1, %al
3970; SSE2-NEXT:    movb %al, 2(%rdi)
3971; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3972; SSE2-NEXT:    andb $1, %al
3973; SSE2-NEXT:    movb %al, (%rdi)
3974; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3975; SSE2-NEXT:    andb $1, %al
3976; SSE2-NEXT:    movb %al, 6(%rdi)
3977; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3978; SSE2-NEXT:    andb $1, %al
3979; SSE2-NEXT:    movb %al, 4(%rdi)
3980; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3981; SSE2-NEXT:    andb $1, %al
3982; SSE2-NEXT:    movb %al, 2(%rdi)
3983; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3984; SSE2-NEXT:    andb $1, %al
3985; SSE2-NEXT:    movb %al, (%rdi)
3986; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3987; SSE2-NEXT:    andb $1, %al
3988; SSE2-NEXT:    movb %al, 6(%rdi)
3989; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3990; SSE2-NEXT:    andb $1, %al
3991; SSE2-NEXT:    movb %al, 4(%rdi)
3992; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3993; SSE2-NEXT:    andb $1, %al
3994; SSE2-NEXT:    movb %al, 2(%rdi)
3995; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
3996; SSE2-NEXT:    andb $1, %al
3997; SSE2-NEXT:    movb %al, (%rdi)
3998; SSE2-NEXT:    movq %rdi, %rax
3999; SSE2-NEXT:    retq
4000;
4001; SSE42-LABEL: test_cmp_v64i16:
4002; SSE42:       # BB#0:
4003; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
4004; SSE42-NEXT:    movdqa {{.*#+}} xmm8 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4005; SSE42-NEXT:    pshufb %xmm8, %xmm1
4006; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
4007; SSE42-NEXT:    pshufb %xmm8, %xmm0
4008; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4009; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
4010; SSE42-NEXT:    pshufb %xmm8, %xmm3
4011; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
4012; SSE42-NEXT:    pshufb %xmm8, %xmm2
4013; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
4014; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
4015; SSE42-NEXT:    pshufb %xmm8, %xmm5
4016; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
4017; SSE42-NEXT:    pshufb %xmm8, %xmm4
4018; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
4019; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
4020; SSE42-NEXT:    pshufb %xmm8, %xmm7
4021; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
4022; SSE42-NEXT:    pshufb %xmm8, %xmm6
4023; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]
4024; SSE42-NEXT:    pextrb $15, %xmm6, %eax
4025; SSE42-NEXT:    andb $1, %al
4026; SSE42-NEXT:    movb %al, 6(%rdi)
4027; SSE42-NEXT:    pextrb $14, %xmm6, %eax
4028; SSE42-NEXT:    andb $1, %al
4029; SSE42-NEXT:    movb %al, 6(%rdi)
4030; SSE42-NEXT:    pextrb $13, %xmm6, %eax
4031; SSE42-NEXT:    andb $1, %al
4032; SSE42-NEXT:    movb %al, 6(%rdi)
4033; SSE42-NEXT:    pextrb $12, %xmm6, %eax
4034; SSE42-NEXT:    andb $1, %al
4035; SSE42-NEXT:    movb %al, 6(%rdi)
4036; SSE42-NEXT:    pextrb $11, %xmm6, %eax
4037; SSE42-NEXT:    andb $1, %al
4038; SSE42-NEXT:    movb %al, 6(%rdi)
4039; SSE42-NEXT:    pextrb $10, %xmm6, %eax
4040; SSE42-NEXT:    andb $1, %al
4041; SSE42-NEXT:    movb %al, 6(%rdi)
4042; SSE42-NEXT:    pextrb $9, %xmm6, %eax
4043; SSE42-NEXT:    andb $1, %al
4044; SSE42-NEXT:    movb %al, 6(%rdi)
4045; SSE42-NEXT:    pextrb $8, %xmm6, %eax
4046; SSE42-NEXT:    andb $1, %al
4047; SSE42-NEXT:    movb %al, 6(%rdi)
4048; SSE42-NEXT:    pextrb $7, %xmm6, %eax
4049; SSE42-NEXT:    andb $1, %al
4050; SSE42-NEXT:    movb %al, 6(%rdi)
4051; SSE42-NEXT:    pextrb $6, %xmm6, %eax
4052; SSE42-NEXT:    andb $1, %al
4053; SSE42-NEXT:    movb %al, 6(%rdi)
4054; SSE42-NEXT:    pextrb $5, %xmm6, %eax
4055; SSE42-NEXT:    andb $1, %al
4056; SSE42-NEXT:    movb %al, 6(%rdi)
4057; SSE42-NEXT:    pextrb $4, %xmm6, %eax
4058; SSE42-NEXT:    andb $1, %al
4059; SSE42-NEXT:    movb %al, 6(%rdi)
4060; SSE42-NEXT:    pextrb $3, %xmm6, %eax
4061; SSE42-NEXT:    andb $1, %al
4062; SSE42-NEXT:    movb %al, 6(%rdi)
4063; SSE42-NEXT:    pextrb $2, %xmm6, %eax
4064; SSE42-NEXT:    andb $1, %al
4065; SSE42-NEXT:    movb %al, 6(%rdi)
4066; SSE42-NEXT:    pextrb $1, %xmm6, %eax
4067; SSE42-NEXT:    andb $1, %al
4068; SSE42-NEXT:    movb %al, 6(%rdi)
4069; SSE42-NEXT:    pextrb $0, %xmm6, %eax
4070; SSE42-NEXT:    andb $1, %al
4071; SSE42-NEXT:    movb %al, 6(%rdi)
4072; SSE42-NEXT:    pextrb $15, %xmm4, %eax
4073; SSE42-NEXT:    andb $1, %al
4074; SSE42-NEXT:    movb %al, 4(%rdi)
4075; SSE42-NEXT:    pextrb $14, %xmm4, %eax
4076; SSE42-NEXT:    andb $1, %al
4077; SSE42-NEXT:    movb %al, 4(%rdi)
4078; SSE42-NEXT:    pextrb $13, %xmm4, %eax
4079; SSE42-NEXT:    andb $1, %al
4080; SSE42-NEXT:    movb %al, 4(%rdi)
4081; SSE42-NEXT:    pextrb $12, %xmm4, %eax
4082; SSE42-NEXT:    andb $1, %al
4083; SSE42-NEXT:    movb %al, 4(%rdi)
4084; SSE42-NEXT:    pextrb $11, %xmm4, %eax
4085; SSE42-NEXT:    andb $1, %al
4086; SSE42-NEXT:    movb %al, 4(%rdi)
4087; SSE42-NEXT:    pextrb $10, %xmm4, %eax
4088; SSE42-NEXT:    andb $1, %al
4089; SSE42-NEXT:    movb %al, 4(%rdi)
4090; SSE42-NEXT:    pextrb $9, %xmm4, %eax
4091; SSE42-NEXT:    andb $1, %al
4092; SSE42-NEXT:    movb %al, 4(%rdi)
4093; SSE42-NEXT:    pextrb $8, %xmm4, %eax
4094; SSE42-NEXT:    andb $1, %al
4095; SSE42-NEXT:    movb %al, 4(%rdi)
4096; SSE42-NEXT:    pextrb $7, %xmm4, %eax
4097; SSE42-NEXT:    andb $1, %al
4098; SSE42-NEXT:    movb %al, 4(%rdi)
4099; SSE42-NEXT:    pextrb $6, %xmm4, %eax
4100; SSE42-NEXT:    andb $1, %al
4101; SSE42-NEXT:    movb %al, 4(%rdi)
4102; SSE42-NEXT:    pextrb $5, %xmm4, %eax
4103; SSE42-NEXT:    andb $1, %al
4104; SSE42-NEXT:    movb %al, 4(%rdi)
4105; SSE42-NEXT:    pextrb $4, %xmm4, %eax
4106; SSE42-NEXT:    andb $1, %al
4107; SSE42-NEXT:    movb %al, 4(%rdi)
4108; SSE42-NEXT:    pextrb $3, %xmm4, %eax
4109; SSE42-NEXT:    andb $1, %al
4110; SSE42-NEXT:    movb %al, 4(%rdi)
4111; SSE42-NEXT:    pextrb $2, %xmm4, %eax
4112; SSE42-NEXT:    andb $1, %al
4113; SSE42-NEXT:    movb %al, 4(%rdi)
4114; SSE42-NEXT:    pextrb $1, %xmm4, %eax
4115; SSE42-NEXT:    andb $1, %al
4116; SSE42-NEXT:    movb %al, 4(%rdi)
4117; SSE42-NEXT:    pextrb $0, %xmm4, %eax
4118; SSE42-NEXT:    andb $1, %al
4119; SSE42-NEXT:    movb %al, 4(%rdi)
4120; SSE42-NEXT:    pextrb $15, %xmm2, %eax
4121; SSE42-NEXT:    andb $1, %al
4122; SSE42-NEXT:    movb %al, 2(%rdi)
4123; SSE42-NEXT:    pextrb $14, %xmm2, %eax
4124; SSE42-NEXT:    andb $1, %al
4125; SSE42-NEXT:    movb %al, 2(%rdi)
4126; SSE42-NEXT:    pextrb $13, %xmm2, %eax
4127; SSE42-NEXT:    andb $1, %al
4128; SSE42-NEXT:    movb %al, 2(%rdi)
4129; SSE42-NEXT:    pextrb $12, %xmm2, %eax
4130; SSE42-NEXT:    andb $1, %al
4131; SSE42-NEXT:    movb %al, 2(%rdi)
4132; SSE42-NEXT:    pextrb $11, %xmm2, %eax
4133; SSE42-NEXT:    andb $1, %al
4134; SSE42-NEXT:    movb %al, 2(%rdi)
4135; SSE42-NEXT:    pextrb $10, %xmm2, %eax
4136; SSE42-NEXT:    andb $1, %al
4137; SSE42-NEXT:    movb %al, 2(%rdi)
4138; SSE42-NEXT:    pextrb $9, %xmm2, %eax
4139; SSE42-NEXT:    andb $1, %al
4140; SSE42-NEXT:    movb %al, 2(%rdi)
4141; SSE42-NEXT:    pextrb $8, %xmm2, %eax
4142; SSE42-NEXT:    andb $1, %al
4143; SSE42-NEXT:    movb %al, 2(%rdi)
4144; SSE42-NEXT:    pextrb $7, %xmm2, %eax
4145; SSE42-NEXT:    andb $1, %al
4146; SSE42-NEXT:    movb %al, 2(%rdi)
4147; SSE42-NEXT:    pextrb $6, %xmm2, %eax
4148; SSE42-NEXT:    andb $1, %al
4149; SSE42-NEXT:    movb %al, 2(%rdi)
4150; SSE42-NEXT:    pextrb $5, %xmm2, %eax
4151; SSE42-NEXT:    andb $1, %al
4152; SSE42-NEXT:    movb %al, 2(%rdi)
4153; SSE42-NEXT:    pextrb $4, %xmm2, %eax
4154; SSE42-NEXT:    andb $1, %al
4155; SSE42-NEXT:    movb %al, 2(%rdi)
4156; SSE42-NEXT:    pextrb $3, %xmm2, %eax
4157; SSE42-NEXT:    andb $1, %al
4158; SSE42-NEXT:    movb %al, 2(%rdi)
4159; SSE42-NEXT:    pextrb $2, %xmm2, %eax
4160; SSE42-NEXT:    andb $1, %al
4161; SSE42-NEXT:    movb %al, 2(%rdi)
4162; SSE42-NEXT:    pextrb $1, %xmm2, %eax
4163; SSE42-NEXT:    andb $1, %al
4164; SSE42-NEXT:    movb %al, 2(%rdi)
4165; SSE42-NEXT:    pextrb $0, %xmm2, %eax
4166; SSE42-NEXT:    andb $1, %al
4167; SSE42-NEXT:    movb %al, 2(%rdi)
4168; SSE42-NEXT:    pextrb $15, %xmm0, %eax
4169; SSE42-NEXT:    andb $1, %al
4170; SSE42-NEXT:    movb %al, (%rdi)
4171; SSE42-NEXT:    pextrb $14, %xmm0, %eax
4172; SSE42-NEXT:    andb $1, %al
4173; SSE42-NEXT:    movb %al, (%rdi)
4174; SSE42-NEXT:    pextrb $13, %xmm0, %eax
4175; SSE42-NEXT:    andb $1, %al
4176; SSE42-NEXT:    movb %al, (%rdi)
4177; SSE42-NEXT:    pextrb $12, %xmm0, %eax
4178; SSE42-NEXT:    andb $1, %al
4179; SSE42-NEXT:    movb %al, (%rdi)
4180; SSE42-NEXT:    pextrb $11, %xmm0, %eax
4181; SSE42-NEXT:    andb $1, %al
4182; SSE42-NEXT:    movb %al, (%rdi)
4183; SSE42-NEXT:    pextrb $10, %xmm0, %eax
4184; SSE42-NEXT:    andb $1, %al
4185; SSE42-NEXT:    movb %al, (%rdi)
4186; SSE42-NEXT:    pextrb $9, %xmm0, %eax
4187; SSE42-NEXT:    andb $1, %al
4188; SSE42-NEXT:    movb %al, (%rdi)
4189; SSE42-NEXT:    pextrb $8, %xmm0, %eax
4190; SSE42-NEXT:    andb $1, %al
4191; SSE42-NEXT:    movb %al, (%rdi)
4192; SSE42-NEXT:    pextrb $7, %xmm0, %eax
4193; SSE42-NEXT:    andb $1, %al
4194; SSE42-NEXT:    movb %al, (%rdi)
4195; SSE42-NEXT:    pextrb $6, %xmm0, %eax
4196; SSE42-NEXT:    andb $1, %al
4197; SSE42-NEXT:    movb %al, (%rdi)
4198; SSE42-NEXT:    pextrb $5, %xmm0, %eax
4199; SSE42-NEXT:    andb $1, %al
4200; SSE42-NEXT:    movb %al, (%rdi)
4201; SSE42-NEXT:    pextrb $4, %xmm0, %eax
4202; SSE42-NEXT:    andb $1, %al
4203; SSE42-NEXT:    movb %al, (%rdi)
4204; SSE42-NEXT:    pextrb $3, %xmm0, %eax
4205; SSE42-NEXT:    andb $1, %al
4206; SSE42-NEXT:    movb %al, (%rdi)
4207; SSE42-NEXT:    pextrb $2, %xmm0, %eax
4208; SSE42-NEXT:    andb $1, %al
4209; SSE42-NEXT:    movb %al, (%rdi)
4210; SSE42-NEXT:    pextrb $1, %xmm0, %eax
4211; SSE42-NEXT:    andb $1, %al
4212; SSE42-NEXT:    movb %al, (%rdi)
4213; SSE42-NEXT:    pextrb $0, %xmm0, %eax
4214; SSE42-NEXT:    andb $1, %al
4215; SSE42-NEXT:    movb %al, (%rdi)
4216; SSE42-NEXT:    movq %rdi, %rax
4217; SSE42-NEXT:    retq
4218;
4219; AVX1-LABEL: test_cmp_v64i16:
4220; AVX1:       # BB#0:
4221; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm8
4222; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm9
4223; AVX1-NEXT:    vpcmpgtw %xmm8, %xmm9, %xmm8
4224; AVX1-NEXT:    vmovdqa {{.*#+}} xmm9 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4225; AVX1-NEXT:    vpshufb %xmm9, %xmm8, %xmm8
4226; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm0, %xmm0
4227; AVX1-NEXT:    vpshufb %xmm9, %xmm0, %xmm0
4228; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm8 = xmm0[0],xmm8[0]
4229; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm4
4230; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
4231; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm0, %xmm0
4232; AVX1-NEXT:    vpshufb %xmm9, %xmm0, %xmm0
4233; AVX1-NEXT:    vpcmpgtw %xmm5, %xmm1, %xmm1
4234; AVX1-NEXT:    vpshufb %xmm9, %xmm1, %xmm1
4235; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
4236; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm0
4237; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4238; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm4, %xmm0
4239; AVX1-NEXT:    vpshufb %xmm9, %xmm0, %xmm0
4240; AVX1-NEXT:    vpcmpgtw %xmm6, %xmm2, %xmm2
4241; AVX1-NEXT:    vpshufb %xmm9, %xmm2, %xmm2
4242; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]
4243; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm0
4244; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4245; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm4, %xmm0
4246; AVX1-NEXT:    vpshufb %xmm9, %xmm0, %xmm0
4247; AVX1-NEXT:    vpcmpgtw %xmm7, %xmm3, %xmm3
4248; AVX1-NEXT:    vpshufb %xmm9, %xmm3, %xmm3
4249; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm0[0]
4250; AVX1-NEXT:    vpextrb $15, %xmm3, %eax
4251; AVX1-NEXT:    andb $1, %al
4252; AVX1-NEXT:    movb %al, 4(%rdi)
4253; AVX1-NEXT:    vpextrb $14, %xmm3, %eax
4254; AVX1-NEXT:    andb $1, %al
4255; AVX1-NEXT:    movb %al, 4(%rdi)
4256; AVX1-NEXT:    vpextrb $13, %xmm3, %eax
4257; AVX1-NEXT:    andb $1, %al
4258; AVX1-NEXT:    movb %al, 4(%rdi)
4259; AVX1-NEXT:    vpextrb $12, %xmm3, %eax
4260; AVX1-NEXT:    andb $1, %al
4261; AVX1-NEXT:    movb %al, 4(%rdi)
4262; AVX1-NEXT:    vpextrb $11, %xmm3, %eax
4263; AVX1-NEXT:    andb $1, %al
4264; AVX1-NEXT:    movb %al, 4(%rdi)
4265; AVX1-NEXT:    vpextrb $10, %xmm3, %eax
4266; AVX1-NEXT:    andb $1, %al
4267; AVX1-NEXT:    movb %al, 4(%rdi)
4268; AVX1-NEXT:    vpextrb $9, %xmm3, %eax
4269; AVX1-NEXT:    andb $1, %al
4270; AVX1-NEXT:    movb %al, 4(%rdi)
4271; AVX1-NEXT:    vpextrb $8, %xmm3, %eax
4272; AVX1-NEXT:    andb $1, %al
4273; AVX1-NEXT:    movb %al, 4(%rdi)
4274; AVX1-NEXT:    vpextrb $7, %xmm3, %eax
4275; AVX1-NEXT:    andb $1, %al
4276; AVX1-NEXT:    movb %al, 4(%rdi)
4277; AVX1-NEXT:    vpextrb $6, %xmm3, %eax
4278; AVX1-NEXT:    andb $1, %al
4279; AVX1-NEXT:    movb %al, 4(%rdi)
4280; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
4281; AVX1-NEXT:    andb $1, %al
4282; AVX1-NEXT:    movb %al, 4(%rdi)
4283; AVX1-NEXT:    vpextrb $4, %xmm3, %eax
4284; AVX1-NEXT:    andb $1, %al
4285; AVX1-NEXT:    movb %al, 4(%rdi)
4286; AVX1-NEXT:    vpextrb $3, %xmm3, %eax
4287; AVX1-NEXT:    andb $1, %al
4288; AVX1-NEXT:    movb %al, 4(%rdi)
4289; AVX1-NEXT:    vpextrb $2, %xmm3, %eax
4290; AVX1-NEXT:    andb $1, %al
4291; AVX1-NEXT:    movb %al, 4(%rdi)
4292; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
4293; AVX1-NEXT:    andb $1, %al
4294; AVX1-NEXT:    movb %al, 4(%rdi)
4295; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
4296; AVX1-NEXT:    andb $1, %al
4297; AVX1-NEXT:    movb %al, 4(%rdi)
4298; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
4299; AVX1-NEXT:    andb $1, %al
4300; AVX1-NEXT:    movb %al, 4(%rdi)
4301; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
4302; AVX1-NEXT:    andb $1, %al
4303; AVX1-NEXT:    movb %al, 4(%rdi)
4304; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
4305; AVX1-NEXT:    andb $1, %al
4306; AVX1-NEXT:    movb %al, 4(%rdi)
4307; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
4308; AVX1-NEXT:    andb $1, %al
4309; AVX1-NEXT:    movb %al, 4(%rdi)
4310; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
4311; AVX1-NEXT:    andb $1, %al
4312; AVX1-NEXT:    movb %al, 4(%rdi)
4313; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
4314; AVX1-NEXT:    andb $1, %al
4315; AVX1-NEXT:    movb %al, 4(%rdi)
4316; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
4317; AVX1-NEXT:    andb $1, %al
4318; AVX1-NEXT:    movb %al, 4(%rdi)
4319; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
4320; AVX1-NEXT:    andb $1, %al
4321; AVX1-NEXT:    movb %al, 4(%rdi)
4322; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
4323; AVX1-NEXT:    andb $1, %al
4324; AVX1-NEXT:    movb %al, 4(%rdi)
4325; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
4326; AVX1-NEXT:    andb $1, %al
4327; AVX1-NEXT:    movb %al, 4(%rdi)
4328; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
4329; AVX1-NEXT:    andb $1, %al
4330; AVX1-NEXT:    movb %al, 4(%rdi)
4331; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
4332; AVX1-NEXT:    andb $1, %al
4333; AVX1-NEXT:    movb %al, 4(%rdi)
4334; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
4335; AVX1-NEXT:    andb $1, %al
4336; AVX1-NEXT:    movb %al, 4(%rdi)
4337; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
4338; AVX1-NEXT:    andb $1, %al
4339; AVX1-NEXT:    movb %al, 4(%rdi)
4340; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
4341; AVX1-NEXT:    andb $1, %al
4342; AVX1-NEXT:    movb %al, 4(%rdi)
4343; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
4344; AVX1-NEXT:    andb $1, %al
4345; AVX1-NEXT:    movb %al, 4(%rdi)
4346; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
4347; AVX1-NEXT:    andb $1, %al
4348; AVX1-NEXT:    movb %al, (%rdi)
4349; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
4350; AVX1-NEXT:    andb $1, %al
4351; AVX1-NEXT:    movb %al, (%rdi)
4352; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
4353; AVX1-NEXT:    andb $1, %al
4354; AVX1-NEXT:    movb %al, (%rdi)
4355; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
4356; AVX1-NEXT:    andb $1, %al
4357; AVX1-NEXT:    movb %al, (%rdi)
4358; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
4359; AVX1-NEXT:    andb $1, %al
4360; AVX1-NEXT:    movb %al, (%rdi)
4361; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
4362; AVX1-NEXT:    andb $1, %al
4363; AVX1-NEXT:    movb %al, (%rdi)
4364; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
4365; AVX1-NEXT:    andb $1, %al
4366; AVX1-NEXT:    movb %al, (%rdi)
4367; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
4368; AVX1-NEXT:    andb $1, %al
4369; AVX1-NEXT:    movb %al, (%rdi)
4370; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
4371; AVX1-NEXT:    andb $1, %al
4372; AVX1-NEXT:    movb %al, (%rdi)
4373; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
4374; AVX1-NEXT:    andb $1, %al
4375; AVX1-NEXT:    movb %al, (%rdi)
4376; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
4377; AVX1-NEXT:    andb $1, %al
4378; AVX1-NEXT:    movb %al, (%rdi)
4379; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
4380; AVX1-NEXT:    andb $1, %al
4381; AVX1-NEXT:    movb %al, (%rdi)
4382; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
4383; AVX1-NEXT:    andb $1, %al
4384; AVX1-NEXT:    movb %al, (%rdi)
4385; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
4386; AVX1-NEXT:    andb $1, %al
4387; AVX1-NEXT:    movb %al, (%rdi)
4388; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
4389; AVX1-NEXT:    andb $1, %al
4390; AVX1-NEXT:    movb %al, (%rdi)
4391; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
4392; AVX1-NEXT:    andb $1, %al
4393; AVX1-NEXT:    movb %al, (%rdi)
4394; AVX1-NEXT:    vpextrb $15, %xmm8, %eax
4395; AVX1-NEXT:    andb $1, %al
4396; AVX1-NEXT:    movb %al, (%rdi)
4397; AVX1-NEXT:    vpextrb $14, %xmm8, %eax
4398; AVX1-NEXT:    andb $1, %al
4399; AVX1-NEXT:    movb %al, (%rdi)
4400; AVX1-NEXT:    vpextrb $13, %xmm8, %eax
4401; AVX1-NEXT:    andb $1, %al
4402; AVX1-NEXT:    movb %al, (%rdi)
4403; AVX1-NEXT:    vpextrb $12, %xmm8, %eax
4404; AVX1-NEXT:    andb $1, %al
4405; AVX1-NEXT:    movb %al, (%rdi)
4406; AVX1-NEXT:    vpextrb $11, %xmm8, %eax
4407; AVX1-NEXT:    andb $1, %al
4408; AVX1-NEXT:    movb %al, (%rdi)
4409; AVX1-NEXT:    vpextrb $10, %xmm8, %eax
4410; AVX1-NEXT:    andb $1, %al
4411; AVX1-NEXT:    movb %al, (%rdi)
4412; AVX1-NEXT:    vpextrb $9, %xmm8, %eax
4413; AVX1-NEXT:    andb $1, %al
4414; AVX1-NEXT:    movb %al, (%rdi)
4415; AVX1-NEXT:    vpextrb $8, %xmm8, %eax
4416; AVX1-NEXT:    andb $1, %al
4417; AVX1-NEXT:    movb %al, (%rdi)
4418; AVX1-NEXT:    vpextrb $7, %xmm8, %eax
4419; AVX1-NEXT:    andb $1, %al
4420; AVX1-NEXT:    movb %al, (%rdi)
4421; AVX1-NEXT:    vpextrb $6, %xmm8, %eax
4422; AVX1-NEXT:    andb $1, %al
4423; AVX1-NEXT:    movb %al, (%rdi)
4424; AVX1-NEXT:    vpextrb $5, %xmm8, %eax
4425; AVX1-NEXT:    andb $1, %al
4426; AVX1-NEXT:    movb %al, (%rdi)
4427; AVX1-NEXT:    vpextrb $4, %xmm8, %eax
4428; AVX1-NEXT:    andb $1, %al
4429; AVX1-NEXT:    movb %al, (%rdi)
4430; AVX1-NEXT:    vpextrb $3, %xmm8, %eax
4431; AVX1-NEXT:    andb $1, %al
4432; AVX1-NEXT:    movb %al, (%rdi)
4433; AVX1-NEXT:    vpextrb $2, %xmm8, %eax
4434; AVX1-NEXT:    andb $1, %al
4435; AVX1-NEXT:    movb %al, (%rdi)
4436; AVX1-NEXT:    vpextrb $1, %xmm8, %eax
4437; AVX1-NEXT:    andb $1, %al
4438; AVX1-NEXT:    movb %al, (%rdi)
4439; AVX1-NEXT:    vpextrb $0, %xmm8, %eax
4440; AVX1-NEXT:    andb $1, %al
4441; AVX1-NEXT:    movb %al, (%rdi)
4442; AVX1-NEXT:    movq %rdi, %rax
4443; AVX1-NEXT:    vzeroupper
4444; AVX1-NEXT:    retq
4445;
4446; AVX2-LABEL: test_cmp_v64i16:
4447; AVX2:       # BB#0:
4448; AVX2-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
4449; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm8
4450; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4451; AVX2-NEXT:    vpshufb %xmm4, %xmm8, %xmm8
4452; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
4453; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm8[0]
4454; AVX2-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
4455; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm5
4456; AVX2-NEXT:    vpshufb %xmm4, %xmm5, %xmm5
4457; AVX2-NEXT:    vpshufb %xmm4, %xmm1, %xmm1
4458; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
4459; AVX2-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
4460; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm5
4461; AVX2-NEXT:    vpshufb %xmm4, %xmm5, %xmm5
4462; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
4463; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]
4464; AVX2-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
4465; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm5
4466; AVX2-NEXT:    vpshufb %xmm4, %xmm5, %xmm5
4467; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3
4468; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]
4469; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
4470; AVX2-NEXT:    andb $1, %al
4471; AVX2-NEXT:    movb %al, 4(%rdi)
4472; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
4473; AVX2-NEXT:    andb $1, %al
4474; AVX2-NEXT:    movb %al, 4(%rdi)
4475; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
4476; AVX2-NEXT:    andb $1, %al
4477; AVX2-NEXT:    movb %al, 4(%rdi)
4478; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
4479; AVX2-NEXT:    andb $1, %al
4480; AVX2-NEXT:    movb %al, 4(%rdi)
4481; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
4482; AVX2-NEXT:    andb $1, %al
4483; AVX2-NEXT:    movb %al, 4(%rdi)
4484; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
4485; AVX2-NEXT:    andb $1, %al
4486; AVX2-NEXT:    movb %al, 4(%rdi)
4487; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
4488; AVX2-NEXT:    andb $1, %al
4489; AVX2-NEXT:    movb %al, 4(%rdi)
4490; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
4491; AVX2-NEXT:    andb $1, %al
4492; AVX2-NEXT:    movb %al, 4(%rdi)
4493; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
4494; AVX2-NEXT:    andb $1, %al
4495; AVX2-NEXT:    movb %al, 4(%rdi)
4496; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
4497; AVX2-NEXT:    andb $1, %al
4498; AVX2-NEXT:    movb %al, 4(%rdi)
4499; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
4500; AVX2-NEXT:    andb $1, %al
4501; AVX2-NEXT:    movb %al, 4(%rdi)
4502; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
4503; AVX2-NEXT:    andb $1, %al
4504; AVX2-NEXT:    movb %al, 4(%rdi)
4505; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
4506; AVX2-NEXT:    andb $1, %al
4507; AVX2-NEXT:    movb %al, 4(%rdi)
4508; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
4509; AVX2-NEXT:    andb $1, %al
4510; AVX2-NEXT:    movb %al, 4(%rdi)
4511; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
4512; AVX2-NEXT:    andb $1, %al
4513; AVX2-NEXT:    movb %al, 4(%rdi)
4514; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
4515; AVX2-NEXT:    andb $1, %al
4516; AVX2-NEXT:    movb %al, 4(%rdi)
4517; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
4518; AVX2-NEXT:    andb $1, %al
4519; AVX2-NEXT:    movb %al, 4(%rdi)
4520; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
4521; AVX2-NEXT:    andb $1, %al
4522; AVX2-NEXT:    movb %al, 4(%rdi)
4523; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
4524; AVX2-NEXT:    andb $1, %al
4525; AVX2-NEXT:    movb %al, 4(%rdi)
4526; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
4527; AVX2-NEXT:    andb $1, %al
4528; AVX2-NEXT:    movb %al, 4(%rdi)
4529; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
4530; AVX2-NEXT:    andb $1, %al
4531; AVX2-NEXT:    movb %al, 4(%rdi)
4532; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
4533; AVX2-NEXT:    andb $1, %al
4534; AVX2-NEXT:    movb %al, 4(%rdi)
4535; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
4536; AVX2-NEXT:    andb $1, %al
4537; AVX2-NEXT:    movb %al, 4(%rdi)
4538; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
4539; AVX2-NEXT:    andb $1, %al
4540; AVX2-NEXT:    movb %al, 4(%rdi)
4541; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
4542; AVX2-NEXT:    andb $1, %al
4543; AVX2-NEXT:    movb %al, 4(%rdi)
4544; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
4545; AVX2-NEXT:    andb $1, %al
4546; AVX2-NEXT:    movb %al, 4(%rdi)
4547; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
4548; AVX2-NEXT:    andb $1, %al
4549; AVX2-NEXT:    movb %al, 4(%rdi)
4550; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
4551; AVX2-NEXT:    andb $1, %al
4552; AVX2-NEXT:    movb %al, 4(%rdi)
4553; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
4554; AVX2-NEXT:    andb $1, %al
4555; AVX2-NEXT:    movb %al, 4(%rdi)
4556; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
4557; AVX2-NEXT:    andb $1, %al
4558; AVX2-NEXT:    movb %al, 4(%rdi)
4559; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
4560; AVX2-NEXT:    andb $1, %al
4561; AVX2-NEXT:    movb %al, 4(%rdi)
4562; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
4563; AVX2-NEXT:    andb $1, %al
4564; AVX2-NEXT:    movb %al, 4(%rdi)
4565; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
4566; AVX2-NEXT:    andb $1, %al
4567; AVX2-NEXT:    movb %al, (%rdi)
4568; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
4569; AVX2-NEXT:    andb $1, %al
4570; AVX2-NEXT:    movb %al, (%rdi)
4571; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
4572; AVX2-NEXT:    andb $1, %al
4573; AVX2-NEXT:    movb %al, (%rdi)
4574; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
4575; AVX2-NEXT:    andb $1, %al
4576; AVX2-NEXT:    movb %al, (%rdi)
4577; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
4578; AVX2-NEXT:    andb $1, %al
4579; AVX2-NEXT:    movb %al, (%rdi)
4580; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
4581; AVX2-NEXT:    andb $1, %al
4582; AVX2-NEXT:    movb %al, (%rdi)
4583; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
4584; AVX2-NEXT:    andb $1, %al
4585; AVX2-NEXT:    movb %al, (%rdi)
4586; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
4587; AVX2-NEXT:    andb $1, %al
4588; AVX2-NEXT:    movb %al, (%rdi)
4589; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
4590; AVX2-NEXT:    andb $1, %al
4591; AVX2-NEXT:    movb %al, (%rdi)
4592; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
4593; AVX2-NEXT:    andb $1, %al
4594; AVX2-NEXT:    movb %al, (%rdi)
4595; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
4596; AVX2-NEXT:    andb $1, %al
4597; AVX2-NEXT:    movb %al, (%rdi)
4598; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
4599; AVX2-NEXT:    andb $1, %al
4600; AVX2-NEXT:    movb %al, (%rdi)
4601; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
4602; AVX2-NEXT:    andb $1, %al
4603; AVX2-NEXT:    movb %al, (%rdi)
4604; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
4605; AVX2-NEXT:    andb $1, %al
4606; AVX2-NEXT:    movb %al, (%rdi)
4607; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
4608; AVX2-NEXT:    andb $1, %al
4609; AVX2-NEXT:    movb %al, (%rdi)
4610; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
4611; AVX2-NEXT:    andb $1, %al
4612; AVX2-NEXT:    movb %al, (%rdi)
4613; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
4614; AVX2-NEXT:    andb $1, %al
4615; AVX2-NEXT:    movb %al, (%rdi)
4616; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
4617; AVX2-NEXT:    andb $1, %al
4618; AVX2-NEXT:    movb %al, (%rdi)
4619; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
4620; AVX2-NEXT:    andb $1, %al
4621; AVX2-NEXT:    movb %al, (%rdi)
4622; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
4623; AVX2-NEXT:    andb $1, %al
4624; AVX2-NEXT:    movb %al, (%rdi)
4625; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
4626; AVX2-NEXT:    andb $1, %al
4627; AVX2-NEXT:    movb %al, (%rdi)
4628; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
4629; AVX2-NEXT:    andb $1, %al
4630; AVX2-NEXT:    movb %al, (%rdi)
4631; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
4632; AVX2-NEXT:    andb $1, %al
4633; AVX2-NEXT:    movb %al, (%rdi)
4634; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
4635; AVX2-NEXT:    andb $1, %al
4636; AVX2-NEXT:    movb %al, (%rdi)
4637; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
4638; AVX2-NEXT:    andb $1, %al
4639; AVX2-NEXT:    movb %al, (%rdi)
4640; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
4641; AVX2-NEXT:    andb $1, %al
4642; AVX2-NEXT:    movb %al, (%rdi)
4643; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
4644; AVX2-NEXT:    andb $1, %al
4645; AVX2-NEXT:    movb %al, (%rdi)
4646; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
4647; AVX2-NEXT:    andb $1, %al
4648; AVX2-NEXT:    movb %al, (%rdi)
4649; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
4650; AVX2-NEXT:    andb $1, %al
4651; AVX2-NEXT:    movb %al, (%rdi)
4652; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
4653; AVX2-NEXT:    andb $1, %al
4654; AVX2-NEXT:    movb %al, (%rdi)
4655; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
4656; AVX2-NEXT:    andb $1, %al
4657; AVX2-NEXT:    movb %al, (%rdi)
4658; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
4659; AVX2-NEXT:    andb $1, %al
4660; AVX2-NEXT:    movb %al, (%rdi)
4661; AVX2-NEXT:    movq %rdi, %rax
4662; AVX2-NEXT:    vzeroupper
4663; AVX2-NEXT:    retq
4664;
4665; AVX512-LABEL: test_cmp_v64i16:
4666; AVX512:       # BB#0:
4667; AVX512-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm3
4668; AVX512-NEXT:    vpmovsxwd %ymm3, %zmm3
4669; AVX512-NEXT:    vpslld $31, %zmm3, %zmm3
4670; AVX512-NEXT:    vptestmd %zmm3, %zmm3, %k0
4671; AVX512-NEXT:    kshiftlw $14, %k0, %k1
4672; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4673; AVX512-NEXT:    kmovw %k1, %eax
4674; AVX512-NEXT:    kshiftlw $15, %k0, %k1
4675; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4676; AVX512-NEXT:    kmovw %k1, %ecx
4677; AVX512-NEXT:    vmovd %ecx, %xmm3
4678; AVX512-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
4679; AVX512-NEXT:    kshiftlw $13, %k0, %k1
4680; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4681; AVX512-NEXT:    kmovw %k1, %eax
4682; AVX512-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
4683; AVX512-NEXT:    kshiftlw $12, %k0, %k1
4684; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4685; AVX512-NEXT:    kmovw %k1, %eax
4686; AVX512-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
4687; AVX512-NEXT:    kshiftlw $11, %k0, %k1
4688; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4689; AVX512-NEXT:    kmovw %k1, %eax
4690; AVX512-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
4691; AVX512-NEXT:    kshiftlw $10, %k0, %k1
4692; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4693; AVX512-NEXT:    kmovw %k1, %eax
4694; AVX512-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
4695; AVX512-NEXT:    kshiftlw $9, %k0, %k1
4696; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4697; AVX512-NEXT:    kmovw %k1, %eax
4698; AVX512-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
4699; AVX512-NEXT:    kshiftlw $8, %k0, %k1
4700; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4701; AVX512-NEXT:    kmovw %k1, %eax
4702; AVX512-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
4703; AVX512-NEXT:    kshiftlw $7, %k0, %k1
4704; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4705; AVX512-NEXT:    kmovw %k1, %eax
4706; AVX512-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
4707; AVX512-NEXT:    kshiftlw $6, %k0, %k1
4708; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4709; AVX512-NEXT:    kmovw %k1, %eax
4710; AVX512-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
4711; AVX512-NEXT:    kshiftlw $5, %k0, %k1
4712; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4713; AVX512-NEXT:    kmovw %k1, %eax
4714; AVX512-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
4715; AVX512-NEXT:    kshiftlw $4, %k0, %k1
4716; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4717; AVX512-NEXT:    kmovw %k1, %eax
4718; AVX512-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
4719; AVX512-NEXT:    kshiftlw $3, %k0, %k1
4720; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4721; AVX512-NEXT:    kmovw %k1, %eax
4722; AVX512-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
4723; AVX512-NEXT:    kshiftlw $2, %k0, %k1
4724; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4725; AVX512-NEXT:    kmovw %k1, %eax
4726; AVX512-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
4727; AVX512-NEXT:    kshiftlw $1, %k0, %k1
4728; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4729; AVX512-NEXT:    kmovw %k1, %eax
4730; AVX512-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
4731; AVX512-NEXT:    kshiftlw $0, %k0, %k0
4732; AVX512-NEXT:    kshiftrw $15, %k0, %k0
4733; AVX512-NEXT:    kmovw %k0, %eax
4734; AVX512-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm3
4735; AVX512-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm2
4736; AVX512-NEXT:    vpmovsxwd %ymm2, %zmm2
4737; AVX512-NEXT:    vpslld $31, %zmm2, %zmm2
4738; AVX512-NEXT:    vptestmd %zmm2, %zmm2, %k0
4739; AVX512-NEXT:    kshiftlw $14, %k0, %k1
4740; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4741; AVX512-NEXT:    kmovw %k1, %eax
4742; AVX512-NEXT:    kshiftlw $15, %k0, %k1
4743; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4744; AVX512-NEXT:    kmovw %k1, %ecx
4745; AVX512-NEXT:    vmovd %ecx, %xmm2
4746; AVX512-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm2
4747; AVX512-NEXT:    kshiftlw $13, %k0, %k1
4748; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4749; AVX512-NEXT:    kmovw %k1, %eax
4750; AVX512-NEXT:    vpinsrb $2, %eax, %xmm2, %xmm2
4751; AVX512-NEXT:    kshiftlw $12, %k0, %k1
4752; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4753; AVX512-NEXT:    kmovw %k1, %eax
4754; AVX512-NEXT:    vpinsrb $3, %eax, %xmm2, %xmm2
4755; AVX512-NEXT:    kshiftlw $11, %k0, %k1
4756; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4757; AVX512-NEXT:    kmovw %k1, %eax
4758; AVX512-NEXT:    vpinsrb $4, %eax, %xmm2, %xmm2
4759; AVX512-NEXT:    kshiftlw $10, %k0, %k1
4760; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4761; AVX512-NEXT:    kmovw %k1, %eax
4762; AVX512-NEXT:    vpinsrb $5, %eax, %xmm2, %xmm2
4763; AVX512-NEXT:    kshiftlw $9, %k0, %k1
4764; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4765; AVX512-NEXT:    kmovw %k1, %eax
4766; AVX512-NEXT:    vpinsrb $6, %eax, %xmm2, %xmm2
4767; AVX512-NEXT:    kshiftlw $8, %k0, %k1
4768; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4769; AVX512-NEXT:    kmovw %k1, %eax
4770; AVX512-NEXT:    vpinsrb $7, %eax, %xmm2, %xmm2
4771; AVX512-NEXT:    kshiftlw $7, %k0, %k1
4772; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4773; AVX512-NEXT:    kmovw %k1, %eax
4774; AVX512-NEXT:    vpinsrb $8, %eax, %xmm2, %xmm2
4775; AVX512-NEXT:    kshiftlw $6, %k0, %k1
4776; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4777; AVX512-NEXT:    kmovw %k1, %eax
4778; AVX512-NEXT:    vpinsrb $9, %eax, %xmm2, %xmm2
4779; AVX512-NEXT:    kshiftlw $5, %k0, %k1
4780; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4781; AVX512-NEXT:    kmovw %k1, %eax
4782; AVX512-NEXT:    vpinsrb $10, %eax, %xmm2, %xmm2
4783; AVX512-NEXT:    kshiftlw $4, %k0, %k1
4784; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4785; AVX512-NEXT:    kmovw %k1, %eax
4786; AVX512-NEXT:    vpinsrb $11, %eax, %xmm2, %xmm2
4787; AVX512-NEXT:    kshiftlw $3, %k0, %k1
4788; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4789; AVX512-NEXT:    kmovw %k1, %eax
4790; AVX512-NEXT:    vpinsrb $12, %eax, %xmm2, %xmm2
4791; AVX512-NEXT:    kshiftlw $2, %k0, %k1
4792; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4793; AVX512-NEXT:    kmovw %k1, %eax
4794; AVX512-NEXT:    vpinsrb $13, %eax, %xmm2, %xmm2
4795; AVX512-NEXT:    kshiftlw $1, %k0, %k1
4796; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4797; AVX512-NEXT:    kmovw %k1, %eax
4798; AVX512-NEXT:    vpinsrb $14, %eax, %xmm2, %xmm2
4799; AVX512-NEXT:    kshiftlw $0, %k0, %k0
4800; AVX512-NEXT:    kshiftrw $15, %k0, %k0
4801; AVX512-NEXT:    kmovw %k0, %eax
4802; AVX512-NEXT:    vpinsrb $15, %eax, %xmm2, %xmm2
4803; AVX512-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
4804; AVX512-NEXT:    vpsllw $7, %ymm2, %ymm3
4805; AVX512-NEXT:    vmovdqa {{.*#+}} ymm2 = [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]
4806; AVX512-NEXT:    vpand %ymm2, %ymm3, %ymm3
4807; AVX512-NEXT:    vpxor %ymm6, %ymm6, %ymm6
4808; AVX512-NEXT:    vpcmpgtb %ymm3, %ymm6, %ymm3
4809; AVX512-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
4810; AVX512-NEXT:    vpmovsxwd %ymm1, %zmm1
4811; AVX512-NEXT:    vpslld $31, %zmm1, %zmm1
4812; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k0
4813; AVX512-NEXT:    kshiftlw $14, %k0, %k1
4814; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4815; AVX512-NEXT:    kmovw %k1, %eax
4816; AVX512-NEXT:    kshiftlw $15, %k0, %k1
4817; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4818; AVX512-NEXT:    kmovw %k1, %ecx
4819; AVX512-NEXT:    vmovd %ecx, %xmm1
4820; AVX512-NEXT:    vpinsrb $1, %eax, %xmm1, %xmm1
4821; AVX512-NEXT:    kshiftlw $13, %k0, %k1
4822; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4823; AVX512-NEXT:    kmovw %k1, %eax
4824; AVX512-NEXT:    vpinsrb $2, %eax, %xmm1, %xmm1
4825; AVX512-NEXT:    kshiftlw $12, %k0, %k1
4826; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4827; AVX512-NEXT:    kmovw %k1, %eax
4828; AVX512-NEXT:    vpinsrb $3, %eax, %xmm1, %xmm1
4829; AVX512-NEXT:    kshiftlw $11, %k0, %k1
4830; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4831; AVX512-NEXT:    kmovw %k1, %eax
4832; AVX512-NEXT:    vpinsrb $4, %eax, %xmm1, %xmm1
4833; AVX512-NEXT:    kshiftlw $10, %k0, %k1
4834; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4835; AVX512-NEXT:    kmovw %k1, %eax
4836; AVX512-NEXT:    vpinsrb $5, %eax, %xmm1, %xmm1
4837; AVX512-NEXT:    kshiftlw $9, %k0, %k1
4838; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4839; AVX512-NEXT:    kmovw %k1, %eax
4840; AVX512-NEXT:    vpinsrb $6, %eax, %xmm1, %xmm1
4841; AVX512-NEXT:    kshiftlw $8, %k0, %k1
4842; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4843; AVX512-NEXT:    kmovw %k1, %eax
4844; AVX512-NEXT:    vpinsrb $7, %eax, %xmm1, %xmm1
4845; AVX512-NEXT:    kshiftlw $7, %k0, %k1
4846; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4847; AVX512-NEXT:    kmovw %k1, %eax
4848; AVX512-NEXT:    vpinsrb $8, %eax, %xmm1, %xmm1
4849; AVX512-NEXT:    kshiftlw $6, %k0, %k1
4850; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4851; AVX512-NEXT:    kmovw %k1, %eax
4852; AVX512-NEXT:    vpinsrb $9, %eax, %xmm1, %xmm1
4853; AVX512-NEXT:    kshiftlw $5, %k0, %k1
4854; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4855; AVX512-NEXT:    kmovw %k1, %eax
4856; AVX512-NEXT:    vpinsrb $10, %eax, %xmm1, %xmm1
4857; AVX512-NEXT:    kshiftlw $4, %k0, %k1
4858; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4859; AVX512-NEXT:    kmovw %k1, %eax
4860; AVX512-NEXT:    vpinsrb $11, %eax, %xmm1, %xmm1
4861; AVX512-NEXT:    kshiftlw $3, %k0, %k1
4862; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4863; AVX512-NEXT:    kmovw %k1, %eax
4864; AVX512-NEXT:    vpinsrb $12, %eax, %xmm1, %xmm1
4865; AVX512-NEXT:    kshiftlw $2, %k0, %k1
4866; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4867; AVX512-NEXT:    kmovw %k1, %eax
4868; AVX512-NEXT:    vpinsrb $13, %eax, %xmm1, %xmm1
4869; AVX512-NEXT:    kshiftlw $1, %k0, %k1
4870; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4871; AVX512-NEXT:    kmovw %k1, %eax
4872; AVX512-NEXT:    vpinsrb $14, %eax, %xmm1, %xmm1
4873; AVX512-NEXT:    kshiftlw $0, %k0, %k0
4874; AVX512-NEXT:    kshiftrw $15, %k0, %k0
4875; AVX512-NEXT:    kmovw %k0, %eax
4876; AVX512-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm1
4877; AVX512-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
4878; AVX512-NEXT:    vpmovsxwd %ymm0, %zmm0
4879; AVX512-NEXT:    vpslld $31, %zmm0, %zmm0
4880; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k0
4881; AVX512-NEXT:    kshiftlw $14, %k0, %k1
4882; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4883; AVX512-NEXT:    kmovw %k1, %eax
4884; AVX512-NEXT:    kshiftlw $15, %k0, %k1
4885; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4886; AVX512-NEXT:    kmovw %k1, %ecx
4887; AVX512-NEXT:    vmovd %ecx, %xmm0
4888; AVX512-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0
4889; AVX512-NEXT:    kshiftlw $13, %k0, %k1
4890; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4891; AVX512-NEXT:    kmovw %k1, %eax
4892; AVX512-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0
4893; AVX512-NEXT:    kshiftlw $12, %k0, %k1
4894; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4895; AVX512-NEXT:    kmovw %k1, %eax
4896; AVX512-NEXT:    vpinsrb $3, %eax, %xmm0, %xmm0
4897; AVX512-NEXT:    kshiftlw $11, %k0, %k1
4898; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4899; AVX512-NEXT:    kmovw %k1, %eax
4900; AVX512-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0
4901; AVX512-NEXT:    kshiftlw $10, %k0, %k1
4902; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4903; AVX512-NEXT:    kmovw %k1, %eax
4904; AVX512-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0
4905; AVX512-NEXT:    kshiftlw $9, %k0, %k1
4906; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4907; AVX512-NEXT:    kmovw %k1, %eax
4908; AVX512-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0
4909; AVX512-NEXT:    kshiftlw $8, %k0, %k1
4910; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4911; AVX512-NEXT:    kmovw %k1, %eax
4912; AVX512-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0
4913; AVX512-NEXT:    kshiftlw $7, %k0, %k1
4914; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4915; AVX512-NEXT:    kmovw %k1, %eax
4916; AVX512-NEXT:    vpinsrb $8, %eax, %xmm0, %xmm0
4917; AVX512-NEXT:    kshiftlw $6, %k0, %k1
4918; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4919; AVX512-NEXT:    kmovw %k1, %eax
4920; AVX512-NEXT:    vpinsrb $9, %eax, %xmm0, %xmm0
4921; AVX512-NEXT:    kshiftlw $5, %k0, %k1
4922; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4923; AVX512-NEXT:    kmovw %k1, %eax
4924; AVX512-NEXT:    vpinsrb $10, %eax, %xmm0, %xmm0
4925; AVX512-NEXT:    kshiftlw $4, %k0, %k1
4926; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4927; AVX512-NEXT:    kmovw %k1, %eax
4928; AVX512-NEXT:    vpinsrb $11, %eax, %xmm0, %xmm0
4929; AVX512-NEXT:    kshiftlw $3, %k0, %k1
4930; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4931; AVX512-NEXT:    kmovw %k1, %eax
4932; AVX512-NEXT:    vpinsrb $12, %eax, %xmm0, %xmm0
4933; AVX512-NEXT:    kshiftlw $2, %k0, %k1
4934; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4935; AVX512-NEXT:    kmovw %k1, %eax
4936; AVX512-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0
4937; AVX512-NEXT:    kshiftlw $1, %k0, %k1
4938; AVX512-NEXT:    kshiftrw $15, %k1, %k1
4939; AVX512-NEXT:    kmovw %k1, %eax
4940; AVX512-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0
4941; AVX512-NEXT:    kshiftlw $0, %k0, %k0
4942; AVX512-NEXT:    kshiftrw $15, %k0, %k0
4943; AVX512-NEXT:    kmovw %k0, %eax
4944; AVX512-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0
4945; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4946; AVX512-NEXT:    vpsllw $7, %ymm0, %ymm0
4947; AVX512-NEXT:    vpand %ymm2, %ymm0, %ymm0
4948; AVX512-NEXT:    vpcmpgtb %ymm0, %ymm6, %ymm1
4949; AVX512-NEXT:    vpsllw $7, %xmm1, %xmm0
4950; AVX512-NEXT:    vmovdqa {{.*#+}} xmm4 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
4951; AVX512-NEXT:    vpand %xmm4, %xmm0, %xmm0
4952; AVX512-NEXT:    vpxor %xmm5, %xmm5, %xmm5
4953; AVX512-NEXT:    vpcmpgtb %xmm0, %xmm5, %xmm0
4954; AVX512-NEXT:    vextracti128 $1, %ymm1, %xmm1
4955; AVX512-NEXT:    vpsllw $7, %xmm1, %xmm1
4956; AVX512-NEXT:    vpand %xmm4, %xmm1, %xmm1
4957; AVX512-NEXT:    vpcmpgtb %xmm1, %xmm5, %xmm1
4958; AVX512-NEXT:    vpsllw $7, %xmm3, %xmm2
4959; AVX512-NEXT:    vpand %xmm4, %xmm2, %xmm2
4960; AVX512-NEXT:    vpcmpgtb %xmm2, %xmm5, %xmm2
4961; AVX512-NEXT:    vextracti128 $1, %ymm3, %xmm3
4962; AVX512-NEXT:    vpsllw $7, %xmm3, %xmm3
4963; AVX512-NEXT:    vpand %xmm4, %xmm3, %xmm3
4964; AVX512-NEXT:    vpcmpgtb %xmm3, %xmm5, %xmm3
4965; AVX512-NEXT:    retq
4966  %1 = icmp sgt <64 x i16> %a0, %a1
4967  ret <64 x i1> %1
4968}
4969
4970define <128 x i1> @test_cmp_v128i8(<128 x i8> %a0, <128 x i8> %a1) nounwind {
4971; SSE2-LABEL: test_cmp_v128i8:
4972; SSE2:       # BB#0:
4973; SSE2-NEXT:    pushq %rax
4974; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
4975; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
4976; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
4977; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
4978; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
4979; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
4980; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
4981; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
4982; SSE2-NEXT:    movdqa %xmm7, -{{[0-9]+}}(%rsp)
4983; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4984; SSE2-NEXT:    andb $1, %al
4985; SSE2-NEXT:    movb %al, 14(%rdi)
4986; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
4987; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4988; SSE2-NEXT:    andb $1, %al
4989; SSE2-NEXT:    movb %al, 12(%rdi)
4990; SSE2-NEXT:    movdqa %xmm5, -{{[0-9]+}}(%rsp)
4991; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4992; SSE2-NEXT:    andb $1, %al
4993; SSE2-NEXT:    movb %al, 10(%rdi)
4994; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
4995; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
4996; SSE2-NEXT:    andb $1, %al
4997; SSE2-NEXT:    movb %al, 8(%rdi)
4998; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
4999; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5000; SSE2-NEXT:    andb $1, %al
5001; SSE2-NEXT:    movb %al, 6(%rdi)
5002; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
5003; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5004; SSE2-NEXT:    andb $1, %al
5005; SSE2-NEXT:    movb %al, 4(%rdi)
5006; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
5007; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5008; SSE2-NEXT:    andb $1, %al
5009; SSE2-NEXT:    movb %al, 2(%rdi)
5010; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
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:    movb -{{[0-9]+}}(%rsp), %al
5039; SSE2-NEXT:    andb $1, %al
5040; SSE2-NEXT:    movb %al, 14(%rdi)
5041; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5042; SSE2-NEXT:    andb $1, %al
5043; SSE2-NEXT:    movb %al, 12(%rdi)
5044; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5045; SSE2-NEXT:    andb $1, %al
5046; SSE2-NEXT:    movb %al, 10(%rdi)
5047; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5048; SSE2-NEXT:    andb $1, %al
5049; SSE2-NEXT:    movb %al, 8(%rdi)
5050; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5051; SSE2-NEXT:    andb $1, %al
5052; SSE2-NEXT:    movb %al, 6(%rdi)
5053; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5054; SSE2-NEXT:    andb $1, %al
5055; SSE2-NEXT:    movb %al, 4(%rdi)
5056; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5057; SSE2-NEXT:    andb $1, %al
5058; SSE2-NEXT:    movb %al, 2(%rdi)
5059; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5060; SSE2-NEXT:    andb $1, %al
5061; SSE2-NEXT:    movb %al, (%rdi)
5062; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5063; SSE2-NEXT:    andb $1, %al
5064; SSE2-NEXT:    movb %al, 14(%rdi)
5065; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5066; SSE2-NEXT:    andb $1, %al
5067; SSE2-NEXT:    movb %al, 12(%rdi)
5068; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5069; SSE2-NEXT:    andb $1, %al
5070; SSE2-NEXT:    movb %al, 10(%rdi)
5071; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5072; SSE2-NEXT:    andb $1, %al
5073; SSE2-NEXT:    movb %al, 8(%rdi)
5074; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5075; SSE2-NEXT:    andb $1, %al
5076; SSE2-NEXT:    movb %al, 6(%rdi)
5077; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5078; SSE2-NEXT:    andb $1, %al
5079; SSE2-NEXT:    movb %al, 4(%rdi)
5080; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5081; SSE2-NEXT:    andb $1, %al
5082; SSE2-NEXT:    movb %al, 2(%rdi)
5083; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5084; SSE2-NEXT:    andb $1, %al
5085; SSE2-NEXT:    movb %al, (%rdi)
5086; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5087; SSE2-NEXT:    andb $1, %al
5088; SSE2-NEXT:    movb %al, 14(%rdi)
5089; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5090; SSE2-NEXT:    andb $1, %al
5091; SSE2-NEXT:    movb %al, 12(%rdi)
5092; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5093; SSE2-NEXT:    andb $1, %al
5094; SSE2-NEXT:    movb %al, 10(%rdi)
5095; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5096; SSE2-NEXT:    andb $1, %al
5097; SSE2-NEXT:    movb %al, 8(%rdi)
5098; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5099; SSE2-NEXT:    andb $1, %al
5100; SSE2-NEXT:    movb %al, 6(%rdi)
5101; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5102; SSE2-NEXT:    andb $1, %al
5103; SSE2-NEXT:    movb %al, 4(%rdi)
5104; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5105; SSE2-NEXT:    andb $1, %al
5106; SSE2-NEXT:    movb %al, 2(%rdi)
5107; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5108; SSE2-NEXT:    andb $1, %al
5109; SSE2-NEXT:    movb %al, (%rdi)
5110; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5111; SSE2-NEXT:    andb $1, %al
5112; SSE2-NEXT:    movb %al, 14(%rdi)
5113; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5114; SSE2-NEXT:    andb $1, %al
5115; SSE2-NEXT:    movb %al, 12(%rdi)
5116; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5117; SSE2-NEXT:    andb $1, %al
5118; SSE2-NEXT:    movb %al, 10(%rdi)
5119; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5120; SSE2-NEXT:    andb $1, %al
5121; SSE2-NEXT:    movb %al, 8(%rdi)
5122; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5123; SSE2-NEXT:    andb $1, %al
5124; SSE2-NEXT:    movb %al, 6(%rdi)
5125; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5126; SSE2-NEXT:    andb $1, %al
5127; SSE2-NEXT:    movb %al, 4(%rdi)
5128; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5129; SSE2-NEXT:    andb $1, %al
5130; SSE2-NEXT:    movb %al, 2(%rdi)
5131; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5132; SSE2-NEXT:    andb $1, %al
5133; SSE2-NEXT:    movb %al, (%rdi)
5134; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5135; SSE2-NEXT:    andb $1, %al
5136; SSE2-NEXT:    movb %al, 14(%rdi)
5137; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5138; SSE2-NEXT:    andb $1, %al
5139; SSE2-NEXT:    movb %al, 12(%rdi)
5140; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5141; SSE2-NEXT:    andb $1, %al
5142; SSE2-NEXT:    movb %al, 10(%rdi)
5143; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5144; SSE2-NEXT:    andb $1, %al
5145; SSE2-NEXT:    movb %al, 8(%rdi)
5146; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5147; SSE2-NEXT:    andb $1, %al
5148; SSE2-NEXT:    movb %al, 6(%rdi)
5149; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5150; SSE2-NEXT:    andb $1, %al
5151; SSE2-NEXT:    movb %al, 4(%rdi)
5152; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5153; SSE2-NEXT:    andb $1, %al
5154; SSE2-NEXT:    movb %al, 2(%rdi)
5155; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5156; SSE2-NEXT:    andb $1, %al
5157; SSE2-NEXT:    movb %al, (%rdi)
5158; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5159; SSE2-NEXT:    andb $1, %al
5160; SSE2-NEXT:    movb %al, 14(%rdi)
5161; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5162; SSE2-NEXT:    andb $1, %al
5163; SSE2-NEXT:    movb %al, 12(%rdi)
5164; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5165; SSE2-NEXT:    andb $1, %al
5166; SSE2-NEXT:    movb %al, 10(%rdi)
5167; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5168; SSE2-NEXT:    andb $1, %al
5169; SSE2-NEXT:    movb %al, 8(%rdi)
5170; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5171; SSE2-NEXT:    andb $1, %al
5172; SSE2-NEXT:    movb %al, 6(%rdi)
5173; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5174; SSE2-NEXT:    andb $1, %al
5175; SSE2-NEXT:    movb %al, 4(%rdi)
5176; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5177; SSE2-NEXT:    andb $1, %al
5178; SSE2-NEXT:    movb %al, 2(%rdi)
5179; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5180; SSE2-NEXT:    andb $1, %al
5181; SSE2-NEXT:    movb %al, (%rdi)
5182; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5183; SSE2-NEXT:    andb $1, %al
5184; SSE2-NEXT:    movb %al, 14(%rdi)
5185; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5186; SSE2-NEXT:    andb $1, %al
5187; SSE2-NEXT:    movb %al, 12(%rdi)
5188; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5189; SSE2-NEXT:    andb $1, %al
5190; SSE2-NEXT:    movb %al, 10(%rdi)
5191; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5192; SSE2-NEXT:    andb $1, %al
5193; SSE2-NEXT:    movb %al, 8(%rdi)
5194; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5195; SSE2-NEXT:    andb $1, %al
5196; SSE2-NEXT:    movb %al, 6(%rdi)
5197; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5198; SSE2-NEXT:    andb $1, %al
5199; SSE2-NEXT:    movb %al, 4(%rdi)
5200; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5201; SSE2-NEXT:    andb $1, %al
5202; SSE2-NEXT:    movb %al, 2(%rdi)
5203; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5204; SSE2-NEXT:    andb $1, %al
5205; SSE2-NEXT:    movb %al, (%rdi)
5206; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5207; SSE2-NEXT:    andb $1, %al
5208; SSE2-NEXT:    movb %al, 14(%rdi)
5209; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5210; SSE2-NEXT:    andb $1, %al
5211; SSE2-NEXT:    movb %al, 12(%rdi)
5212; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5213; SSE2-NEXT:    andb $1, %al
5214; SSE2-NEXT:    movb %al, 10(%rdi)
5215; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5216; SSE2-NEXT:    andb $1, %al
5217; SSE2-NEXT:    movb %al, 8(%rdi)
5218; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5219; SSE2-NEXT:    andb $1, %al
5220; SSE2-NEXT:    movb %al, 6(%rdi)
5221; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5222; SSE2-NEXT:    andb $1, %al
5223; SSE2-NEXT:    movb %al, 4(%rdi)
5224; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5225; SSE2-NEXT:    andb $1, %al
5226; SSE2-NEXT:    movb %al, 2(%rdi)
5227; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5228; SSE2-NEXT:    andb $1, %al
5229; SSE2-NEXT:    movb %al, (%rdi)
5230; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5231; SSE2-NEXT:    andb $1, %al
5232; SSE2-NEXT:    movb %al, 14(%rdi)
5233; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5234; SSE2-NEXT:    andb $1, %al
5235; SSE2-NEXT:    movb %al, 12(%rdi)
5236; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5237; SSE2-NEXT:    andb $1, %al
5238; SSE2-NEXT:    movb %al, 10(%rdi)
5239; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5240; SSE2-NEXT:    andb $1, %al
5241; SSE2-NEXT:    movb %al, 8(%rdi)
5242; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5243; SSE2-NEXT:    andb $1, %al
5244; SSE2-NEXT:    movb %al, 6(%rdi)
5245; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5246; SSE2-NEXT:    andb $1, %al
5247; SSE2-NEXT:    movb %al, 4(%rdi)
5248; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5249; SSE2-NEXT:    andb $1, %al
5250; SSE2-NEXT:    movb %al, 2(%rdi)
5251; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5252; SSE2-NEXT:    andb $1, %al
5253; SSE2-NEXT:    movb %al, (%rdi)
5254; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5255; SSE2-NEXT:    andb $1, %al
5256; SSE2-NEXT:    movb %al, 14(%rdi)
5257; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5258; SSE2-NEXT:    andb $1, %al
5259; SSE2-NEXT:    movb %al, 12(%rdi)
5260; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5261; SSE2-NEXT:    andb $1, %al
5262; SSE2-NEXT:    movb %al, 10(%rdi)
5263; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5264; SSE2-NEXT:    andb $1, %al
5265; SSE2-NEXT:    movb %al, 8(%rdi)
5266; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5267; SSE2-NEXT:    andb $1, %al
5268; SSE2-NEXT:    movb %al, 6(%rdi)
5269; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5270; SSE2-NEXT:    andb $1, %al
5271; SSE2-NEXT:    movb %al, 4(%rdi)
5272; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5273; SSE2-NEXT:    andb $1, %al
5274; SSE2-NEXT:    movb %al, 2(%rdi)
5275; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5276; SSE2-NEXT:    andb $1, %al
5277; SSE2-NEXT:    movb %al, (%rdi)
5278; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5279; SSE2-NEXT:    andb $1, %al
5280; SSE2-NEXT:    movb %al, 14(%rdi)
5281; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5282; SSE2-NEXT:    andb $1, %al
5283; SSE2-NEXT:    movb %al, 12(%rdi)
5284; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5285; SSE2-NEXT:    andb $1, %al
5286; SSE2-NEXT:    movb %al, 10(%rdi)
5287; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5288; SSE2-NEXT:    andb $1, %al
5289; SSE2-NEXT:    movb %al, 8(%rdi)
5290; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5291; SSE2-NEXT:    andb $1, %al
5292; SSE2-NEXT:    movb %al, 6(%rdi)
5293; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5294; SSE2-NEXT:    andb $1, %al
5295; SSE2-NEXT:    movb %al, 4(%rdi)
5296; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5297; SSE2-NEXT:    andb $1, %al
5298; SSE2-NEXT:    movb %al, 2(%rdi)
5299; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5300; SSE2-NEXT:    andb $1, %al
5301; SSE2-NEXT:    movb %al, (%rdi)
5302; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5303; SSE2-NEXT:    andb $1, %al
5304; SSE2-NEXT:    movb %al, 14(%rdi)
5305; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5306; SSE2-NEXT:    andb $1, %al
5307; SSE2-NEXT:    movb %al, 12(%rdi)
5308; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5309; SSE2-NEXT:    andb $1, %al
5310; SSE2-NEXT:    movb %al, 10(%rdi)
5311; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5312; SSE2-NEXT:    andb $1, %al
5313; SSE2-NEXT:    movb %al, 8(%rdi)
5314; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5315; SSE2-NEXT:    andb $1, %al
5316; SSE2-NEXT:    movb %al, 6(%rdi)
5317; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5318; SSE2-NEXT:    andb $1, %al
5319; SSE2-NEXT:    movb %al, 4(%rdi)
5320; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5321; SSE2-NEXT:    andb $1, %al
5322; SSE2-NEXT:    movb %al, 2(%rdi)
5323; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5324; SSE2-NEXT:    andb $1, %al
5325; SSE2-NEXT:    movb %al, (%rdi)
5326; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5327; SSE2-NEXT:    andb $1, %al
5328; SSE2-NEXT:    movb %al, 14(%rdi)
5329; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5330; SSE2-NEXT:    andb $1, %al
5331; SSE2-NEXT:    movb %al, 12(%rdi)
5332; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5333; SSE2-NEXT:    andb $1, %al
5334; SSE2-NEXT:    movb %al, 10(%rdi)
5335; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5336; SSE2-NEXT:    andb $1, %al
5337; SSE2-NEXT:    movb %al, 8(%rdi)
5338; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5339; SSE2-NEXT:    andb $1, %al
5340; SSE2-NEXT:    movb %al, 6(%rdi)
5341; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5342; SSE2-NEXT:    andb $1, %al
5343; SSE2-NEXT:    movb %al, 4(%rdi)
5344; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5345; SSE2-NEXT:    andb $1, %al
5346; SSE2-NEXT:    movb %al, 2(%rdi)
5347; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5348; SSE2-NEXT:    andb $1, %al
5349; SSE2-NEXT:    movb %al, (%rdi)
5350; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5351; SSE2-NEXT:    andb $1, %al
5352; SSE2-NEXT:    movb %al, 14(%rdi)
5353; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5354; SSE2-NEXT:    andb $1, %al
5355; SSE2-NEXT:    movb %al, 12(%rdi)
5356; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5357; SSE2-NEXT:    andb $1, %al
5358; SSE2-NEXT:    movb %al, 10(%rdi)
5359; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5360; SSE2-NEXT:    andb $1, %al
5361; SSE2-NEXT:    movb %al, 8(%rdi)
5362; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5363; SSE2-NEXT:    andb $1, %al
5364; SSE2-NEXT:    movb %al, 6(%rdi)
5365; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5366; SSE2-NEXT:    andb $1, %al
5367; SSE2-NEXT:    movb %al, 4(%rdi)
5368; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5369; SSE2-NEXT:    andb $1, %al
5370; SSE2-NEXT:    movb %al, 2(%rdi)
5371; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
5372; SSE2-NEXT:    andb $1, %al
5373; SSE2-NEXT:    movb %al, (%rdi)
5374; SSE2-NEXT:    movq %rdi, %rax
5375; SSE2-NEXT:    popq %rcx
5376; SSE2-NEXT:    retq
5377;
5378; SSE42-LABEL: test_cmp_v128i8:
5379; SSE42:       # BB#0:
5380; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
5381; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
5382; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
5383; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
5384; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
5385; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
5386; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
5387; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
5388; SSE42-NEXT:    pextrb $15, %xmm7, %eax
5389; SSE42-NEXT:    andb $1, %al
5390; SSE42-NEXT:    movb %al, 14(%rdi)
5391; SSE42-NEXT:    pextrb $14, %xmm7, %eax
5392; SSE42-NEXT:    andb $1, %al
5393; SSE42-NEXT:    movb %al, 14(%rdi)
5394; SSE42-NEXT:    pextrb $13, %xmm7, %eax
5395; SSE42-NEXT:    andb $1, %al
5396; SSE42-NEXT:    movb %al, 14(%rdi)
5397; SSE42-NEXT:    pextrb $12, %xmm7, %eax
5398; SSE42-NEXT:    andb $1, %al
5399; SSE42-NEXT:    movb %al, 14(%rdi)
5400; SSE42-NEXT:    pextrb $11, %xmm7, %eax
5401; SSE42-NEXT:    andb $1, %al
5402; SSE42-NEXT:    movb %al, 14(%rdi)
5403; SSE42-NEXT:    pextrb $10, %xmm7, %eax
5404; SSE42-NEXT:    andb $1, %al
5405; SSE42-NEXT:    movb %al, 14(%rdi)
5406; SSE42-NEXT:    pextrb $9, %xmm7, %eax
5407; SSE42-NEXT:    andb $1, %al
5408; SSE42-NEXT:    movb %al, 14(%rdi)
5409; SSE42-NEXT:    pextrb $8, %xmm7, %eax
5410; SSE42-NEXT:    andb $1, %al
5411; SSE42-NEXT:    movb %al, 14(%rdi)
5412; SSE42-NEXT:    pextrb $7, %xmm7, %eax
5413; SSE42-NEXT:    andb $1, %al
5414; SSE42-NEXT:    movb %al, 14(%rdi)
5415; SSE42-NEXT:    pextrb $6, %xmm7, %eax
5416; SSE42-NEXT:    andb $1, %al
5417; SSE42-NEXT:    movb %al, 14(%rdi)
5418; SSE42-NEXT:    pextrb $5, %xmm7, %eax
5419; SSE42-NEXT:    andb $1, %al
5420; SSE42-NEXT:    movb %al, 14(%rdi)
5421; SSE42-NEXT:    pextrb $4, %xmm7, %eax
5422; SSE42-NEXT:    andb $1, %al
5423; SSE42-NEXT:    movb %al, 14(%rdi)
5424; SSE42-NEXT:    pextrb $3, %xmm7, %eax
5425; SSE42-NEXT:    andb $1, %al
5426; SSE42-NEXT:    movb %al, 14(%rdi)
5427; SSE42-NEXT:    pextrb $2, %xmm7, %eax
5428; SSE42-NEXT:    andb $1, %al
5429; SSE42-NEXT:    movb %al, 14(%rdi)
5430; SSE42-NEXT:    pextrb $1, %xmm7, %eax
5431; SSE42-NEXT:    andb $1, %al
5432; SSE42-NEXT:    movb %al, 14(%rdi)
5433; SSE42-NEXT:    pextrb $0, %xmm7, %eax
5434; SSE42-NEXT:    andb $1, %al
5435; SSE42-NEXT:    movb %al, 14(%rdi)
5436; SSE42-NEXT:    pextrb $15, %xmm6, %eax
5437; SSE42-NEXT:    andb $1, %al
5438; SSE42-NEXT:    movb %al, 12(%rdi)
5439; SSE42-NEXT:    pextrb $14, %xmm6, %eax
5440; SSE42-NEXT:    andb $1, %al
5441; SSE42-NEXT:    movb %al, 12(%rdi)
5442; SSE42-NEXT:    pextrb $13, %xmm6, %eax
5443; SSE42-NEXT:    andb $1, %al
5444; SSE42-NEXT:    movb %al, 12(%rdi)
5445; SSE42-NEXT:    pextrb $12, %xmm6, %eax
5446; SSE42-NEXT:    andb $1, %al
5447; SSE42-NEXT:    movb %al, 12(%rdi)
5448; SSE42-NEXT:    pextrb $11, %xmm6, %eax
5449; SSE42-NEXT:    andb $1, %al
5450; SSE42-NEXT:    movb %al, 12(%rdi)
5451; SSE42-NEXT:    pextrb $10, %xmm6, %eax
5452; SSE42-NEXT:    andb $1, %al
5453; SSE42-NEXT:    movb %al, 12(%rdi)
5454; SSE42-NEXT:    pextrb $9, %xmm6, %eax
5455; SSE42-NEXT:    andb $1, %al
5456; SSE42-NEXT:    movb %al, 12(%rdi)
5457; SSE42-NEXT:    pextrb $8, %xmm6, %eax
5458; SSE42-NEXT:    andb $1, %al
5459; SSE42-NEXT:    movb %al, 12(%rdi)
5460; SSE42-NEXT:    pextrb $7, %xmm6, %eax
5461; SSE42-NEXT:    andb $1, %al
5462; SSE42-NEXT:    movb %al, 12(%rdi)
5463; SSE42-NEXT:    pextrb $6, %xmm6, %eax
5464; SSE42-NEXT:    andb $1, %al
5465; SSE42-NEXT:    movb %al, 12(%rdi)
5466; SSE42-NEXT:    pextrb $5, %xmm6, %eax
5467; SSE42-NEXT:    andb $1, %al
5468; SSE42-NEXT:    movb %al, 12(%rdi)
5469; SSE42-NEXT:    pextrb $4, %xmm6, %eax
5470; SSE42-NEXT:    andb $1, %al
5471; SSE42-NEXT:    movb %al, 12(%rdi)
5472; SSE42-NEXT:    pextrb $3, %xmm6, %eax
5473; SSE42-NEXT:    andb $1, %al
5474; SSE42-NEXT:    movb %al, 12(%rdi)
5475; SSE42-NEXT:    pextrb $2, %xmm6, %eax
5476; SSE42-NEXT:    andb $1, %al
5477; SSE42-NEXT:    movb %al, 12(%rdi)
5478; SSE42-NEXT:    pextrb $1, %xmm6, %eax
5479; SSE42-NEXT:    andb $1, %al
5480; SSE42-NEXT:    movb %al, 12(%rdi)
5481; SSE42-NEXT:    pextrb $0, %xmm6, %eax
5482; SSE42-NEXT:    andb $1, %al
5483; SSE42-NEXT:    movb %al, 12(%rdi)
5484; SSE42-NEXT:    pextrb $15, %xmm5, %eax
5485; SSE42-NEXT:    andb $1, %al
5486; SSE42-NEXT:    movb %al, 10(%rdi)
5487; SSE42-NEXT:    pextrb $14, %xmm5, %eax
5488; SSE42-NEXT:    andb $1, %al
5489; SSE42-NEXT:    movb %al, 10(%rdi)
5490; SSE42-NEXT:    pextrb $13, %xmm5, %eax
5491; SSE42-NEXT:    andb $1, %al
5492; SSE42-NEXT:    movb %al, 10(%rdi)
5493; SSE42-NEXT:    pextrb $12, %xmm5, %eax
5494; SSE42-NEXT:    andb $1, %al
5495; SSE42-NEXT:    movb %al, 10(%rdi)
5496; SSE42-NEXT:    pextrb $11, %xmm5, %eax
5497; SSE42-NEXT:    andb $1, %al
5498; SSE42-NEXT:    movb %al, 10(%rdi)
5499; SSE42-NEXT:    pextrb $10, %xmm5, %eax
5500; SSE42-NEXT:    andb $1, %al
5501; SSE42-NEXT:    movb %al, 10(%rdi)
5502; SSE42-NEXT:    pextrb $9, %xmm5, %eax
5503; SSE42-NEXT:    andb $1, %al
5504; SSE42-NEXT:    movb %al, 10(%rdi)
5505; SSE42-NEXT:    pextrb $8, %xmm5, %eax
5506; SSE42-NEXT:    andb $1, %al
5507; SSE42-NEXT:    movb %al, 10(%rdi)
5508; SSE42-NEXT:    pextrb $7, %xmm5, %eax
5509; SSE42-NEXT:    andb $1, %al
5510; SSE42-NEXT:    movb %al, 10(%rdi)
5511; SSE42-NEXT:    pextrb $6, %xmm5, %eax
5512; SSE42-NEXT:    andb $1, %al
5513; SSE42-NEXT:    movb %al, 10(%rdi)
5514; SSE42-NEXT:    pextrb $5, %xmm5, %eax
5515; SSE42-NEXT:    andb $1, %al
5516; SSE42-NEXT:    movb %al, 10(%rdi)
5517; SSE42-NEXT:    pextrb $4, %xmm5, %eax
5518; SSE42-NEXT:    andb $1, %al
5519; SSE42-NEXT:    movb %al, 10(%rdi)
5520; SSE42-NEXT:    pextrb $3, %xmm5, %eax
5521; SSE42-NEXT:    andb $1, %al
5522; SSE42-NEXT:    movb %al, 10(%rdi)
5523; SSE42-NEXT:    pextrb $2, %xmm5, %eax
5524; SSE42-NEXT:    andb $1, %al
5525; SSE42-NEXT:    movb %al, 10(%rdi)
5526; SSE42-NEXT:    pextrb $1, %xmm5, %eax
5527; SSE42-NEXT:    andb $1, %al
5528; SSE42-NEXT:    movb %al, 10(%rdi)
5529; SSE42-NEXT:    pextrb $0, %xmm5, %eax
5530; SSE42-NEXT:    andb $1, %al
5531; SSE42-NEXT:    movb %al, 10(%rdi)
5532; SSE42-NEXT:    pextrb $15, %xmm4, %eax
5533; SSE42-NEXT:    andb $1, %al
5534; SSE42-NEXT:    movb %al, 8(%rdi)
5535; SSE42-NEXT:    pextrb $14, %xmm4, %eax
5536; SSE42-NEXT:    andb $1, %al
5537; SSE42-NEXT:    movb %al, 8(%rdi)
5538; SSE42-NEXT:    pextrb $13, %xmm4, %eax
5539; SSE42-NEXT:    andb $1, %al
5540; SSE42-NEXT:    movb %al, 8(%rdi)
5541; SSE42-NEXT:    pextrb $12, %xmm4, %eax
5542; SSE42-NEXT:    andb $1, %al
5543; SSE42-NEXT:    movb %al, 8(%rdi)
5544; SSE42-NEXT:    pextrb $11, %xmm4, %eax
5545; SSE42-NEXT:    andb $1, %al
5546; SSE42-NEXT:    movb %al, 8(%rdi)
5547; SSE42-NEXT:    pextrb $10, %xmm4, %eax
5548; SSE42-NEXT:    andb $1, %al
5549; SSE42-NEXT:    movb %al, 8(%rdi)
5550; SSE42-NEXT:    pextrb $9, %xmm4, %eax
5551; SSE42-NEXT:    andb $1, %al
5552; SSE42-NEXT:    movb %al, 8(%rdi)
5553; SSE42-NEXT:    pextrb $8, %xmm4, %eax
5554; SSE42-NEXT:    andb $1, %al
5555; SSE42-NEXT:    movb %al, 8(%rdi)
5556; SSE42-NEXT:    pextrb $7, %xmm4, %eax
5557; SSE42-NEXT:    andb $1, %al
5558; SSE42-NEXT:    movb %al, 8(%rdi)
5559; SSE42-NEXT:    pextrb $6, %xmm4, %eax
5560; SSE42-NEXT:    andb $1, %al
5561; SSE42-NEXT:    movb %al, 8(%rdi)
5562; SSE42-NEXT:    pextrb $5, %xmm4, %eax
5563; SSE42-NEXT:    andb $1, %al
5564; SSE42-NEXT:    movb %al, 8(%rdi)
5565; SSE42-NEXT:    pextrb $4, %xmm4, %eax
5566; SSE42-NEXT:    andb $1, %al
5567; SSE42-NEXT:    movb %al, 8(%rdi)
5568; SSE42-NEXT:    pextrb $3, %xmm4, %eax
5569; SSE42-NEXT:    andb $1, %al
5570; SSE42-NEXT:    movb %al, 8(%rdi)
5571; SSE42-NEXT:    pextrb $2, %xmm4, %eax
5572; SSE42-NEXT:    andb $1, %al
5573; SSE42-NEXT:    movb %al, 8(%rdi)
5574; SSE42-NEXT:    pextrb $1, %xmm4, %eax
5575; SSE42-NEXT:    andb $1, %al
5576; SSE42-NEXT:    movb %al, 8(%rdi)
5577; SSE42-NEXT:    pextrb $0, %xmm4, %eax
5578; SSE42-NEXT:    andb $1, %al
5579; SSE42-NEXT:    movb %al, 8(%rdi)
5580; SSE42-NEXT:    pextrb $15, %xmm3, %eax
5581; SSE42-NEXT:    andb $1, %al
5582; SSE42-NEXT:    movb %al, 6(%rdi)
5583; SSE42-NEXT:    pextrb $14, %xmm3, %eax
5584; SSE42-NEXT:    andb $1, %al
5585; SSE42-NEXT:    movb %al, 6(%rdi)
5586; SSE42-NEXT:    pextrb $13, %xmm3, %eax
5587; SSE42-NEXT:    andb $1, %al
5588; SSE42-NEXT:    movb %al, 6(%rdi)
5589; SSE42-NEXT:    pextrb $12, %xmm3, %eax
5590; SSE42-NEXT:    andb $1, %al
5591; SSE42-NEXT:    movb %al, 6(%rdi)
5592; SSE42-NEXT:    pextrb $11, %xmm3, %eax
5593; SSE42-NEXT:    andb $1, %al
5594; SSE42-NEXT:    movb %al, 6(%rdi)
5595; SSE42-NEXT:    pextrb $10, %xmm3, %eax
5596; SSE42-NEXT:    andb $1, %al
5597; SSE42-NEXT:    movb %al, 6(%rdi)
5598; SSE42-NEXT:    pextrb $9, %xmm3, %eax
5599; SSE42-NEXT:    andb $1, %al
5600; SSE42-NEXT:    movb %al, 6(%rdi)
5601; SSE42-NEXT:    pextrb $8, %xmm3, %eax
5602; SSE42-NEXT:    andb $1, %al
5603; SSE42-NEXT:    movb %al, 6(%rdi)
5604; SSE42-NEXT:    pextrb $7, %xmm3, %eax
5605; SSE42-NEXT:    andb $1, %al
5606; SSE42-NEXT:    movb %al, 6(%rdi)
5607; SSE42-NEXT:    pextrb $6, %xmm3, %eax
5608; SSE42-NEXT:    andb $1, %al
5609; SSE42-NEXT:    movb %al, 6(%rdi)
5610; SSE42-NEXT:    pextrb $5, %xmm3, %eax
5611; SSE42-NEXT:    andb $1, %al
5612; SSE42-NEXT:    movb %al, 6(%rdi)
5613; SSE42-NEXT:    pextrb $4, %xmm3, %eax
5614; SSE42-NEXT:    andb $1, %al
5615; SSE42-NEXT:    movb %al, 6(%rdi)
5616; SSE42-NEXT:    pextrb $3, %xmm3, %eax
5617; SSE42-NEXT:    andb $1, %al
5618; SSE42-NEXT:    movb %al, 6(%rdi)
5619; SSE42-NEXT:    pextrb $2, %xmm3, %eax
5620; SSE42-NEXT:    andb $1, %al
5621; SSE42-NEXT:    movb %al, 6(%rdi)
5622; SSE42-NEXT:    pextrb $1, %xmm3, %eax
5623; SSE42-NEXT:    andb $1, %al
5624; SSE42-NEXT:    movb %al, 6(%rdi)
5625; SSE42-NEXT:    pextrb $0, %xmm3, %eax
5626; SSE42-NEXT:    andb $1, %al
5627; SSE42-NEXT:    movb %al, 6(%rdi)
5628; SSE42-NEXT:    pextrb $15, %xmm2, %eax
5629; SSE42-NEXT:    andb $1, %al
5630; SSE42-NEXT:    movb %al, 4(%rdi)
5631; SSE42-NEXT:    pextrb $14, %xmm2, %eax
5632; SSE42-NEXT:    andb $1, %al
5633; SSE42-NEXT:    movb %al, 4(%rdi)
5634; SSE42-NEXT:    pextrb $13, %xmm2, %eax
5635; SSE42-NEXT:    andb $1, %al
5636; SSE42-NEXT:    movb %al, 4(%rdi)
5637; SSE42-NEXT:    pextrb $12, %xmm2, %eax
5638; SSE42-NEXT:    andb $1, %al
5639; SSE42-NEXT:    movb %al, 4(%rdi)
5640; SSE42-NEXT:    pextrb $11, %xmm2, %eax
5641; SSE42-NEXT:    andb $1, %al
5642; SSE42-NEXT:    movb %al, 4(%rdi)
5643; SSE42-NEXT:    pextrb $10, %xmm2, %eax
5644; SSE42-NEXT:    andb $1, %al
5645; SSE42-NEXT:    movb %al, 4(%rdi)
5646; SSE42-NEXT:    pextrb $9, %xmm2, %eax
5647; SSE42-NEXT:    andb $1, %al
5648; SSE42-NEXT:    movb %al, 4(%rdi)
5649; SSE42-NEXT:    pextrb $8, %xmm2, %eax
5650; SSE42-NEXT:    andb $1, %al
5651; SSE42-NEXT:    movb %al, 4(%rdi)
5652; SSE42-NEXT:    pextrb $7, %xmm2, %eax
5653; SSE42-NEXT:    andb $1, %al
5654; SSE42-NEXT:    movb %al, 4(%rdi)
5655; SSE42-NEXT:    pextrb $6, %xmm2, %eax
5656; SSE42-NEXT:    andb $1, %al
5657; SSE42-NEXT:    movb %al, 4(%rdi)
5658; SSE42-NEXT:    pextrb $5, %xmm2, %eax
5659; SSE42-NEXT:    andb $1, %al
5660; SSE42-NEXT:    movb %al, 4(%rdi)
5661; SSE42-NEXT:    pextrb $4, %xmm2, %eax
5662; SSE42-NEXT:    andb $1, %al
5663; SSE42-NEXT:    movb %al, 4(%rdi)
5664; SSE42-NEXT:    pextrb $3, %xmm2, %eax
5665; SSE42-NEXT:    andb $1, %al
5666; SSE42-NEXT:    movb %al, 4(%rdi)
5667; SSE42-NEXT:    pextrb $2, %xmm2, %eax
5668; SSE42-NEXT:    andb $1, %al
5669; SSE42-NEXT:    movb %al, 4(%rdi)
5670; SSE42-NEXT:    pextrb $1, %xmm2, %eax
5671; SSE42-NEXT:    andb $1, %al
5672; SSE42-NEXT:    movb %al, 4(%rdi)
5673; SSE42-NEXT:    pextrb $0, %xmm2, %eax
5674; SSE42-NEXT:    andb $1, %al
5675; SSE42-NEXT:    movb %al, 4(%rdi)
5676; SSE42-NEXT:    pextrb $15, %xmm1, %eax
5677; SSE42-NEXT:    andb $1, %al
5678; SSE42-NEXT:    movb %al, 2(%rdi)
5679; SSE42-NEXT:    pextrb $14, %xmm1, %eax
5680; SSE42-NEXT:    andb $1, %al
5681; SSE42-NEXT:    movb %al, 2(%rdi)
5682; SSE42-NEXT:    pextrb $13, %xmm1, %eax
5683; SSE42-NEXT:    andb $1, %al
5684; SSE42-NEXT:    movb %al, 2(%rdi)
5685; SSE42-NEXT:    pextrb $12, %xmm1, %eax
5686; SSE42-NEXT:    andb $1, %al
5687; SSE42-NEXT:    movb %al, 2(%rdi)
5688; SSE42-NEXT:    pextrb $11, %xmm1, %eax
5689; SSE42-NEXT:    andb $1, %al
5690; SSE42-NEXT:    movb %al, 2(%rdi)
5691; SSE42-NEXT:    pextrb $10, %xmm1, %eax
5692; SSE42-NEXT:    andb $1, %al
5693; SSE42-NEXT:    movb %al, 2(%rdi)
5694; SSE42-NEXT:    pextrb $9, %xmm1, %eax
5695; SSE42-NEXT:    andb $1, %al
5696; SSE42-NEXT:    movb %al, 2(%rdi)
5697; SSE42-NEXT:    pextrb $8, %xmm1, %eax
5698; SSE42-NEXT:    andb $1, %al
5699; SSE42-NEXT:    movb %al, 2(%rdi)
5700; SSE42-NEXT:    pextrb $7, %xmm1, %eax
5701; SSE42-NEXT:    andb $1, %al
5702; SSE42-NEXT:    movb %al, 2(%rdi)
5703; SSE42-NEXT:    pextrb $6, %xmm1, %eax
5704; SSE42-NEXT:    andb $1, %al
5705; SSE42-NEXT:    movb %al, 2(%rdi)
5706; SSE42-NEXT:    pextrb $5, %xmm1, %eax
5707; SSE42-NEXT:    andb $1, %al
5708; SSE42-NEXT:    movb %al, 2(%rdi)
5709; SSE42-NEXT:    pextrb $4, %xmm1, %eax
5710; SSE42-NEXT:    andb $1, %al
5711; SSE42-NEXT:    movb %al, 2(%rdi)
5712; SSE42-NEXT:    pextrb $3, %xmm1, %eax
5713; SSE42-NEXT:    andb $1, %al
5714; SSE42-NEXT:    movb %al, 2(%rdi)
5715; SSE42-NEXT:    pextrb $2, %xmm1, %eax
5716; SSE42-NEXT:    andb $1, %al
5717; SSE42-NEXT:    movb %al, 2(%rdi)
5718; SSE42-NEXT:    pextrb $1, %xmm1, %eax
5719; SSE42-NEXT:    andb $1, %al
5720; SSE42-NEXT:    movb %al, 2(%rdi)
5721; SSE42-NEXT:    pextrb $0, %xmm1, %eax
5722; SSE42-NEXT:    andb $1, %al
5723; SSE42-NEXT:    movb %al, 2(%rdi)
5724; SSE42-NEXT:    pextrb $15, %xmm0, %eax
5725; SSE42-NEXT:    andb $1, %al
5726; SSE42-NEXT:    movb %al, (%rdi)
5727; SSE42-NEXT:    pextrb $14, %xmm0, %eax
5728; SSE42-NEXT:    andb $1, %al
5729; SSE42-NEXT:    movb %al, (%rdi)
5730; SSE42-NEXT:    pextrb $13, %xmm0, %eax
5731; SSE42-NEXT:    andb $1, %al
5732; SSE42-NEXT:    movb %al, (%rdi)
5733; SSE42-NEXT:    pextrb $12, %xmm0, %eax
5734; SSE42-NEXT:    andb $1, %al
5735; SSE42-NEXT:    movb %al, (%rdi)
5736; SSE42-NEXT:    pextrb $11, %xmm0, %eax
5737; SSE42-NEXT:    andb $1, %al
5738; SSE42-NEXT:    movb %al, (%rdi)
5739; SSE42-NEXT:    pextrb $10, %xmm0, %eax
5740; SSE42-NEXT:    andb $1, %al
5741; SSE42-NEXT:    movb %al, (%rdi)
5742; SSE42-NEXT:    pextrb $9, %xmm0, %eax
5743; SSE42-NEXT:    andb $1, %al
5744; SSE42-NEXT:    movb %al, (%rdi)
5745; SSE42-NEXT:    pextrb $8, %xmm0, %eax
5746; SSE42-NEXT:    andb $1, %al
5747; SSE42-NEXT:    movb %al, (%rdi)
5748; SSE42-NEXT:    pextrb $7, %xmm0, %eax
5749; SSE42-NEXT:    andb $1, %al
5750; SSE42-NEXT:    movb %al, (%rdi)
5751; SSE42-NEXT:    pextrb $6, %xmm0, %eax
5752; SSE42-NEXT:    andb $1, %al
5753; SSE42-NEXT:    movb %al, (%rdi)
5754; SSE42-NEXT:    pextrb $5, %xmm0, %eax
5755; SSE42-NEXT:    andb $1, %al
5756; SSE42-NEXT:    movb %al, (%rdi)
5757; SSE42-NEXT:    pextrb $4, %xmm0, %eax
5758; SSE42-NEXT:    andb $1, %al
5759; SSE42-NEXT:    movb %al, (%rdi)
5760; SSE42-NEXT:    pextrb $3, %xmm0, %eax
5761; SSE42-NEXT:    andb $1, %al
5762; SSE42-NEXT:    movb %al, (%rdi)
5763; SSE42-NEXT:    pextrb $2, %xmm0, %eax
5764; SSE42-NEXT:    andb $1, %al
5765; SSE42-NEXT:    movb %al, (%rdi)
5766; SSE42-NEXT:    pextrb $1, %xmm0, %eax
5767; SSE42-NEXT:    andb $1, %al
5768; SSE42-NEXT:    movb %al, (%rdi)
5769; SSE42-NEXT:    pextrb $0, %xmm0, %eax
5770; SSE42-NEXT:    andb $1, %al
5771; SSE42-NEXT:    movb %al, (%rdi)
5772; SSE42-NEXT:    movq %rdi, %rax
5773; SSE42-NEXT:    retq
5774;
5775; AVX1-LABEL: test_cmp_v128i8:
5776; AVX1:       # BB#0:
5777; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm8
5778; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm4
5779; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5780; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm0
5781; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm4
5782; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm5
5783; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
5784; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm1
5785; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm5
5786; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm6
5787; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
5788; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm2
5789; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm6
5790; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm7
5791; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
5792; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm3
5793; AVX1-NEXT:    vpextrb $15, %xmm3, %eax
5794; AVX1-NEXT:    andb $1, %al
5795; AVX1-NEXT:    movb %al, 12(%rdi)
5796; AVX1-NEXT:    vpextrb $14, %xmm3, %eax
5797; AVX1-NEXT:    andb $1, %al
5798; AVX1-NEXT:    movb %al, 12(%rdi)
5799; AVX1-NEXT:    vpextrb $13, %xmm3, %eax
5800; AVX1-NEXT:    andb $1, %al
5801; AVX1-NEXT:    movb %al, 12(%rdi)
5802; AVX1-NEXT:    vpextrb $12, %xmm3, %eax
5803; AVX1-NEXT:    andb $1, %al
5804; AVX1-NEXT:    movb %al, 12(%rdi)
5805; AVX1-NEXT:    vpextrb $11, %xmm3, %eax
5806; AVX1-NEXT:    andb $1, %al
5807; AVX1-NEXT:    movb %al, 12(%rdi)
5808; AVX1-NEXT:    vpextrb $10, %xmm3, %eax
5809; AVX1-NEXT:    andb $1, %al
5810; AVX1-NEXT:    movb %al, 12(%rdi)
5811; AVX1-NEXT:    vpextrb $9, %xmm3, %eax
5812; AVX1-NEXT:    andb $1, %al
5813; AVX1-NEXT:    movb %al, 12(%rdi)
5814; AVX1-NEXT:    vpextrb $8, %xmm3, %eax
5815; AVX1-NEXT:    andb $1, %al
5816; AVX1-NEXT:    movb %al, 12(%rdi)
5817; AVX1-NEXT:    vpextrb $7, %xmm3, %eax
5818; AVX1-NEXT:    andb $1, %al
5819; AVX1-NEXT:    movb %al, 12(%rdi)
5820; AVX1-NEXT:    vpextrb $6, %xmm3, %eax
5821; AVX1-NEXT:    andb $1, %al
5822; AVX1-NEXT:    movb %al, 12(%rdi)
5823; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
5824; AVX1-NEXT:    andb $1, %al
5825; AVX1-NEXT:    movb %al, 12(%rdi)
5826; AVX1-NEXT:    vpextrb $4, %xmm3, %eax
5827; AVX1-NEXT:    andb $1, %al
5828; AVX1-NEXT:    movb %al, 12(%rdi)
5829; AVX1-NEXT:    vpextrb $3, %xmm3, %eax
5830; AVX1-NEXT:    andb $1, %al
5831; AVX1-NEXT:    movb %al, 12(%rdi)
5832; AVX1-NEXT:    vpextrb $2, %xmm3, %eax
5833; AVX1-NEXT:    andb $1, %al
5834; AVX1-NEXT:    movb %al, 12(%rdi)
5835; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
5836; AVX1-NEXT:    andb $1, %al
5837; AVX1-NEXT:    movb %al, 12(%rdi)
5838; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
5839; AVX1-NEXT:    andb $1, %al
5840; AVX1-NEXT:    movb %al, 12(%rdi)
5841; AVX1-NEXT:    vpextrb $15, %xmm6, %eax
5842; AVX1-NEXT:    andb $1, %al
5843; AVX1-NEXT:    movb %al, 12(%rdi)
5844; AVX1-NEXT:    vpextrb $14, %xmm6, %eax
5845; AVX1-NEXT:    andb $1, %al
5846; AVX1-NEXT:    movb %al, 12(%rdi)
5847; AVX1-NEXT:    vpextrb $13, %xmm6, %eax
5848; AVX1-NEXT:    andb $1, %al
5849; AVX1-NEXT:    movb %al, 12(%rdi)
5850; AVX1-NEXT:    vpextrb $12, %xmm6, %eax
5851; AVX1-NEXT:    andb $1, %al
5852; AVX1-NEXT:    movb %al, 12(%rdi)
5853; AVX1-NEXT:    vpextrb $11, %xmm6, %eax
5854; AVX1-NEXT:    andb $1, %al
5855; AVX1-NEXT:    movb %al, 12(%rdi)
5856; AVX1-NEXT:    vpextrb $10, %xmm6, %eax
5857; AVX1-NEXT:    andb $1, %al
5858; AVX1-NEXT:    movb %al, 12(%rdi)
5859; AVX1-NEXT:    vpextrb $9, %xmm6, %eax
5860; AVX1-NEXT:    andb $1, %al
5861; AVX1-NEXT:    movb %al, 12(%rdi)
5862; AVX1-NEXT:    vpextrb $8, %xmm6, %eax
5863; AVX1-NEXT:    andb $1, %al
5864; AVX1-NEXT:    movb %al, 12(%rdi)
5865; AVX1-NEXT:    vpextrb $7, %xmm6, %eax
5866; AVX1-NEXT:    andb $1, %al
5867; AVX1-NEXT:    movb %al, 12(%rdi)
5868; AVX1-NEXT:    vpextrb $6, %xmm6, %eax
5869; AVX1-NEXT:    andb $1, %al
5870; AVX1-NEXT:    movb %al, 12(%rdi)
5871; AVX1-NEXT:    vpextrb $5, %xmm6, %eax
5872; AVX1-NEXT:    andb $1, %al
5873; AVX1-NEXT:    movb %al, 12(%rdi)
5874; AVX1-NEXT:    vpextrb $4, %xmm6, %eax
5875; AVX1-NEXT:    andb $1, %al
5876; AVX1-NEXT:    movb %al, 12(%rdi)
5877; AVX1-NEXT:    vpextrb $3, %xmm6, %eax
5878; AVX1-NEXT:    andb $1, %al
5879; AVX1-NEXT:    movb %al, 12(%rdi)
5880; AVX1-NEXT:    vpextrb $2, %xmm6, %eax
5881; AVX1-NEXT:    andb $1, %al
5882; AVX1-NEXT:    movb %al, 12(%rdi)
5883; AVX1-NEXT:    vpextrb $1, %xmm6, %eax
5884; AVX1-NEXT:    andb $1, %al
5885; AVX1-NEXT:    movb %al, 12(%rdi)
5886; AVX1-NEXT:    vpextrb $0, %xmm6, %eax
5887; AVX1-NEXT:    andb $1, %al
5888; AVX1-NEXT:    movb %al, 12(%rdi)
5889; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
5890; AVX1-NEXT:    andb $1, %al
5891; AVX1-NEXT:    movb %al, 8(%rdi)
5892; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
5893; AVX1-NEXT:    andb $1, %al
5894; AVX1-NEXT:    movb %al, 8(%rdi)
5895; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
5896; AVX1-NEXT:    andb $1, %al
5897; AVX1-NEXT:    movb %al, 8(%rdi)
5898; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
5899; AVX1-NEXT:    andb $1, %al
5900; AVX1-NEXT:    movb %al, 8(%rdi)
5901; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
5902; AVX1-NEXT:    andb $1, %al
5903; AVX1-NEXT:    movb %al, 8(%rdi)
5904; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
5905; AVX1-NEXT:    andb $1, %al
5906; AVX1-NEXT:    movb %al, 8(%rdi)
5907; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
5908; AVX1-NEXT:    andb $1, %al
5909; AVX1-NEXT:    movb %al, 8(%rdi)
5910; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
5911; AVX1-NEXT:    andb $1, %al
5912; AVX1-NEXT:    movb %al, 8(%rdi)
5913; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
5914; AVX1-NEXT:    andb $1, %al
5915; AVX1-NEXT:    movb %al, 8(%rdi)
5916; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
5917; AVX1-NEXT:    andb $1, %al
5918; AVX1-NEXT:    movb %al, 8(%rdi)
5919; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
5920; AVX1-NEXT:    andb $1, %al
5921; AVX1-NEXT:    movb %al, 8(%rdi)
5922; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
5923; AVX1-NEXT:    andb $1, %al
5924; AVX1-NEXT:    movb %al, 8(%rdi)
5925; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
5926; AVX1-NEXT:    andb $1, %al
5927; AVX1-NEXT:    movb %al, 8(%rdi)
5928; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
5929; AVX1-NEXT:    andb $1, %al
5930; AVX1-NEXT:    movb %al, 8(%rdi)
5931; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
5932; AVX1-NEXT:    andb $1, %al
5933; AVX1-NEXT:    movb %al, 8(%rdi)
5934; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
5935; AVX1-NEXT:    andb $1, %al
5936; AVX1-NEXT:    movb %al, 8(%rdi)
5937; AVX1-NEXT:    vpextrb $15, %xmm5, %eax
5938; AVX1-NEXT:    andb $1, %al
5939; AVX1-NEXT:    movb %al, 8(%rdi)
5940; AVX1-NEXT:    vpextrb $14, %xmm5, %eax
5941; AVX1-NEXT:    andb $1, %al
5942; AVX1-NEXT:    movb %al, 8(%rdi)
5943; AVX1-NEXT:    vpextrb $13, %xmm5, %eax
5944; AVX1-NEXT:    andb $1, %al
5945; AVX1-NEXT:    movb %al, 8(%rdi)
5946; AVX1-NEXT:    vpextrb $12, %xmm5, %eax
5947; AVX1-NEXT:    andb $1, %al
5948; AVX1-NEXT:    movb %al, 8(%rdi)
5949; AVX1-NEXT:    vpextrb $11, %xmm5, %eax
5950; AVX1-NEXT:    andb $1, %al
5951; AVX1-NEXT:    movb %al, 8(%rdi)
5952; AVX1-NEXT:    vpextrb $10, %xmm5, %eax
5953; AVX1-NEXT:    andb $1, %al
5954; AVX1-NEXT:    movb %al, 8(%rdi)
5955; AVX1-NEXT:    vpextrb $9, %xmm5, %eax
5956; AVX1-NEXT:    andb $1, %al
5957; AVX1-NEXT:    movb %al, 8(%rdi)
5958; AVX1-NEXT:    vpextrb $8, %xmm5, %eax
5959; AVX1-NEXT:    andb $1, %al
5960; AVX1-NEXT:    movb %al, 8(%rdi)
5961; AVX1-NEXT:    vpextrb $7, %xmm5, %eax
5962; AVX1-NEXT:    andb $1, %al
5963; AVX1-NEXT:    movb %al, 8(%rdi)
5964; AVX1-NEXT:    vpextrb $6, %xmm5, %eax
5965; AVX1-NEXT:    andb $1, %al
5966; AVX1-NEXT:    movb %al, 8(%rdi)
5967; AVX1-NEXT:    vpextrb $5, %xmm5, %eax
5968; AVX1-NEXT:    andb $1, %al
5969; AVX1-NEXT:    movb %al, 8(%rdi)
5970; AVX1-NEXT:    vpextrb $4, %xmm5, %eax
5971; AVX1-NEXT:    andb $1, %al
5972; AVX1-NEXT:    movb %al, 8(%rdi)
5973; AVX1-NEXT:    vpextrb $3, %xmm5, %eax
5974; AVX1-NEXT:    andb $1, %al
5975; AVX1-NEXT:    movb %al, 8(%rdi)
5976; AVX1-NEXT:    vpextrb $2, %xmm5, %eax
5977; AVX1-NEXT:    andb $1, %al
5978; AVX1-NEXT:    movb %al, 8(%rdi)
5979; AVX1-NEXT:    vpextrb $1, %xmm5, %eax
5980; AVX1-NEXT:    andb $1, %al
5981; AVX1-NEXT:    movb %al, 8(%rdi)
5982; AVX1-NEXT:    vpextrb $0, %xmm5, %eax
5983; AVX1-NEXT:    andb $1, %al
5984; AVX1-NEXT:    movb %al, 8(%rdi)
5985; AVX1-NEXT:    vpextrb $15, %xmm1, %eax
5986; AVX1-NEXT:    andb $1, %al
5987; AVX1-NEXT:    movb %al, 4(%rdi)
5988; AVX1-NEXT:    vpextrb $14, %xmm1, %eax
5989; AVX1-NEXT:    andb $1, %al
5990; AVX1-NEXT:    movb %al, 4(%rdi)
5991; AVX1-NEXT:    vpextrb $13, %xmm1, %eax
5992; AVX1-NEXT:    andb $1, %al
5993; AVX1-NEXT:    movb %al, 4(%rdi)
5994; AVX1-NEXT:    vpextrb $12, %xmm1, %eax
5995; AVX1-NEXT:    andb $1, %al
5996; AVX1-NEXT:    movb %al, 4(%rdi)
5997; AVX1-NEXT:    vpextrb $11, %xmm1, %eax
5998; AVX1-NEXT:    andb $1, %al
5999; AVX1-NEXT:    movb %al, 4(%rdi)
6000; AVX1-NEXT:    vpextrb $10, %xmm1, %eax
6001; AVX1-NEXT:    andb $1, %al
6002; AVX1-NEXT:    movb %al, 4(%rdi)
6003; AVX1-NEXT:    vpextrb $9, %xmm1, %eax
6004; AVX1-NEXT:    andb $1, %al
6005; AVX1-NEXT:    movb %al, 4(%rdi)
6006; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
6007; AVX1-NEXT:    andb $1, %al
6008; AVX1-NEXT:    movb %al, 4(%rdi)
6009; AVX1-NEXT:    vpextrb $7, %xmm1, %eax
6010; AVX1-NEXT:    andb $1, %al
6011; AVX1-NEXT:    movb %al, 4(%rdi)
6012; AVX1-NEXT:    vpextrb $6, %xmm1, %eax
6013; AVX1-NEXT:    andb $1, %al
6014; AVX1-NEXT:    movb %al, 4(%rdi)
6015; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
6016; AVX1-NEXT:    andb $1, %al
6017; AVX1-NEXT:    movb %al, 4(%rdi)
6018; AVX1-NEXT:    vpextrb $4, %xmm1, %eax
6019; AVX1-NEXT:    andb $1, %al
6020; AVX1-NEXT:    movb %al, 4(%rdi)
6021; AVX1-NEXT:    vpextrb $3, %xmm1, %eax
6022; AVX1-NEXT:    andb $1, %al
6023; AVX1-NEXT:    movb %al, 4(%rdi)
6024; AVX1-NEXT:    vpextrb $2, %xmm1, %eax
6025; AVX1-NEXT:    andb $1, %al
6026; AVX1-NEXT:    movb %al, 4(%rdi)
6027; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
6028; AVX1-NEXT:    andb $1, %al
6029; AVX1-NEXT:    movb %al, 4(%rdi)
6030; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
6031; AVX1-NEXT:    andb $1, %al
6032; AVX1-NEXT:    movb %al, 4(%rdi)
6033; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
6034; AVX1-NEXT:    andb $1, %al
6035; AVX1-NEXT:    movb %al, 4(%rdi)
6036; AVX1-NEXT:    vpextrb $14, %xmm4, %eax
6037; AVX1-NEXT:    andb $1, %al
6038; AVX1-NEXT:    movb %al, 4(%rdi)
6039; AVX1-NEXT:    vpextrb $13, %xmm4, %eax
6040; AVX1-NEXT:    andb $1, %al
6041; AVX1-NEXT:    movb %al, 4(%rdi)
6042; AVX1-NEXT:    vpextrb $12, %xmm4, %eax
6043; AVX1-NEXT:    andb $1, %al
6044; AVX1-NEXT:    movb %al, 4(%rdi)
6045; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
6046; AVX1-NEXT:    andb $1, %al
6047; AVX1-NEXT:    movb %al, 4(%rdi)
6048; AVX1-NEXT:    vpextrb $10, %xmm4, %eax
6049; AVX1-NEXT:    andb $1, %al
6050; AVX1-NEXT:    movb %al, 4(%rdi)
6051; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
6052; AVX1-NEXT:    andb $1, %al
6053; AVX1-NEXT:    movb %al, 4(%rdi)
6054; AVX1-NEXT:    vpextrb $8, %xmm4, %eax
6055; AVX1-NEXT:    andb $1, %al
6056; AVX1-NEXT:    movb %al, 4(%rdi)
6057; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
6058; AVX1-NEXT:    andb $1, %al
6059; AVX1-NEXT:    movb %al, 4(%rdi)
6060; AVX1-NEXT:    vpextrb $6, %xmm4, %eax
6061; AVX1-NEXT:    andb $1, %al
6062; AVX1-NEXT:    movb %al, 4(%rdi)
6063; AVX1-NEXT:    vpextrb $5, %xmm4, %eax
6064; AVX1-NEXT:    andb $1, %al
6065; AVX1-NEXT:    movb %al, 4(%rdi)
6066; AVX1-NEXT:    vpextrb $4, %xmm4, %eax
6067; AVX1-NEXT:    andb $1, %al
6068; AVX1-NEXT:    movb %al, 4(%rdi)
6069; AVX1-NEXT:    vpextrb $3, %xmm4, %eax
6070; AVX1-NEXT:    andb $1, %al
6071; AVX1-NEXT:    movb %al, 4(%rdi)
6072; AVX1-NEXT:    vpextrb $2, %xmm4, %eax
6073; AVX1-NEXT:    andb $1, %al
6074; AVX1-NEXT:    movb %al, 4(%rdi)
6075; AVX1-NEXT:    vpextrb $1, %xmm4, %eax
6076; AVX1-NEXT:    andb $1, %al
6077; AVX1-NEXT:    movb %al, 4(%rdi)
6078; AVX1-NEXT:    vpextrb $0, %xmm4, %eax
6079; AVX1-NEXT:    andb $1, %al
6080; AVX1-NEXT:    movb %al, 4(%rdi)
6081; AVX1-NEXT:    vpextrb $15, %xmm0, %eax
6082; AVX1-NEXT:    andb $1, %al
6083; AVX1-NEXT:    movb %al, (%rdi)
6084; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
6085; AVX1-NEXT:    andb $1, %al
6086; AVX1-NEXT:    movb %al, (%rdi)
6087; AVX1-NEXT:    vpextrb $13, %xmm0, %eax
6088; AVX1-NEXT:    andb $1, %al
6089; AVX1-NEXT:    movb %al, (%rdi)
6090; AVX1-NEXT:    vpextrb $12, %xmm0, %eax
6091; AVX1-NEXT:    andb $1, %al
6092; AVX1-NEXT:    movb %al, (%rdi)
6093; AVX1-NEXT:    vpextrb $11, %xmm0, %eax
6094; AVX1-NEXT:    andb $1, %al
6095; AVX1-NEXT:    movb %al, (%rdi)
6096; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
6097; AVX1-NEXT:    andb $1, %al
6098; AVX1-NEXT:    movb %al, (%rdi)
6099; AVX1-NEXT:    vpextrb $9, %xmm0, %eax
6100; AVX1-NEXT:    andb $1, %al
6101; AVX1-NEXT:    movb %al, (%rdi)
6102; AVX1-NEXT:    vpextrb $8, %xmm0, %eax
6103; AVX1-NEXT:    andb $1, %al
6104; AVX1-NEXT:    movb %al, (%rdi)
6105; AVX1-NEXT:    vpextrb $7, %xmm0, %eax
6106; AVX1-NEXT:    andb $1, %al
6107; AVX1-NEXT:    movb %al, (%rdi)
6108; AVX1-NEXT:    vpextrb $6, %xmm0, %eax
6109; AVX1-NEXT:    andb $1, %al
6110; AVX1-NEXT:    movb %al, (%rdi)
6111; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
6112; AVX1-NEXT:    andb $1, %al
6113; AVX1-NEXT:    movb %al, (%rdi)
6114; AVX1-NEXT:    vpextrb $4, %xmm0, %eax
6115; AVX1-NEXT:    andb $1, %al
6116; AVX1-NEXT:    movb %al, (%rdi)
6117; AVX1-NEXT:    vpextrb $3, %xmm0, %eax
6118; AVX1-NEXT:    andb $1, %al
6119; AVX1-NEXT:    movb %al, (%rdi)
6120; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
6121; AVX1-NEXT:    andb $1, %al
6122; AVX1-NEXT:    movb %al, (%rdi)
6123; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
6124; AVX1-NEXT:    andb $1, %al
6125; AVX1-NEXT:    movb %al, (%rdi)
6126; AVX1-NEXT:    vpextrb $0, %xmm0, %eax
6127; AVX1-NEXT:    andb $1, %al
6128; AVX1-NEXT:    movb %al, (%rdi)
6129; AVX1-NEXT:    vpextrb $15, %xmm8, %eax
6130; AVX1-NEXT:    andb $1, %al
6131; AVX1-NEXT:    movb %al, (%rdi)
6132; AVX1-NEXT:    vpextrb $14, %xmm8, %eax
6133; AVX1-NEXT:    andb $1, %al
6134; AVX1-NEXT:    movb %al, (%rdi)
6135; AVX1-NEXT:    vpextrb $13, %xmm8, %eax
6136; AVX1-NEXT:    andb $1, %al
6137; AVX1-NEXT:    movb %al, (%rdi)
6138; AVX1-NEXT:    vpextrb $12, %xmm8, %eax
6139; AVX1-NEXT:    andb $1, %al
6140; AVX1-NEXT:    movb %al, (%rdi)
6141; AVX1-NEXT:    vpextrb $11, %xmm8, %eax
6142; AVX1-NEXT:    andb $1, %al
6143; AVX1-NEXT:    movb %al, (%rdi)
6144; AVX1-NEXT:    vpextrb $10, %xmm8, %eax
6145; AVX1-NEXT:    andb $1, %al
6146; AVX1-NEXT:    movb %al, (%rdi)
6147; AVX1-NEXT:    vpextrb $9, %xmm8, %eax
6148; AVX1-NEXT:    andb $1, %al
6149; AVX1-NEXT:    movb %al, (%rdi)
6150; AVX1-NEXT:    vpextrb $8, %xmm8, %eax
6151; AVX1-NEXT:    andb $1, %al
6152; AVX1-NEXT:    movb %al, (%rdi)
6153; AVX1-NEXT:    vpextrb $7, %xmm8, %eax
6154; AVX1-NEXT:    andb $1, %al
6155; AVX1-NEXT:    movb %al, (%rdi)
6156; AVX1-NEXT:    vpextrb $6, %xmm8, %eax
6157; AVX1-NEXT:    andb $1, %al
6158; AVX1-NEXT:    movb %al, (%rdi)
6159; AVX1-NEXT:    vpextrb $5, %xmm8, %eax
6160; AVX1-NEXT:    andb $1, %al
6161; AVX1-NEXT:    movb %al, (%rdi)
6162; AVX1-NEXT:    vpextrb $4, %xmm8, %eax
6163; AVX1-NEXT:    andb $1, %al
6164; AVX1-NEXT:    movb %al, (%rdi)
6165; AVX1-NEXT:    vpextrb $3, %xmm8, %eax
6166; AVX1-NEXT:    andb $1, %al
6167; AVX1-NEXT:    movb %al, (%rdi)
6168; AVX1-NEXT:    vpextrb $2, %xmm8, %eax
6169; AVX1-NEXT:    andb $1, %al
6170; AVX1-NEXT:    movb %al, (%rdi)
6171; AVX1-NEXT:    vpextrb $1, %xmm8, %eax
6172; AVX1-NEXT:    andb $1, %al
6173; AVX1-NEXT:    movb %al, (%rdi)
6174; AVX1-NEXT:    vpextrb $0, %xmm8, %eax
6175; AVX1-NEXT:    andb $1, %al
6176; AVX1-NEXT:    movb %al, (%rdi)
6177; AVX1-NEXT:    movq %rdi, %rax
6178; AVX1-NEXT:    vzeroupper
6179; AVX1-NEXT:    retq
6180;
6181; AVX2-LABEL: test_cmp_v128i8:
6182; AVX2:       # BB#0:
6183; AVX2-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
6184; AVX2-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
6185; AVX2-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
6186; AVX2-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
6187; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4
6188; AVX2-NEXT:    vpextrb $15, %xmm4, %eax
6189; AVX2-NEXT:    andb $1, %al
6190; AVX2-NEXT:    movb %al, 12(%rdi)
6191; AVX2-NEXT:    vpextrb $14, %xmm4, %eax
6192; AVX2-NEXT:    andb $1, %al
6193; AVX2-NEXT:    movb %al, 12(%rdi)
6194; AVX2-NEXT:    vpextrb $13, %xmm4, %eax
6195; AVX2-NEXT:    andb $1, %al
6196; AVX2-NEXT:    movb %al, 12(%rdi)
6197; AVX2-NEXT:    vpextrb $12, %xmm4, %eax
6198; AVX2-NEXT:    andb $1, %al
6199; AVX2-NEXT:    movb %al, 12(%rdi)
6200; AVX2-NEXT:    vpextrb $11, %xmm4, %eax
6201; AVX2-NEXT:    andb $1, %al
6202; AVX2-NEXT:    movb %al, 12(%rdi)
6203; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
6204; AVX2-NEXT:    andb $1, %al
6205; AVX2-NEXT:    movb %al, 12(%rdi)
6206; AVX2-NEXT:    vpextrb $9, %xmm4, %eax
6207; AVX2-NEXT:    andb $1, %al
6208; AVX2-NEXT:    movb %al, 12(%rdi)
6209; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
6210; AVX2-NEXT:    andb $1, %al
6211; AVX2-NEXT:    movb %al, 12(%rdi)
6212; AVX2-NEXT:    vpextrb $7, %xmm4, %eax
6213; AVX2-NEXT:    andb $1, %al
6214; AVX2-NEXT:    movb %al, 12(%rdi)
6215; AVX2-NEXT:    vpextrb $6, %xmm4, %eax
6216; AVX2-NEXT:    andb $1, %al
6217; AVX2-NEXT:    movb %al, 12(%rdi)
6218; AVX2-NEXT:    vpextrb $5, %xmm4, %eax
6219; AVX2-NEXT:    andb $1, %al
6220; AVX2-NEXT:    movb %al, 12(%rdi)
6221; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
6222; AVX2-NEXT:    andb $1, %al
6223; AVX2-NEXT:    movb %al, 12(%rdi)
6224; AVX2-NEXT:    vpextrb $3, %xmm4, %eax
6225; AVX2-NEXT:    andb $1, %al
6226; AVX2-NEXT:    movb %al, 12(%rdi)
6227; AVX2-NEXT:    vpextrb $2, %xmm4, %eax
6228; AVX2-NEXT:    andb $1, %al
6229; AVX2-NEXT:    movb %al, 12(%rdi)
6230; AVX2-NEXT:    vpextrb $1, %xmm4, %eax
6231; AVX2-NEXT:    andb $1, %al
6232; AVX2-NEXT:    movb %al, 12(%rdi)
6233; AVX2-NEXT:    vpextrb $0, %xmm4, %eax
6234; AVX2-NEXT:    andb $1, %al
6235; AVX2-NEXT:    movb %al, 12(%rdi)
6236; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
6237; AVX2-NEXT:    andb $1, %al
6238; AVX2-NEXT:    movb %al, 12(%rdi)
6239; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
6240; AVX2-NEXT:    andb $1, %al
6241; AVX2-NEXT:    movb %al, 12(%rdi)
6242; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
6243; AVX2-NEXT:    andb $1, %al
6244; AVX2-NEXT:    movb %al, 12(%rdi)
6245; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
6246; AVX2-NEXT:    andb $1, %al
6247; AVX2-NEXT:    movb %al, 12(%rdi)
6248; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
6249; AVX2-NEXT:    andb $1, %al
6250; AVX2-NEXT:    movb %al, 12(%rdi)
6251; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
6252; AVX2-NEXT:    andb $1, %al
6253; AVX2-NEXT:    movb %al, 12(%rdi)
6254; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
6255; AVX2-NEXT:    andb $1, %al
6256; AVX2-NEXT:    movb %al, 12(%rdi)
6257; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
6258; AVX2-NEXT:    andb $1, %al
6259; AVX2-NEXT:    movb %al, 12(%rdi)
6260; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
6261; AVX2-NEXT:    andb $1, %al
6262; AVX2-NEXT:    movb %al, 12(%rdi)
6263; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
6264; AVX2-NEXT:    andb $1, %al
6265; AVX2-NEXT:    movb %al, 12(%rdi)
6266; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
6267; AVX2-NEXT:    andb $1, %al
6268; AVX2-NEXT:    movb %al, 12(%rdi)
6269; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
6270; AVX2-NEXT:    andb $1, %al
6271; AVX2-NEXT:    movb %al, 12(%rdi)
6272; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
6273; AVX2-NEXT:    andb $1, %al
6274; AVX2-NEXT:    movb %al, 12(%rdi)
6275; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
6276; AVX2-NEXT:    andb $1, %al
6277; AVX2-NEXT:    movb %al, 12(%rdi)
6278; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
6279; AVX2-NEXT:    andb $1, %al
6280; AVX2-NEXT:    movb %al, 12(%rdi)
6281; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
6282; AVX2-NEXT:    andb $1, %al
6283; AVX2-NEXT:    movb %al, 12(%rdi)
6284; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3
6285; AVX2-NEXT:    vpextrb $15, %xmm3, %eax
6286; AVX2-NEXT:    andb $1, %al
6287; AVX2-NEXT:    movb %al, 8(%rdi)
6288; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
6289; AVX2-NEXT:    andb $1, %al
6290; AVX2-NEXT:    movb %al, 8(%rdi)
6291; AVX2-NEXT:    vpextrb $13, %xmm3, %eax
6292; AVX2-NEXT:    andb $1, %al
6293; AVX2-NEXT:    movb %al, 8(%rdi)
6294; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
6295; AVX2-NEXT:    andb $1, %al
6296; AVX2-NEXT:    movb %al, 8(%rdi)
6297; AVX2-NEXT:    vpextrb $11, %xmm3, %eax
6298; AVX2-NEXT:    andb $1, %al
6299; AVX2-NEXT:    movb %al, 8(%rdi)
6300; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
6301; AVX2-NEXT:    andb $1, %al
6302; AVX2-NEXT:    movb %al, 8(%rdi)
6303; AVX2-NEXT:    vpextrb $9, %xmm3, %eax
6304; AVX2-NEXT:    andb $1, %al
6305; AVX2-NEXT:    movb %al, 8(%rdi)
6306; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
6307; AVX2-NEXT:    andb $1, %al
6308; AVX2-NEXT:    movb %al, 8(%rdi)
6309; AVX2-NEXT:    vpextrb $7, %xmm3, %eax
6310; AVX2-NEXT:    andb $1, %al
6311; AVX2-NEXT:    movb %al, 8(%rdi)
6312; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
6313; AVX2-NEXT:    andb $1, %al
6314; AVX2-NEXT:    movb %al, 8(%rdi)
6315; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
6316; AVX2-NEXT:    andb $1, %al
6317; AVX2-NEXT:    movb %al, 8(%rdi)
6318; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
6319; AVX2-NEXT:    andb $1, %al
6320; AVX2-NEXT:    movb %al, 8(%rdi)
6321; AVX2-NEXT:    vpextrb $3, %xmm3, %eax
6322; AVX2-NEXT:    andb $1, %al
6323; AVX2-NEXT:    movb %al, 8(%rdi)
6324; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
6325; AVX2-NEXT:    andb $1, %al
6326; AVX2-NEXT:    movb %al, 8(%rdi)
6327; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
6328; AVX2-NEXT:    andb $1, %al
6329; AVX2-NEXT:    movb %al, 8(%rdi)
6330; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
6331; AVX2-NEXT:    andb $1, %al
6332; AVX2-NEXT:    movb %al, 8(%rdi)
6333; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
6334; AVX2-NEXT:    andb $1, %al
6335; AVX2-NEXT:    movb %al, 8(%rdi)
6336; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
6337; AVX2-NEXT:    andb $1, %al
6338; AVX2-NEXT:    movb %al, 8(%rdi)
6339; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
6340; AVX2-NEXT:    andb $1, %al
6341; AVX2-NEXT:    movb %al, 8(%rdi)
6342; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
6343; AVX2-NEXT:    andb $1, %al
6344; AVX2-NEXT:    movb %al, 8(%rdi)
6345; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
6346; AVX2-NEXT:    andb $1, %al
6347; AVX2-NEXT:    movb %al, 8(%rdi)
6348; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
6349; AVX2-NEXT:    andb $1, %al
6350; AVX2-NEXT:    movb %al, 8(%rdi)
6351; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
6352; AVX2-NEXT:    andb $1, %al
6353; AVX2-NEXT:    movb %al, 8(%rdi)
6354; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
6355; AVX2-NEXT:    andb $1, %al
6356; AVX2-NEXT:    movb %al, 8(%rdi)
6357; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
6358; AVX2-NEXT:    andb $1, %al
6359; AVX2-NEXT:    movb %al, 8(%rdi)
6360; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
6361; AVX2-NEXT:    andb $1, %al
6362; AVX2-NEXT:    movb %al, 8(%rdi)
6363; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
6364; AVX2-NEXT:    andb $1, %al
6365; AVX2-NEXT:    movb %al, 8(%rdi)
6366; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
6367; AVX2-NEXT:    andb $1, %al
6368; AVX2-NEXT:    movb %al, 8(%rdi)
6369; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
6370; AVX2-NEXT:    andb $1, %al
6371; AVX2-NEXT:    movb %al, 8(%rdi)
6372; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
6373; AVX2-NEXT:    andb $1, %al
6374; AVX2-NEXT:    movb %al, 8(%rdi)
6375; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
6376; AVX2-NEXT:    andb $1, %al
6377; AVX2-NEXT:    movb %al, 8(%rdi)
6378; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
6379; AVX2-NEXT:    andb $1, %al
6380; AVX2-NEXT:    movb %al, 8(%rdi)
6381; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
6382; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
6383; AVX2-NEXT:    andb $1, %al
6384; AVX2-NEXT:    movb %al, 4(%rdi)
6385; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
6386; AVX2-NEXT:    andb $1, %al
6387; AVX2-NEXT:    movb %al, 4(%rdi)
6388; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
6389; AVX2-NEXT:    andb $1, %al
6390; AVX2-NEXT:    movb %al, 4(%rdi)
6391; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
6392; AVX2-NEXT:    andb $1, %al
6393; AVX2-NEXT:    movb %al, 4(%rdi)
6394; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
6395; AVX2-NEXT:    andb $1, %al
6396; AVX2-NEXT:    movb %al, 4(%rdi)
6397; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
6398; AVX2-NEXT:    andb $1, %al
6399; AVX2-NEXT:    movb %al, 4(%rdi)
6400; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
6401; AVX2-NEXT:    andb $1, %al
6402; AVX2-NEXT:    movb %al, 4(%rdi)
6403; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
6404; AVX2-NEXT:    andb $1, %al
6405; AVX2-NEXT:    movb %al, 4(%rdi)
6406; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
6407; AVX2-NEXT:    andb $1, %al
6408; AVX2-NEXT:    movb %al, 4(%rdi)
6409; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
6410; AVX2-NEXT:    andb $1, %al
6411; AVX2-NEXT:    movb %al, 4(%rdi)
6412; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
6413; AVX2-NEXT:    andb $1, %al
6414; AVX2-NEXT:    movb %al, 4(%rdi)
6415; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
6416; AVX2-NEXT:    andb $1, %al
6417; AVX2-NEXT:    movb %al, 4(%rdi)
6418; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
6419; AVX2-NEXT:    andb $1, %al
6420; AVX2-NEXT:    movb %al, 4(%rdi)
6421; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
6422; AVX2-NEXT:    andb $1, %al
6423; AVX2-NEXT:    movb %al, 4(%rdi)
6424; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
6425; AVX2-NEXT:    andb $1, %al
6426; AVX2-NEXT:    movb %al, 4(%rdi)
6427; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
6428; AVX2-NEXT:    andb $1, %al
6429; AVX2-NEXT:    movb %al, 4(%rdi)
6430; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
6431; AVX2-NEXT:    andb $1, %al
6432; AVX2-NEXT:    movb %al, 4(%rdi)
6433; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
6434; AVX2-NEXT:    andb $1, %al
6435; AVX2-NEXT:    movb %al, 4(%rdi)
6436; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
6437; AVX2-NEXT:    andb $1, %al
6438; AVX2-NEXT:    movb %al, 4(%rdi)
6439; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
6440; AVX2-NEXT:    andb $1, %al
6441; AVX2-NEXT:    movb %al, 4(%rdi)
6442; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
6443; AVX2-NEXT:    andb $1, %al
6444; AVX2-NEXT:    movb %al, 4(%rdi)
6445; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
6446; AVX2-NEXT:    andb $1, %al
6447; AVX2-NEXT:    movb %al, 4(%rdi)
6448; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
6449; AVX2-NEXT:    andb $1, %al
6450; AVX2-NEXT:    movb %al, 4(%rdi)
6451; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
6452; AVX2-NEXT:    andb $1, %al
6453; AVX2-NEXT:    movb %al, 4(%rdi)
6454; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
6455; AVX2-NEXT:    andb $1, %al
6456; AVX2-NEXT:    movb %al, 4(%rdi)
6457; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
6458; AVX2-NEXT:    andb $1, %al
6459; AVX2-NEXT:    movb %al, 4(%rdi)
6460; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
6461; AVX2-NEXT:    andb $1, %al
6462; AVX2-NEXT:    movb %al, 4(%rdi)
6463; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
6464; AVX2-NEXT:    andb $1, %al
6465; AVX2-NEXT:    movb %al, 4(%rdi)
6466; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
6467; AVX2-NEXT:    andb $1, %al
6468; AVX2-NEXT:    movb %al, 4(%rdi)
6469; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
6470; AVX2-NEXT:    andb $1, %al
6471; AVX2-NEXT:    movb %al, 4(%rdi)
6472; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
6473; AVX2-NEXT:    andb $1, %al
6474; AVX2-NEXT:    movb %al, 4(%rdi)
6475; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
6476; AVX2-NEXT:    andb $1, %al
6477; AVX2-NEXT:    movb %al, 4(%rdi)
6478; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
6479; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
6480; AVX2-NEXT:    andb $1, %al
6481; AVX2-NEXT:    movb %al, (%rdi)
6482; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
6483; AVX2-NEXT:    andb $1, %al
6484; AVX2-NEXT:    movb %al, (%rdi)
6485; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
6486; AVX2-NEXT:    andb $1, %al
6487; AVX2-NEXT:    movb %al, (%rdi)
6488; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
6489; AVX2-NEXT:    andb $1, %al
6490; AVX2-NEXT:    movb %al, (%rdi)
6491; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
6492; AVX2-NEXT:    andb $1, %al
6493; AVX2-NEXT:    movb %al, (%rdi)
6494; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
6495; AVX2-NEXT:    andb $1, %al
6496; AVX2-NEXT:    movb %al, (%rdi)
6497; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
6498; AVX2-NEXT:    andb $1, %al
6499; AVX2-NEXT:    movb %al, (%rdi)
6500; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
6501; AVX2-NEXT:    andb $1, %al
6502; AVX2-NEXT:    movb %al, (%rdi)
6503; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
6504; AVX2-NEXT:    andb $1, %al
6505; AVX2-NEXT:    movb %al, (%rdi)
6506; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
6507; AVX2-NEXT:    andb $1, %al
6508; AVX2-NEXT:    movb %al, (%rdi)
6509; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
6510; AVX2-NEXT:    andb $1, %al
6511; AVX2-NEXT:    movb %al, (%rdi)
6512; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
6513; AVX2-NEXT:    andb $1, %al
6514; AVX2-NEXT:    movb %al, (%rdi)
6515; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
6516; AVX2-NEXT:    andb $1, %al
6517; AVX2-NEXT:    movb %al, (%rdi)
6518; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
6519; AVX2-NEXT:    andb $1, %al
6520; AVX2-NEXT:    movb %al, (%rdi)
6521; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
6522; AVX2-NEXT:    andb $1, %al
6523; AVX2-NEXT:    movb %al, (%rdi)
6524; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
6525; AVX2-NEXT:    andb $1, %al
6526; AVX2-NEXT:    movb %al, (%rdi)
6527; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
6528; AVX2-NEXT:    andb $1, %al
6529; AVX2-NEXT:    movb %al, (%rdi)
6530; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
6531; AVX2-NEXT:    andb $1, %al
6532; AVX2-NEXT:    movb %al, (%rdi)
6533; AVX2-NEXT:    vpextrb $13, %xmm0, %eax
6534; AVX2-NEXT:    andb $1, %al
6535; AVX2-NEXT:    movb %al, (%rdi)
6536; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
6537; AVX2-NEXT:    andb $1, %al
6538; AVX2-NEXT:    movb %al, (%rdi)
6539; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
6540; AVX2-NEXT:    andb $1, %al
6541; AVX2-NEXT:    movb %al, (%rdi)
6542; AVX2-NEXT:    vpextrb $10, %xmm0, %eax
6543; AVX2-NEXT:    andb $1, %al
6544; AVX2-NEXT:    movb %al, (%rdi)
6545; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
6546; AVX2-NEXT:    andb $1, %al
6547; AVX2-NEXT:    movb %al, (%rdi)
6548; AVX2-NEXT:    vpextrb $8, %xmm0, %eax
6549; AVX2-NEXT:    andb $1, %al
6550; AVX2-NEXT:    movb %al, (%rdi)
6551; AVX2-NEXT:    vpextrb $7, %xmm0, %eax
6552; AVX2-NEXT:    andb $1, %al
6553; AVX2-NEXT:    movb %al, (%rdi)
6554; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
6555; AVX2-NEXT:    andb $1, %al
6556; AVX2-NEXT:    movb %al, (%rdi)
6557; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
6558; AVX2-NEXT:    andb $1, %al
6559; AVX2-NEXT:    movb %al, (%rdi)
6560; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
6561; AVX2-NEXT:    andb $1, %al
6562; AVX2-NEXT:    movb %al, (%rdi)
6563; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
6564; AVX2-NEXT:    andb $1, %al
6565; AVX2-NEXT:    movb %al, (%rdi)
6566; AVX2-NEXT:    vpextrb $2, %xmm0, %eax
6567; AVX2-NEXT:    andb $1, %al
6568; AVX2-NEXT:    movb %al, (%rdi)
6569; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
6570; AVX2-NEXT:    andb $1, %al
6571; AVX2-NEXT:    movb %al, (%rdi)
6572; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
6573; AVX2-NEXT:    andb $1, %al
6574; AVX2-NEXT:    movb %al, (%rdi)
6575; AVX2-NEXT:    movq %rdi, %rax
6576; AVX2-NEXT:    vzeroupper
6577; AVX2-NEXT:    retq
6578;
6579; AVX512-LABEL: test_cmp_v128i8:
6580; AVX512:       # BB#0:
6581; AVX512-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
6582; AVX512-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
6583; AVX512-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
6584; AVX512-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
6585; AVX512-NEXT:    vextracti128 $1, %ymm3, %xmm4
6586; AVX512-NEXT:    vpmovsxbd %xmm4, %zmm4
6587; AVX512-NEXT:    vpslld $31, %zmm4, %zmm4
6588; AVX512-NEXT:    vptestmd %zmm4, %zmm4, %k0
6589; AVX512-NEXT:    kmovw %k0, 14(%rdi)
6590; AVX512-NEXT:    vpmovsxbd %xmm3, %zmm3
6591; AVX512-NEXT:    vpslld $31, %zmm3, %zmm3
6592; AVX512-NEXT:    vptestmd %zmm3, %zmm3, %k0
6593; AVX512-NEXT:    kmovw %k0, 12(%rdi)
6594; AVX512-NEXT:    vextracti128 $1, %ymm2, %xmm3
6595; AVX512-NEXT:    vpmovsxbd %xmm3, %zmm3
6596; AVX512-NEXT:    vpslld $31, %zmm3, %zmm3
6597; AVX512-NEXT:    vptestmd %zmm3, %zmm3, %k0
6598; AVX512-NEXT:    kmovw %k0, 10(%rdi)
6599; AVX512-NEXT:    vpmovsxbd %xmm2, %zmm2
6600; AVX512-NEXT:    vpslld $31, %zmm2, %zmm2
6601; AVX512-NEXT:    vptestmd %zmm2, %zmm2, %k0
6602; AVX512-NEXT:    kmovw %k0, 8(%rdi)
6603; AVX512-NEXT:    vextracti128 $1, %ymm1, %xmm2
6604; AVX512-NEXT:    vpmovsxbd %xmm2, %zmm2
6605; AVX512-NEXT:    vpslld $31, %zmm2, %zmm2
6606; AVX512-NEXT:    vptestmd %zmm2, %zmm2, %k0
6607; AVX512-NEXT:    kmovw %k0, 6(%rdi)
6608; AVX512-NEXT:    vpmovsxbd %xmm1, %zmm1
6609; AVX512-NEXT:    vpslld $31, %zmm1, %zmm1
6610; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k0
6611; AVX512-NEXT:    kmovw %k0, 4(%rdi)
6612; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
6613; AVX512-NEXT:    vpmovsxbd %xmm1, %zmm1
6614; AVX512-NEXT:    vpslld $31, %zmm1, %zmm1
6615; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k0
6616; AVX512-NEXT:    kmovw %k0, 2(%rdi)
6617; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0
6618; AVX512-NEXT:    vpslld $31, %zmm0, %zmm0
6619; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k0
6620; AVX512-NEXT:    kmovw %k0, (%rdi)
6621; AVX512-NEXT:    movq %rdi, %rax
6622; AVX512-NEXT:    retq
6623  %1 = icmp sgt <128 x i8> %a0, %a1
6624  ret <128 x i1> %1
6625}
6626