1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX1
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX2
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vpopcntdq | FileCheck %s --check-prefix=AVX512VPOPCNTDQ
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vpopcntdq,+avx512vl | FileCheck %s --check-prefix=AVX512VPOPCNTDQVL
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bitalg | FileCheck %s --check-prefix=BITALG_NOVLX
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bitalg,+avx512vl | FileCheck %s --check-prefix=BITALG
8
9
10define <32 x i8> @ugt_1_v32i8(<32 x i8> %0) {
11; AVX1-LABEL: ugt_1_v32i8:
12; AVX1:       # %bb.0:
13; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
14; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
15; AVX1-NEXT:    vpaddb %xmm2, %xmm1, %xmm3
16; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
17; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
18; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm1, %xmm1
19; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
20; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm4
21; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
22; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
23; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
24; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
25; AVX1-NEXT:    retq
26;
27; AVX2-LABEL: ugt_1_v32i8:
28; AVX2:       # %bb.0:
29; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
30; AVX2-NEXT:    vpaddb %ymm1, %ymm0, %ymm2
31; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
32; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
33; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0
34; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
35; AVX2-NEXT:    retq
36;
37; AVX512VPOPCNTDQ-LABEL: ugt_1_v32i8:
38; AVX512VPOPCNTDQ:       # %bb.0:
39; AVX512VPOPCNTDQ-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
40; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm1, %ymm0, %ymm1
41; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
42; AVX512VPOPCNTDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
43; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
44; AVX512VPOPCNTDQ-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
45; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
46; AVX512VPOPCNTDQ-NEXT:    retq
47;
48; AVX512VPOPCNTDQVL-LABEL: ugt_1_v32i8:
49; AVX512VPOPCNTDQVL:       # %bb.0:
50; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
51; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm1, %ymm0, %ymm1
52; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
53; AVX512VPOPCNTDQVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
54; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
55; AVX512VPOPCNTDQVL-NEXT:    vpternlogq $15, %ymm0, %ymm0, %ymm0
56; AVX512VPOPCNTDQVL-NEXT:    retq
57;
58; BITALG_NOVLX-LABEL: ugt_1_v32i8:
59; BITALG_NOVLX:       # %bb.0:
60; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
61; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
62; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
63; BITALG_NOVLX-NEXT:    retq
64;
65; BITALG-LABEL: ugt_1_v32i8:
66; BITALG:       # %bb.0:
67; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
68; BITALG-NEXT:    vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
69; BITALG-NEXT:    vpmovm2b %k0, %ymm0
70; BITALG-NEXT:    retq
71  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
72  %3 = icmp ugt <32 x i8> %2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
73  %4 = sext <32 x i1> %3 to <32 x i8>
74  ret <32 x i8> %4
75}
76
77define <32 x i8> @ult_2_v32i8(<32 x i8> %0) {
78; AVX1-LABEL: ult_2_v32i8:
79; AVX1:       # %bb.0:
80; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
81; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
82; AVX1-NEXT:    vpaddb %xmm2, %xmm1, %xmm3
83; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
84; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
85; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm1, %xmm1
86; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm2
87; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
88; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
89; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
90; AVX1-NEXT:    retq
91;
92; AVX2-LABEL: ult_2_v32i8:
93; AVX2:       # %bb.0:
94; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
95; AVX2-NEXT:    vpaddb %ymm1, %ymm0, %ymm1
96; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
97; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
98; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
99; AVX2-NEXT:    retq
100;
101; AVX512VPOPCNTDQ-LABEL: ult_2_v32i8:
102; AVX512VPOPCNTDQ:       # %bb.0:
103; AVX512VPOPCNTDQ-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
104; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm1, %ymm0, %ymm1
105; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
106; AVX512VPOPCNTDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
107; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
108; AVX512VPOPCNTDQ-NEXT:    retq
109;
110; AVX512VPOPCNTDQVL-LABEL: ult_2_v32i8:
111; AVX512VPOPCNTDQVL:       # %bb.0:
112; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
113; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm1, %ymm0, %ymm1
114; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
115; AVX512VPOPCNTDQVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
116; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
117; AVX512VPOPCNTDQVL-NEXT:    retq
118;
119; BITALG_NOVLX-LABEL: ult_2_v32i8:
120; BITALG_NOVLX:       # %bb.0:
121; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
122; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
123; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
124; BITALG_NOVLX-NEXT:    vpcmpgtb %ymm0, %ymm1, %ymm0
125; BITALG_NOVLX-NEXT:    retq
126;
127; BITALG-LABEL: ult_2_v32i8:
128; BITALG:       # %bb.0:
129; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
130; BITALG-NEXT:    vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
131; BITALG-NEXT:    vpmovm2b %k0, %ymm0
132; BITALG-NEXT:    retq
133  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
134  %3 = icmp ult <32 x i8> %2, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
135  %4 = sext <32 x i1> %3 to <32 x i8>
136  ret <32 x i8> %4
137}
138
139define <32 x i8> @ugt_2_v32i8(<32 x i8> %0) {
140; AVX1-LABEL: ugt_2_v32i8:
141; AVX1:       # %bb.0:
142; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
143; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
144; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
145; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
146; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
147; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
148; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
149; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
150; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
151; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
152; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
153; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
154; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
155; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
156; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
157; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
158; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm3
159; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
160; AVX1-NEXT:    vpmaxub %xmm1, %xmm2, %xmm1
161; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
162; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
163; AVX1-NEXT:    retq
164;
165; AVX2-LABEL: ugt_2_v32i8:
166; AVX2:       # %bb.0:
167; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
168; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
169; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
170; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
171; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
172; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
173; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
174; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
175; AVX2-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
176; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
177; AVX2-NEXT:    retq
178;
179; AVX512VPOPCNTDQ-LABEL: ugt_2_v32i8:
180; AVX512VPOPCNTDQ:       # %bb.0:
181; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
182; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm2
183; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
184; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
185; AVX512VPOPCNTDQ-NEXT:    vpsrlw $4, %ymm0, %ymm0
186; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
187; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
188; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
189; AVX512VPOPCNTDQ-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
190; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
191; AVX512VPOPCNTDQ-NEXT:    retq
192;
193; AVX512VPOPCNTDQVL-LABEL: ugt_2_v32i8:
194; AVX512VPOPCNTDQVL:       # %bb.0:
195; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
196; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm2
197; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
198; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
199; AVX512VPOPCNTDQVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
200; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
201; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
202; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
203; AVX512VPOPCNTDQVL-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
204; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
205; AVX512VPOPCNTDQVL-NEXT:    retq
206;
207; BITALG_NOVLX-LABEL: ugt_2_v32i8:
208; BITALG_NOVLX:       # %bb.0:
209; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
210; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
211; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
212; BITALG_NOVLX-NEXT:    retq
213;
214; BITALG-LABEL: ugt_2_v32i8:
215; BITALG:       # %bb.0:
216; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
217; BITALG-NEXT:    vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
218; BITALG-NEXT:    vpmovm2b %k0, %ymm0
219; BITALG-NEXT:    retq
220  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
221  %3 = icmp ugt <32 x i8> %2, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
222  %4 = sext <32 x i1> %3 to <32 x i8>
223  ret <32 x i8> %4
224}
225
226define <32 x i8> @ult_3_v32i8(<32 x i8> %0) {
227; AVX1-LABEL: ult_3_v32i8:
228; AVX1:       # %bb.0:
229; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
230; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
231; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
232; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
233; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
234; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
235; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
236; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
237; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
238; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
239; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
240; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
241; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
242; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
243; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
244; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
245; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm3
246; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
247; AVX1-NEXT:    vpminub %xmm1, %xmm2, %xmm1
248; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
249; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
250; AVX1-NEXT:    retq
251;
252; AVX2-LABEL: ult_3_v32i8:
253; AVX2:       # %bb.0:
254; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
255; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
256; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
257; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
258; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
259; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
260; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
261; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
262; AVX2-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
263; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
264; AVX2-NEXT:    retq
265;
266; AVX512VPOPCNTDQ-LABEL: ult_3_v32i8:
267; AVX512VPOPCNTDQ:       # %bb.0:
268; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
269; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm2
270; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
271; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
272; AVX512VPOPCNTDQ-NEXT:    vpsrlw $4, %ymm0, %ymm0
273; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
274; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
275; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
276; AVX512VPOPCNTDQ-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
277; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
278; AVX512VPOPCNTDQ-NEXT:    retq
279;
280; AVX512VPOPCNTDQVL-LABEL: ult_3_v32i8:
281; AVX512VPOPCNTDQVL:       # %bb.0:
282; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
283; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm2
284; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
285; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
286; AVX512VPOPCNTDQVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
287; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
288; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
289; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
290; AVX512VPOPCNTDQVL-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
291; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
292; AVX512VPOPCNTDQVL-NEXT:    retq
293;
294; BITALG_NOVLX-LABEL: ult_3_v32i8:
295; BITALG_NOVLX:       # %bb.0:
296; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
297; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
298; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
299; BITALG_NOVLX-NEXT:    vpcmpgtb %ymm0, %ymm1, %ymm0
300; BITALG_NOVLX-NEXT:    retq
301;
302; BITALG-LABEL: ult_3_v32i8:
303; BITALG:       # %bb.0:
304; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
305; BITALG-NEXT:    vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
306; BITALG-NEXT:    vpmovm2b %k0, %ymm0
307; BITALG-NEXT:    retq
308  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
309  %3 = icmp ult <32 x i8> %2, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
310  %4 = sext <32 x i1> %3 to <32 x i8>
311  ret <32 x i8> %4
312}
313
314define <32 x i8> @ugt_3_v32i8(<32 x i8> %0) {
315; AVX1-LABEL: ugt_3_v32i8:
316; AVX1:       # %bb.0:
317; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
318; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
319; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
320; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
321; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
322; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
323; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
324; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
325; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
326; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
327; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
328; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
329; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
330; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
331; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
332; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
333; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm3
334; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
335; AVX1-NEXT:    vpmaxub %xmm1, %xmm2, %xmm1
336; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
337; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
338; AVX1-NEXT:    retq
339;
340; AVX2-LABEL: ugt_3_v32i8:
341; AVX2:       # %bb.0:
342; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
343; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
344; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
345; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
346; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
347; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
348; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
349; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
350; AVX2-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
351; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
352; AVX2-NEXT:    retq
353;
354; AVX512VPOPCNTDQ-LABEL: ugt_3_v32i8:
355; AVX512VPOPCNTDQ:       # %bb.0:
356; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
357; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm2
358; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
359; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
360; AVX512VPOPCNTDQ-NEXT:    vpsrlw $4, %ymm0, %ymm0
361; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
362; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
363; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
364; AVX512VPOPCNTDQ-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
365; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
366; AVX512VPOPCNTDQ-NEXT:    retq
367;
368; AVX512VPOPCNTDQVL-LABEL: ugt_3_v32i8:
369; AVX512VPOPCNTDQVL:       # %bb.0:
370; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
371; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm2
372; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
373; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
374; AVX512VPOPCNTDQVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
375; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
376; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
377; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
378; AVX512VPOPCNTDQVL-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
379; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
380; AVX512VPOPCNTDQVL-NEXT:    retq
381;
382; BITALG_NOVLX-LABEL: ugt_3_v32i8:
383; BITALG_NOVLX:       # %bb.0:
384; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
385; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
386; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
387; BITALG_NOVLX-NEXT:    retq
388;
389; BITALG-LABEL: ugt_3_v32i8:
390; BITALG:       # %bb.0:
391; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
392; BITALG-NEXT:    vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
393; BITALG-NEXT:    vpmovm2b %k0, %ymm0
394; BITALG-NEXT:    retq
395  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
396  %3 = icmp ugt <32 x i8> %2, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
397  %4 = sext <32 x i1> %3 to <32 x i8>
398  ret <32 x i8> %4
399}
400
401define <32 x i8> @ult_4_v32i8(<32 x i8> %0) {
402; AVX1-LABEL: ult_4_v32i8:
403; AVX1:       # %bb.0:
404; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
405; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
406; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
407; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
408; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
409; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
410; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
411; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
412; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
413; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
414; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
415; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
416; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
417; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
418; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
419; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
420; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm3
421; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
422; AVX1-NEXT:    vpminub %xmm1, %xmm2, %xmm1
423; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
424; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
425; AVX1-NEXT:    retq
426;
427; AVX2-LABEL: ult_4_v32i8:
428; AVX2:       # %bb.0:
429; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
430; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
431; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
432; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
433; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
434; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
435; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
436; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
437; AVX2-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
438; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
439; AVX2-NEXT:    retq
440;
441; AVX512VPOPCNTDQ-LABEL: ult_4_v32i8:
442; AVX512VPOPCNTDQ:       # %bb.0:
443; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
444; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm2
445; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
446; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
447; AVX512VPOPCNTDQ-NEXT:    vpsrlw $4, %ymm0, %ymm0
448; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
449; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
450; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
451; AVX512VPOPCNTDQ-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
452; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
453; AVX512VPOPCNTDQ-NEXT:    retq
454;
455; AVX512VPOPCNTDQVL-LABEL: ult_4_v32i8:
456; AVX512VPOPCNTDQVL:       # %bb.0:
457; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
458; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm2
459; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
460; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
461; AVX512VPOPCNTDQVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
462; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
463; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
464; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
465; AVX512VPOPCNTDQVL-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
466; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
467; AVX512VPOPCNTDQVL-NEXT:    retq
468;
469; BITALG_NOVLX-LABEL: ult_4_v32i8:
470; BITALG_NOVLX:       # %bb.0:
471; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
472; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
473; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
474; BITALG_NOVLX-NEXT:    vpcmpgtb %ymm0, %ymm1, %ymm0
475; BITALG_NOVLX-NEXT:    retq
476;
477; BITALG-LABEL: ult_4_v32i8:
478; BITALG:       # %bb.0:
479; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
480; BITALG-NEXT:    vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
481; BITALG-NEXT:    vpmovm2b %k0, %ymm0
482; BITALG-NEXT:    retq
483  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
484  %3 = icmp ult <32 x i8> %2, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
485  %4 = sext <32 x i1> %3 to <32 x i8>
486  ret <32 x i8> %4
487}
488
489define <32 x i8> @ugt_4_v32i8(<32 x i8> %0) {
490; AVX1-LABEL: ugt_4_v32i8:
491; AVX1:       # %bb.0:
492; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
493; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
494; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
495; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
496; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
497; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
498; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
499; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
500; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
501; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
502; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
503; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
504; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
505; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
506; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
507; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
508; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm3
509; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
510; AVX1-NEXT:    vpmaxub %xmm1, %xmm2, %xmm1
511; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
512; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
513; AVX1-NEXT:    retq
514;
515; AVX2-LABEL: ugt_4_v32i8:
516; AVX2:       # %bb.0:
517; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
518; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
519; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
520; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
521; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
522; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
523; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
524; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
525; AVX2-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
526; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
527; AVX2-NEXT:    retq
528;
529; AVX512VPOPCNTDQ-LABEL: ugt_4_v32i8:
530; AVX512VPOPCNTDQ:       # %bb.0:
531; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
532; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm2
533; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
534; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
535; AVX512VPOPCNTDQ-NEXT:    vpsrlw $4, %ymm0, %ymm0
536; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
537; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
538; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
539; AVX512VPOPCNTDQ-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
540; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
541; AVX512VPOPCNTDQ-NEXT:    retq
542;
543; AVX512VPOPCNTDQVL-LABEL: ugt_4_v32i8:
544; AVX512VPOPCNTDQVL:       # %bb.0:
545; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
546; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm2
547; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
548; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
549; AVX512VPOPCNTDQVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
550; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
551; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
552; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
553; AVX512VPOPCNTDQVL-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
554; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
555; AVX512VPOPCNTDQVL-NEXT:    retq
556;
557; BITALG_NOVLX-LABEL: ugt_4_v32i8:
558; BITALG_NOVLX:       # %bb.0:
559; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
560; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
561; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
562; BITALG_NOVLX-NEXT:    retq
563;
564; BITALG-LABEL: ugt_4_v32i8:
565; BITALG:       # %bb.0:
566; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
567; BITALG-NEXT:    vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
568; BITALG-NEXT:    vpmovm2b %k0, %ymm0
569; BITALG-NEXT:    retq
570  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
571  %3 = icmp ugt <32 x i8> %2, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
572  %4 = sext <32 x i1> %3 to <32 x i8>
573  ret <32 x i8> %4
574}
575
576define <32 x i8> @ult_5_v32i8(<32 x i8> %0) {
577; AVX1-LABEL: ult_5_v32i8:
578; AVX1:       # %bb.0:
579; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
580; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
581; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
582; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
583; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
584; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
585; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
586; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
587; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
588; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
589; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
590; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
591; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
592; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
593; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
594; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
595; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm3
596; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
597; AVX1-NEXT:    vpminub %xmm1, %xmm2, %xmm1
598; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
599; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
600; AVX1-NEXT:    retq
601;
602; AVX2-LABEL: ult_5_v32i8:
603; AVX2:       # %bb.0:
604; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
605; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
606; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
607; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
608; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
609; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
610; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
611; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
612; AVX2-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
613; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
614; AVX2-NEXT:    retq
615;
616; AVX512VPOPCNTDQ-LABEL: ult_5_v32i8:
617; AVX512VPOPCNTDQ:       # %bb.0:
618; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
619; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm2
620; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
621; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
622; AVX512VPOPCNTDQ-NEXT:    vpsrlw $4, %ymm0, %ymm0
623; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
624; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
625; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
626; AVX512VPOPCNTDQ-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
627; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
628; AVX512VPOPCNTDQ-NEXT:    retq
629;
630; AVX512VPOPCNTDQVL-LABEL: ult_5_v32i8:
631; AVX512VPOPCNTDQVL:       # %bb.0:
632; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
633; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm2
634; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
635; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
636; AVX512VPOPCNTDQVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
637; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
638; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
639; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
640; AVX512VPOPCNTDQVL-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
641; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
642; AVX512VPOPCNTDQVL-NEXT:    retq
643;
644; BITALG_NOVLX-LABEL: ult_5_v32i8:
645; BITALG_NOVLX:       # %bb.0:
646; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
647; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
648; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
649; BITALG_NOVLX-NEXT:    vpcmpgtb %ymm0, %ymm1, %ymm0
650; BITALG_NOVLX-NEXT:    retq
651;
652; BITALG-LABEL: ult_5_v32i8:
653; BITALG:       # %bb.0:
654; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
655; BITALG-NEXT:    vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
656; BITALG-NEXT:    vpmovm2b %k0, %ymm0
657; BITALG-NEXT:    retq
658  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
659  %3 = icmp ult <32 x i8> %2, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
660  %4 = sext <32 x i1> %3 to <32 x i8>
661  ret <32 x i8> %4
662}
663
664define <32 x i8> @ugt_5_v32i8(<32 x i8> %0) {
665; AVX1-LABEL: ugt_5_v32i8:
666; AVX1:       # %bb.0:
667; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
668; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
669; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
670; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
671; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
672; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
673; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
674; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
675; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
676; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
677; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
678; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
679; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
680; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
681; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
682; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
683; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm3
684; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
685; AVX1-NEXT:    vpmaxub %xmm1, %xmm2, %xmm1
686; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
687; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
688; AVX1-NEXT:    retq
689;
690; AVX2-LABEL: ugt_5_v32i8:
691; AVX2:       # %bb.0:
692; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
693; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
694; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
695; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
696; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
697; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
698; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
699; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
700; AVX2-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
701; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
702; AVX2-NEXT:    retq
703;
704; AVX512VPOPCNTDQ-LABEL: ugt_5_v32i8:
705; AVX512VPOPCNTDQ:       # %bb.0:
706; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
707; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm2
708; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
709; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
710; AVX512VPOPCNTDQ-NEXT:    vpsrlw $4, %ymm0, %ymm0
711; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
712; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
713; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
714; AVX512VPOPCNTDQ-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
715; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
716; AVX512VPOPCNTDQ-NEXT:    retq
717;
718; AVX512VPOPCNTDQVL-LABEL: ugt_5_v32i8:
719; AVX512VPOPCNTDQVL:       # %bb.0:
720; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
721; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm2
722; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
723; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
724; AVX512VPOPCNTDQVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
725; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
726; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
727; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
728; AVX512VPOPCNTDQVL-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
729; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
730; AVX512VPOPCNTDQVL-NEXT:    retq
731;
732; BITALG_NOVLX-LABEL: ugt_5_v32i8:
733; BITALG_NOVLX:       # %bb.0:
734; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
735; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
736; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
737; BITALG_NOVLX-NEXT:    retq
738;
739; BITALG-LABEL: ugt_5_v32i8:
740; BITALG:       # %bb.0:
741; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
742; BITALG-NEXT:    vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
743; BITALG-NEXT:    vpmovm2b %k0, %ymm0
744; BITALG-NEXT:    retq
745  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
746  %3 = icmp ugt <32 x i8> %2, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
747  %4 = sext <32 x i1> %3 to <32 x i8>
748  ret <32 x i8> %4
749}
750
751define <32 x i8> @ult_6_v32i8(<32 x i8> %0) {
752; AVX1-LABEL: ult_6_v32i8:
753; AVX1:       # %bb.0:
754; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
755; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
756; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
757; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
758; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
759; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
760; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
761; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
762; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
763; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
764; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
765; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
766; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
767; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
768; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
769; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
770; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm3
771; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
772; AVX1-NEXT:    vpminub %xmm1, %xmm2, %xmm1
773; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
774; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
775; AVX1-NEXT:    retq
776;
777; AVX2-LABEL: ult_6_v32i8:
778; AVX2:       # %bb.0:
779; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
780; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
781; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
782; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
783; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
784; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
785; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
786; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
787; AVX2-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
788; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
789; AVX2-NEXT:    retq
790;
791; AVX512VPOPCNTDQ-LABEL: ult_6_v32i8:
792; AVX512VPOPCNTDQ:       # %bb.0:
793; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
794; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm2
795; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
796; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
797; AVX512VPOPCNTDQ-NEXT:    vpsrlw $4, %ymm0, %ymm0
798; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
799; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
800; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
801; AVX512VPOPCNTDQ-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
802; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
803; AVX512VPOPCNTDQ-NEXT:    retq
804;
805; AVX512VPOPCNTDQVL-LABEL: ult_6_v32i8:
806; AVX512VPOPCNTDQVL:       # %bb.0:
807; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
808; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm2
809; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
810; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
811; AVX512VPOPCNTDQVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
812; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
813; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
814; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
815; AVX512VPOPCNTDQVL-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
816; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
817; AVX512VPOPCNTDQVL-NEXT:    retq
818;
819; BITALG_NOVLX-LABEL: ult_6_v32i8:
820; BITALG_NOVLX:       # %bb.0:
821; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
822; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
823; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
824; BITALG_NOVLX-NEXT:    vpcmpgtb %ymm0, %ymm1, %ymm0
825; BITALG_NOVLX-NEXT:    retq
826;
827; BITALG-LABEL: ult_6_v32i8:
828; BITALG:       # %bb.0:
829; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
830; BITALG-NEXT:    vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
831; BITALG-NEXT:    vpmovm2b %k0, %ymm0
832; BITALG-NEXT:    retq
833  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
834  %3 = icmp ult <32 x i8> %2, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
835  %4 = sext <32 x i1> %3 to <32 x i8>
836  ret <32 x i8> %4
837}
838
839define <32 x i8> @ugt_6_v32i8(<32 x i8> %0) {
840; AVX1-LABEL: ugt_6_v32i8:
841; AVX1:       # %bb.0:
842; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
843; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
844; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
845; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
846; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
847; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
848; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
849; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
850; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
851; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
852; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
853; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
854; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
855; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
856; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
857; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
858; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm3
859; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
860; AVX1-NEXT:    vpmaxub %xmm1, %xmm2, %xmm1
861; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
862; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
863; AVX1-NEXT:    retq
864;
865; AVX2-LABEL: ugt_6_v32i8:
866; AVX2:       # %bb.0:
867; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
868; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
869; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
870; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
871; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
872; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
873; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
874; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
875; AVX2-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
876; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
877; AVX2-NEXT:    retq
878;
879; AVX512VPOPCNTDQ-LABEL: ugt_6_v32i8:
880; AVX512VPOPCNTDQ:       # %bb.0:
881; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
882; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm2
883; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
884; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
885; AVX512VPOPCNTDQ-NEXT:    vpsrlw $4, %ymm0, %ymm0
886; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
887; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
888; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
889; AVX512VPOPCNTDQ-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
890; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
891; AVX512VPOPCNTDQ-NEXT:    retq
892;
893; AVX512VPOPCNTDQVL-LABEL: ugt_6_v32i8:
894; AVX512VPOPCNTDQVL:       # %bb.0:
895; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
896; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm2
897; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
898; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
899; AVX512VPOPCNTDQVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
900; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
901; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
902; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
903; AVX512VPOPCNTDQVL-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
904; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
905; AVX512VPOPCNTDQVL-NEXT:    retq
906;
907; BITALG_NOVLX-LABEL: ugt_6_v32i8:
908; BITALG_NOVLX:       # %bb.0:
909; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
910; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
911; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
912; BITALG_NOVLX-NEXT:    retq
913;
914; BITALG-LABEL: ugt_6_v32i8:
915; BITALG:       # %bb.0:
916; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
917; BITALG-NEXT:    vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
918; BITALG-NEXT:    vpmovm2b %k0, %ymm0
919; BITALG-NEXT:    retq
920  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
921  %3 = icmp ugt <32 x i8> %2, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
922  %4 = sext <32 x i1> %3 to <32 x i8>
923  ret <32 x i8> %4
924}
925
926define <32 x i8> @ult_7_v32i8(<32 x i8> %0) {
927; AVX1-LABEL: ult_7_v32i8:
928; AVX1:       # %bb.0:
929; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
930; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
931; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
932; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
933; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
934; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
935; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
936; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
937; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
938; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
939; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
940; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
941; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
942; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
943; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
944; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
945; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm3
946; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
947; AVX1-NEXT:    vpminub %xmm1, %xmm2, %xmm1
948; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
949; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
950; AVX1-NEXT:    retq
951;
952; AVX2-LABEL: ult_7_v32i8:
953; AVX2:       # %bb.0:
954; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
955; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
956; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
957; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
958; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
959; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
960; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
961; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
962; AVX2-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
963; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
964; AVX2-NEXT:    retq
965;
966; AVX512VPOPCNTDQ-LABEL: ult_7_v32i8:
967; AVX512VPOPCNTDQ:       # %bb.0:
968; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
969; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm2
970; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
971; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
972; AVX512VPOPCNTDQ-NEXT:    vpsrlw $4, %ymm0, %ymm0
973; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
974; AVX512VPOPCNTDQ-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
975; AVX512VPOPCNTDQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
976; AVX512VPOPCNTDQ-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
977; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
978; AVX512VPOPCNTDQ-NEXT:    retq
979;
980; AVX512VPOPCNTDQVL-LABEL: ult_7_v32i8:
981; AVX512VPOPCNTDQVL:       # %bb.0:
982; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
983; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm2
984; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
985; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
986; AVX512VPOPCNTDQVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
987; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
988; AVX512VPOPCNTDQVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
989; AVX512VPOPCNTDQVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
990; AVX512VPOPCNTDQVL-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
991; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
992; AVX512VPOPCNTDQVL-NEXT:    retq
993;
994; BITALG_NOVLX-LABEL: ult_7_v32i8:
995; BITALG_NOVLX:       # %bb.0:
996; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
997; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
998; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
999; BITALG_NOVLX-NEXT:    vpcmpgtb %ymm0, %ymm1, %ymm0
1000; BITALG_NOVLX-NEXT:    retq
1001;
1002; BITALG-LABEL: ult_7_v32i8:
1003; BITALG:       # %bb.0:
1004; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
1005; BITALG-NEXT:    vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1006; BITALG-NEXT:    vpmovm2b %k0, %ymm0
1007; BITALG-NEXT:    retq
1008  %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)
1009  %3 = icmp ult <32 x i8> %2, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
1010  %4 = sext <32 x i1> %3 to <32 x i8>
1011  ret <32 x i8> %4
1012}
1013
1014define <16 x i16> @ugt_1_v16i16(<16 x i16> %0) {
1015; AVX1-LABEL: ugt_1_v16i16:
1016; AVX1:       # %bb.0:
1017; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1018; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
1019; AVX1-NEXT:    vpaddw %xmm2, %xmm1, %xmm3
1020; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
1021; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1022; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm1, %xmm1
1023; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
1024; AVX1-NEXT:    vpaddw %xmm2, %xmm0, %xmm4
1025; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
1026; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm0
1027; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
1028; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1029; AVX1-NEXT:    retq
1030;
1031; AVX2-LABEL: ugt_1_v16i16:
1032; AVX2:       # %bb.0:
1033; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
1034; AVX2-NEXT:    vpaddw %ymm1, %ymm0, %ymm2
1035; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
1036; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1037; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
1038; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
1039; AVX2-NEXT:    retq
1040;
1041; AVX512VPOPCNTDQ-LABEL: ugt_1_v16i16:
1042; AVX512VPOPCNTDQ:       # %bb.0:
1043; AVX512VPOPCNTDQ-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
1044; AVX512VPOPCNTDQ-NEXT:    vpaddw %ymm1, %ymm0, %ymm1
1045; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
1046; AVX512VPOPCNTDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1047; AVX512VPOPCNTDQ-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm0
1048; AVX512VPOPCNTDQ-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
1049; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
1050; AVX512VPOPCNTDQ-NEXT:    retq
1051;
1052; AVX512VPOPCNTDQVL-LABEL: ugt_1_v16i16:
1053; AVX512VPOPCNTDQVL:       # %bb.0:
1054; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
1055; AVX512VPOPCNTDQVL-NEXT:    vpaddw %ymm1, %ymm0, %ymm1
1056; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
1057; AVX512VPOPCNTDQVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1058; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm0
1059; AVX512VPOPCNTDQVL-NEXT:    vpternlogq $15, %ymm0, %ymm0, %ymm0
1060; AVX512VPOPCNTDQVL-NEXT:    retq
1061;
1062; BITALG_NOVLX-LABEL: ugt_1_v16i16:
1063; BITALG_NOVLX:       # %bb.0:
1064; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1065; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1066; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1067; BITALG_NOVLX-NEXT:    retq
1068;
1069; BITALG-LABEL: ugt_1_v16i16:
1070; BITALG:       # %bb.0:
1071; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1072; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1073; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1074; BITALG-NEXT:    retq
1075  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1076  %3 = icmp ugt <16 x i16> %2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1077  %4 = sext <16 x i1> %3 to <16 x i16>
1078  ret <16 x i16> %4
1079}
1080
1081define <16 x i16> @ult_2_v16i16(<16 x i16> %0) {
1082; AVX1-LABEL: ult_2_v16i16:
1083; AVX1:       # %bb.0:
1084; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1085; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
1086; AVX1-NEXT:    vpaddw %xmm2, %xmm1, %xmm3
1087; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
1088; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1089; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm1, %xmm1
1090; AVX1-NEXT:    vpaddw %xmm2, %xmm0, %xmm2
1091; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
1092; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm0
1093; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1094; AVX1-NEXT:    retq
1095;
1096; AVX2-LABEL: ult_2_v16i16:
1097; AVX2:       # %bb.0:
1098; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
1099; AVX2-NEXT:    vpaddw %ymm1, %ymm0, %ymm1
1100; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1101; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1102; AVX2-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm0
1103; AVX2-NEXT:    retq
1104;
1105; AVX512VPOPCNTDQ-LABEL: ult_2_v16i16:
1106; AVX512VPOPCNTDQ:       # %bb.0:
1107; AVX512VPOPCNTDQ-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
1108; AVX512VPOPCNTDQ-NEXT:    vpaddw %ymm1, %ymm0, %ymm1
1109; AVX512VPOPCNTDQ-NEXT:    vpand %ymm1, %ymm0, %ymm0
1110; AVX512VPOPCNTDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1111; AVX512VPOPCNTDQ-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm0
1112; AVX512VPOPCNTDQ-NEXT:    retq
1113;
1114; AVX512VPOPCNTDQVL-LABEL: ult_2_v16i16:
1115; AVX512VPOPCNTDQVL:       # %bb.0:
1116; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
1117; AVX512VPOPCNTDQVL-NEXT:    vpaddw %ymm1, %ymm0, %ymm1
1118; AVX512VPOPCNTDQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0
1119; AVX512VPOPCNTDQVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1120; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm0
1121; AVX512VPOPCNTDQVL-NEXT:    retq
1122;
1123; BITALG_NOVLX-LABEL: ult_2_v16i16:
1124; BITALG_NOVLX:       # %bb.0:
1125; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1126; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1127; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
1128; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1129; BITALG_NOVLX-NEXT:    retq
1130;
1131; BITALG-LABEL: ult_2_v16i16:
1132; BITALG:       # %bb.0:
1133; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1134; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1135; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1136; BITALG-NEXT:    retq
1137  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1138  %3 = icmp ult <16 x i16> %2, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1139  %4 = sext <16 x i1> %3 to <16 x i16>
1140  ret <16 x i16> %4
1141}
1142
1143define <16 x i16> @ugt_2_v16i16(<16 x i16> %0) {
1144; AVX1-LABEL: ugt_2_v16i16:
1145; AVX1:       # %bb.0:
1146; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1147; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1148; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1149; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1150; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1151; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1152; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1153; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1154; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1155; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1156; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1157; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1158; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1159; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1160; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1161; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1162; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1163; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1164; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1165; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1166; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1167; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2]
1168; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
1169; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
1170; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1171; AVX1-NEXT:    retq
1172;
1173; AVX2-LABEL: ugt_2_v16i16:
1174; AVX2:       # %bb.0:
1175; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1176; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1177; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1178; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1179; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1180; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1181; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
1182; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1183; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
1184; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
1185; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
1186; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1187; AVX2-NEXT:    retq
1188;
1189; AVX512VPOPCNTDQ-LABEL: ugt_2_v16i16:
1190; AVX512VPOPCNTDQ:       # %bb.0:
1191; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1192; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1193; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1194; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1195; AVX512VPOPCNTDQ-NEXT:    retq
1196;
1197; AVX512VPOPCNTDQVL-LABEL: ugt_2_v16i16:
1198; AVX512VPOPCNTDQVL:       # %bb.0:
1199; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1200; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1201; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
1202; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1203; AVX512VPOPCNTDQVL-NEXT:    retq
1204;
1205; BITALG_NOVLX-LABEL: ugt_2_v16i16:
1206; BITALG_NOVLX:       # %bb.0:
1207; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1208; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1209; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1210; BITALG_NOVLX-NEXT:    retq
1211;
1212; BITALG-LABEL: ugt_2_v16i16:
1213; BITALG:       # %bb.0:
1214; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1215; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1216; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1217; BITALG-NEXT:    retq
1218  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1219  %3 = icmp ugt <16 x i16> %2, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1220  %4 = sext <16 x i1> %3 to <16 x i16>
1221  ret <16 x i16> %4
1222}
1223
1224define <16 x i16> @ult_3_v16i16(<16 x i16> %0) {
1225; AVX1-LABEL: ult_3_v16i16:
1226; AVX1:       # %bb.0:
1227; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1228; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1229; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1230; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1231; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1232; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1233; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1234; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1235; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1236; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1237; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1238; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1239; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1240; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1241; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1242; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1243; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1244; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1245; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1246; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1247; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1248; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3]
1249; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1250; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
1251; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1252; AVX1-NEXT:    retq
1253;
1254; AVX2-LABEL: ult_3_v16i16:
1255; AVX2:       # %bb.0:
1256; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1257; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1258; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1259; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1260; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1261; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1262; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
1263; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1264; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
1265; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
1266; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
1267; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
1268; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1269; AVX2-NEXT:    retq
1270;
1271; AVX512VPOPCNTDQ-LABEL: ult_3_v16i16:
1272; AVX512VPOPCNTDQ:       # %bb.0:
1273; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1274; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1275; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1276; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
1277; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1278; AVX512VPOPCNTDQ-NEXT:    retq
1279;
1280; AVX512VPOPCNTDQVL-LABEL: ult_3_v16i16:
1281; AVX512VPOPCNTDQVL:       # %bb.0:
1282; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1283; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1284; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
1285; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
1286; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1287; AVX512VPOPCNTDQVL-NEXT:    retq
1288;
1289; BITALG_NOVLX-LABEL: ult_3_v16i16:
1290; BITALG_NOVLX:       # %bb.0:
1291; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1292; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1293; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
1294; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1295; BITALG_NOVLX-NEXT:    retq
1296;
1297; BITALG-LABEL: ult_3_v16i16:
1298; BITALG:       # %bb.0:
1299; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1300; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1301; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1302; BITALG-NEXT:    retq
1303  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1304  %3 = icmp ult <16 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
1305  %4 = sext <16 x i1> %3 to <16 x i16>
1306  ret <16 x i16> %4
1307}
1308
1309define <16 x i16> @ugt_3_v16i16(<16 x i16> %0) {
1310; AVX1-LABEL: ugt_3_v16i16:
1311; AVX1:       # %bb.0:
1312; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1313; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1314; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1315; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1316; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1317; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1318; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1319; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1320; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1321; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1322; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1323; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1324; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1325; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1326; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1327; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1328; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1329; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1330; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1331; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1332; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1333; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3]
1334; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
1335; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
1336; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1337; AVX1-NEXT:    retq
1338;
1339; AVX2-LABEL: ugt_3_v16i16:
1340; AVX2:       # %bb.0:
1341; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1342; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1343; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1344; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1345; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1346; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1347; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
1348; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1349; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
1350; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
1351; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
1352; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1353; AVX2-NEXT:    retq
1354;
1355; AVX512VPOPCNTDQ-LABEL: ugt_3_v16i16:
1356; AVX512VPOPCNTDQ:       # %bb.0:
1357; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1358; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1359; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1360; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1361; AVX512VPOPCNTDQ-NEXT:    retq
1362;
1363; AVX512VPOPCNTDQVL-LABEL: ugt_3_v16i16:
1364; AVX512VPOPCNTDQVL:       # %bb.0:
1365; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1366; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1367; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
1368; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1369; AVX512VPOPCNTDQVL-NEXT:    retq
1370;
1371; BITALG_NOVLX-LABEL: ugt_3_v16i16:
1372; BITALG_NOVLX:       # %bb.0:
1373; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1374; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1375; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1376; BITALG_NOVLX-NEXT:    retq
1377;
1378; BITALG-LABEL: ugt_3_v16i16:
1379; BITALG:       # %bb.0:
1380; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1381; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1382; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1383; BITALG-NEXT:    retq
1384  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1385  %3 = icmp ugt <16 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
1386  %4 = sext <16 x i1> %3 to <16 x i16>
1387  ret <16 x i16> %4
1388}
1389
1390define <16 x i16> @ult_4_v16i16(<16 x i16> %0) {
1391; AVX1-LABEL: ult_4_v16i16:
1392; AVX1:       # %bb.0:
1393; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1394; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1395; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1396; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1397; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1398; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1399; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1400; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1401; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1402; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1403; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1404; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1405; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1406; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1407; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1408; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1409; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1410; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1411; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1412; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1413; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1414; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4]
1415; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1416; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
1417; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1418; AVX1-NEXT:    retq
1419;
1420; AVX2-LABEL: ult_4_v16i16:
1421; AVX2:       # %bb.0:
1422; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1423; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1424; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1425; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1426; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1427; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1428; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
1429; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1430; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
1431; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
1432; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
1433; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
1434; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1435; AVX2-NEXT:    retq
1436;
1437; AVX512VPOPCNTDQ-LABEL: ult_4_v16i16:
1438; AVX512VPOPCNTDQ:       # %bb.0:
1439; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1440; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1441; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1442; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
1443; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1444; AVX512VPOPCNTDQ-NEXT:    retq
1445;
1446; AVX512VPOPCNTDQVL-LABEL: ult_4_v16i16:
1447; AVX512VPOPCNTDQVL:       # %bb.0:
1448; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1449; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1450; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
1451; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
1452; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1453; AVX512VPOPCNTDQVL-NEXT:    retq
1454;
1455; BITALG_NOVLX-LABEL: ult_4_v16i16:
1456; BITALG_NOVLX:       # %bb.0:
1457; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1458; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1459; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
1460; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1461; BITALG_NOVLX-NEXT:    retq
1462;
1463; BITALG-LABEL: ult_4_v16i16:
1464; BITALG:       # %bb.0:
1465; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1466; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1467; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1468; BITALG-NEXT:    retq
1469  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1470  %3 = icmp ult <16 x i16> %2, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
1471  %4 = sext <16 x i1> %3 to <16 x i16>
1472  ret <16 x i16> %4
1473}
1474
1475define <16 x i16> @ugt_4_v16i16(<16 x i16> %0) {
1476; AVX1-LABEL: ugt_4_v16i16:
1477; AVX1:       # %bb.0:
1478; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1479; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1480; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1481; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1482; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1483; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1484; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1485; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1486; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1487; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1488; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1489; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1490; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1491; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1492; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1493; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1494; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1495; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1496; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1497; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1498; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1499; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4]
1500; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
1501; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
1502; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1503; AVX1-NEXT:    retq
1504;
1505; AVX2-LABEL: ugt_4_v16i16:
1506; AVX2:       # %bb.0:
1507; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1508; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1509; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1510; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1511; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1512; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1513; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
1514; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1515; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
1516; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
1517; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
1518; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1519; AVX2-NEXT:    retq
1520;
1521; AVX512VPOPCNTDQ-LABEL: ugt_4_v16i16:
1522; AVX512VPOPCNTDQ:       # %bb.0:
1523; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1524; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1525; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1526; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1527; AVX512VPOPCNTDQ-NEXT:    retq
1528;
1529; AVX512VPOPCNTDQVL-LABEL: ugt_4_v16i16:
1530; AVX512VPOPCNTDQVL:       # %bb.0:
1531; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1532; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1533; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
1534; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1535; AVX512VPOPCNTDQVL-NEXT:    retq
1536;
1537; BITALG_NOVLX-LABEL: ugt_4_v16i16:
1538; BITALG_NOVLX:       # %bb.0:
1539; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1540; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1541; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1542; BITALG_NOVLX-NEXT:    retq
1543;
1544; BITALG-LABEL: ugt_4_v16i16:
1545; BITALG:       # %bb.0:
1546; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1547; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1548; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1549; BITALG-NEXT:    retq
1550  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1551  %3 = icmp ugt <16 x i16> %2, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
1552  %4 = sext <16 x i1> %3 to <16 x i16>
1553  ret <16 x i16> %4
1554}
1555
1556define <16 x i16> @ult_5_v16i16(<16 x i16> %0) {
1557; AVX1-LABEL: ult_5_v16i16:
1558; AVX1:       # %bb.0:
1559; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1560; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1561; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1562; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1563; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1564; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1565; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1566; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1567; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1568; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1569; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1570; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1571; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1572; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1573; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1574; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1575; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1576; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1577; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1578; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1579; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1580; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5]
1581; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1582; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
1583; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1584; AVX1-NEXT:    retq
1585;
1586; AVX2-LABEL: ult_5_v16i16:
1587; AVX2:       # %bb.0:
1588; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1589; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1590; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1591; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1592; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1593; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1594; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
1595; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1596; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
1597; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
1598; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
1599; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
1600; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1601; AVX2-NEXT:    retq
1602;
1603; AVX512VPOPCNTDQ-LABEL: ult_5_v16i16:
1604; AVX512VPOPCNTDQ:       # %bb.0:
1605; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1606; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1607; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1608; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
1609; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1610; AVX512VPOPCNTDQ-NEXT:    retq
1611;
1612; AVX512VPOPCNTDQVL-LABEL: ult_5_v16i16:
1613; AVX512VPOPCNTDQVL:       # %bb.0:
1614; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1615; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1616; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
1617; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
1618; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1619; AVX512VPOPCNTDQVL-NEXT:    retq
1620;
1621; BITALG_NOVLX-LABEL: ult_5_v16i16:
1622; BITALG_NOVLX:       # %bb.0:
1623; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1624; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1625; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
1626; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1627; BITALG_NOVLX-NEXT:    retq
1628;
1629; BITALG-LABEL: ult_5_v16i16:
1630; BITALG:       # %bb.0:
1631; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1632; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1633; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1634; BITALG-NEXT:    retq
1635  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1636  %3 = icmp ult <16 x i16> %2, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
1637  %4 = sext <16 x i1> %3 to <16 x i16>
1638  ret <16 x i16> %4
1639}
1640
1641define <16 x i16> @ugt_5_v16i16(<16 x i16> %0) {
1642; AVX1-LABEL: ugt_5_v16i16:
1643; AVX1:       # %bb.0:
1644; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1645; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1646; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1647; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1648; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1649; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1650; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1651; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1652; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1653; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1654; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1655; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1656; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1657; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1658; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1659; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1660; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1661; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1662; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1663; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1664; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1665; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5]
1666; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
1667; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
1668; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1669; AVX1-NEXT:    retq
1670;
1671; AVX2-LABEL: ugt_5_v16i16:
1672; AVX2:       # %bb.0:
1673; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1674; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1675; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1676; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1677; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1678; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1679; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
1680; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1681; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
1682; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
1683; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
1684; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1685; AVX2-NEXT:    retq
1686;
1687; AVX512VPOPCNTDQ-LABEL: ugt_5_v16i16:
1688; AVX512VPOPCNTDQ:       # %bb.0:
1689; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1690; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1691; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1692; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1693; AVX512VPOPCNTDQ-NEXT:    retq
1694;
1695; AVX512VPOPCNTDQVL-LABEL: ugt_5_v16i16:
1696; AVX512VPOPCNTDQVL:       # %bb.0:
1697; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1698; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1699; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
1700; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1701; AVX512VPOPCNTDQVL-NEXT:    retq
1702;
1703; BITALG_NOVLX-LABEL: ugt_5_v16i16:
1704; BITALG_NOVLX:       # %bb.0:
1705; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1706; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1707; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1708; BITALG_NOVLX-NEXT:    retq
1709;
1710; BITALG-LABEL: ugt_5_v16i16:
1711; BITALG:       # %bb.0:
1712; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1713; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1714; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1715; BITALG-NEXT:    retq
1716  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1717  %3 = icmp ugt <16 x i16> %2, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
1718  %4 = sext <16 x i1> %3 to <16 x i16>
1719  ret <16 x i16> %4
1720}
1721
1722define <16 x i16> @ult_6_v16i16(<16 x i16> %0) {
1723; AVX1-LABEL: ult_6_v16i16:
1724; AVX1:       # %bb.0:
1725; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1726; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1727; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1728; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1729; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1730; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1731; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1732; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1733; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1734; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1735; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1736; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1737; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1738; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1739; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1740; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1741; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1742; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1743; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1744; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1745; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1746; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6]
1747; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1748; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
1749; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1750; AVX1-NEXT:    retq
1751;
1752; AVX2-LABEL: ult_6_v16i16:
1753; AVX2:       # %bb.0:
1754; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1755; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1756; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1757; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1758; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1759; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1760; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
1761; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1762; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
1763; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
1764; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
1765; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1766; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1767; AVX2-NEXT:    retq
1768;
1769; AVX512VPOPCNTDQ-LABEL: ult_6_v16i16:
1770; AVX512VPOPCNTDQ:       # %bb.0:
1771; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1772; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1773; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1774; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1775; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1776; AVX512VPOPCNTDQ-NEXT:    retq
1777;
1778; AVX512VPOPCNTDQVL-LABEL: ult_6_v16i16:
1779; AVX512VPOPCNTDQVL:       # %bb.0:
1780; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1781; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1782; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
1783; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1784; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1785; AVX512VPOPCNTDQVL-NEXT:    retq
1786;
1787; BITALG_NOVLX-LABEL: ult_6_v16i16:
1788; BITALG_NOVLX:       # %bb.0:
1789; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1790; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1791; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1792; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1793; BITALG_NOVLX-NEXT:    retq
1794;
1795; BITALG-LABEL: ult_6_v16i16:
1796; BITALG:       # %bb.0:
1797; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1798; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1799; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1800; BITALG-NEXT:    retq
1801  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1802  %3 = icmp ult <16 x i16> %2, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
1803  %4 = sext <16 x i1> %3 to <16 x i16>
1804  ret <16 x i16> %4
1805}
1806
1807define <16 x i16> @ugt_6_v16i16(<16 x i16> %0) {
1808; AVX1-LABEL: ugt_6_v16i16:
1809; AVX1:       # %bb.0:
1810; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1811; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1812; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1813; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1814; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1815; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1816; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1817; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1818; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1819; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1820; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1821; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1822; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1823; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1824; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1825; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1826; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1827; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1828; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1829; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1830; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1831; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6]
1832; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
1833; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
1834; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1835; AVX1-NEXT:    retq
1836;
1837; AVX2-LABEL: ugt_6_v16i16:
1838; AVX2:       # %bb.0:
1839; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1840; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1841; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1842; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1843; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1844; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1845; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
1846; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1847; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
1848; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
1849; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
1850; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1851; AVX2-NEXT:    retq
1852;
1853; AVX512VPOPCNTDQ-LABEL: ugt_6_v16i16:
1854; AVX512VPOPCNTDQ:       # %bb.0:
1855; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1856; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1857; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1858; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1859; AVX512VPOPCNTDQ-NEXT:    retq
1860;
1861; AVX512VPOPCNTDQVL-LABEL: ugt_6_v16i16:
1862; AVX512VPOPCNTDQVL:       # %bb.0:
1863; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1864; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1865; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
1866; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1867; AVX512VPOPCNTDQVL-NEXT:    retq
1868;
1869; BITALG_NOVLX-LABEL: ugt_6_v16i16:
1870; BITALG_NOVLX:       # %bb.0:
1871; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1872; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1873; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1874; BITALG_NOVLX-NEXT:    retq
1875;
1876; BITALG-LABEL: ugt_6_v16i16:
1877; BITALG:       # %bb.0:
1878; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1879; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1880; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1881; BITALG-NEXT:    retq
1882  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1883  %3 = icmp ugt <16 x i16> %2, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
1884  %4 = sext <16 x i1> %3 to <16 x i16>
1885  ret <16 x i16> %4
1886}
1887
1888define <16 x i16> @ult_7_v16i16(<16 x i16> %0) {
1889; AVX1-LABEL: ult_7_v16i16:
1890; AVX1:       # %bb.0:
1891; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1892; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1893; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1894; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1895; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1896; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1897; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1898; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1899; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1900; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1901; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1902; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1903; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1904; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1905; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1906; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1907; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1908; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1909; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1910; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1911; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1912; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]
1913; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1914; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
1915; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1916; AVX1-NEXT:    retq
1917;
1918; AVX2-LABEL: ult_7_v16i16:
1919; AVX2:       # %bb.0:
1920; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1921; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1922; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1923; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1924; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1925; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1926; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
1927; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1928; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
1929; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
1930; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
1931; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1932; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1933; AVX2-NEXT:    retq
1934;
1935; AVX512VPOPCNTDQ-LABEL: ult_7_v16i16:
1936; AVX512VPOPCNTDQ:       # %bb.0:
1937; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1938; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1939; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1940; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1941; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1942; AVX512VPOPCNTDQ-NEXT:    retq
1943;
1944; AVX512VPOPCNTDQVL-LABEL: ult_7_v16i16:
1945; AVX512VPOPCNTDQVL:       # %bb.0:
1946; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1947; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1948; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
1949; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1950; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1951; AVX512VPOPCNTDQVL-NEXT:    retq
1952;
1953; BITALG_NOVLX-LABEL: ult_7_v16i16:
1954; BITALG_NOVLX:       # %bb.0:
1955; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1956; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1957; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1958; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
1959; BITALG_NOVLX-NEXT:    retq
1960;
1961; BITALG-LABEL: ult_7_v16i16:
1962; BITALG:       # %bb.0:
1963; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
1964; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
1965; BITALG-NEXT:    vpmovm2w %k0, %ymm0
1966; BITALG-NEXT:    retq
1967  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
1968  %3 = icmp ult <16 x i16> %2, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>
1969  %4 = sext <16 x i1> %3 to <16 x i16>
1970  ret <16 x i16> %4
1971}
1972
1973define <16 x i16> @ugt_7_v16i16(<16 x i16> %0) {
1974; AVX1-LABEL: ugt_7_v16i16:
1975; AVX1:       # %bb.0:
1976; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1977; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1978; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1979; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1980; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
1981; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
1982; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1983; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1984; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
1985; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
1986; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
1987; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1988; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
1989; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
1990; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1991; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1992; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1993; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
1994; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1995; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1996; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1997; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]
1998; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
1999; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
2000; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2001; AVX1-NEXT:    retq
2002;
2003; AVX2-LABEL: ugt_7_v16i16:
2004; AVX2:       # %bb.0:
2005; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2006; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2007; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2008; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2009; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2010; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2011; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2012; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2013; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2014; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2015; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2016; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2017; AVX2-NEXT:    retq
2018;
2019; AVX512VPOPCNTDQ-LABEL: ugt_7_v16i16:
2020; AVX512VPOPCNTDQ:       # %bb.0:
2021; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2022; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2023; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2024; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2025; AVX512VPOPCNTDQ-NEXT:    retq
2026;
2027; AVX512VPOPCNTDQVL-LABEL: ugt_7_v16i16:
2028; AVX512VPOPCNTDQVL:       # %bb.0:
2029; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2030; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2031; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2032; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2033; AVX512VPOPCNTDQVL-NEXT:    retq
2034;
2035; BITALG_NOVLX-LABEL: ugt_7_v16i16:
2036; BITALG_NOVLX:       # %bb.0:
2037; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2038; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2039; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2040; BITALG_NOVLX-NEXT:    retq
2041;
2042; BITALG-LABEL: ugt_7_v16i16:
2043; BITALG:       # %bb.0:
2044; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2045; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2046; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2047; BITALG-NEXT:    retq
2048  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2049  %3 = icmp ugt <16 x i16> %2, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>
2050  %4 = sext <16 x i1> %3 to <16 x i16>
2051  ret <16 x i16> %4
2052}
2053
2054define <16 x i16> @ult_8_v16i16(<16 x i16> %0) {
2055; AVX1-LABEL: ult_8_v16i16:
2056; AVX1:       # %bb.0:
2057; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2058; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2059; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2060; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2061; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2062; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2063; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2064; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2065; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2066; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2067; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2068; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2069; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2070; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2071; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2072; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2073; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2074; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2075; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2076; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2077; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2078; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8]
2079; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2080; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
2081; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2082; AVX1-NEXT:    retq
2083;
2084; AVX2-LABEL: ult_8_v16i16:
2085; AVX2:       # %bb.0:
2086; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2087; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2088; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2089; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2090; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2091; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2092; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2093; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2094; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2095; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2096; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2097; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
2098; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2099; AVX2-NEXT:    retq
2100;
2101; AVX512VPOPCNTDQ-LABEL: ult_8_v16i16:
2102; AVX512VPOPCNTDQ:       # %bb.0:
2103; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2104; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2105; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2106; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
2107; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2108; AVX512VPOPCNTDQ-NEXT:    retq
2109;
2110; AVX512VPOPCNTDQVL-LABEL: ult_8_v16i16:
2111; AVX512VPOPCNTDQVL:       # %bb.0:
2112; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2113; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2114; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2115; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
2116; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2117; AVX512VPOPCNTDQVL-NEXT:    retq
2118;
2119; BITALG_NOVLX-LABEL: ult_8_v16i16:
2120; BITALG_NOVLX:       # %bb.0:
2121; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2122; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2123; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
2124; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2125; BITALG_NOVLX-NEXT:    retq
2126;
2127; BITALG-LABEL: ult_8_v16i16:
2128; BITALG:       # %bb.0:
2129; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2130; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2131; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2132; BITALG-NEXT:    retq
2133  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2134  %3 = icmp ult <16 x i16> %2, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2135  %4 = sext <16 x i1> %3 to <16 x i16>
2136  ret <16 x i16> %4
2137}
2138
2139define <16 x i16> @ugt_8_v16i16(<16 x i16> %0) {
2140; AVX1-LABEL: ugt_8_v16i16:
2141; AVX1:       # %bb.0:
2142; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2143; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2144; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2145; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2146; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2147; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2148; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2149; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2150; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2151; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2152; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2153; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2154; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2155; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2156; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2157; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2158; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2159; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2160; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2161; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2162; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2163; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8]
2164; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
2165; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
2166; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2167; AVX1-NEXT:    retq
2168;
2169; AVX2-LABEL: ugt_8_v16i16:
2170; AVX2:       # %bb.0:
2171; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2172; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2173; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2174; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2175; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2176; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2177; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2178; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2179; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2180; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2181; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2182; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2183; AVX2-NEXT:    retq
2184;
2185; AVX512VPOPCNTDQ-LABEL: ugt_8_v16i16:
2186; AVX512VPOPCNTDQ:       # %bb.0:
2187; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2188; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2189; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2190; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2191; AVX512VPOPCNTDQ-NEXT:    retq
2192;
2193; AVX512VPOPCNTDQVL-LABEL: ugt_8_v16i16:
2194; AVX512VPOPCNTDQVL:       # %bb.0:
2195; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2196; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2197; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2198; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2199; AVX512VPOPCNTDQVL-NEXT:    retq
2200;
2201; BITALG_NOVLX-LABEL: ugt_8_v16i16:
2202; BITALG_NOVLX:       # %bb.0:
2203; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2204; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2205; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2206; BITALG_NOVLX-NEXT:    retq
2207;
2208; BITALG-LABEL: ugt_8_v16i16:
2209; BITALG:       # %bb.0:
2210; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2211; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2212; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2213; BITALG-NEXT:    retq
2214  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2215  %3 = icmp ugt <16 x i16> %2, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2216  %4 = sext <16 x i1> %3 to <16 x i16>
2217  ret <16 x i16> %4
2218}
2219
2220define <16 x i16> @ult_9_v16i16(<16 x i16> %0) {
2221; AVX1-LABEL: ult_9_v16i16:
2222; AVX1:       # %bb.0:
2223; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2224; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2225; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2226; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2227; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2228; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2229; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2230; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2231; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2232; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2233; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2234; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2235; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2236; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2237; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2238; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2239; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2240; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2241; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2242; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2243; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2244; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9]
2245; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2246; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
2247; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2248; AVX1-NEXT:    retq
2249;
2250; AVX2-LABEL: ult_9_v16i16:
2251; AVX2:       # %bb.0:
2252; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2253; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2254; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2255; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2256; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2257; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2258; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2259; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2260; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2261; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2262; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2263; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]
2264; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2265; AVX2-NEXT:    retq
2266;
2267; AVX512VPOPCNTDQ-LABEL: ult_9_v16i16:
2268; AVX512VPOPCNTDQ:       # %bb.0:
2269; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2270; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2271; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2272; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]
2273; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2274; AVX512VPOPCNTDQ-NEXT:    retq
2275;
2276; AVX512VPOPCNTDQVL-LABEL: ult_9_v16i16:
2277; AVX512VPOPCNTDQVL:       # %bb.0:
2278; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2279; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2280; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2281; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]
2282; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2283; AVX512VPOPCNTDQVL-NEXT:    retq
2284;
2285; BITALG_NOVLX-LABEL: ult_9_v16i16:
2286; BITALG_NOVLX:       # %bb.0:
2287; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2288; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2289; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]
2290; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2291; BITALG_NOVLX-NEXT:    retq
2292;
2293; BITALG-LABEL: ult_9_v16i16:
2294; BITALG:       # %bb.0:
2295; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2296; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2297; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2298; BITALG-NEXT:    retq
2299  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2300  %3 = icmp ult <16 x i16> %2, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
2301  %4 = sext <16 x i1> %3 to <16 x i16>
2302  ret <16 x i16> %4
2303}
2304
2305define <16 x i16> @ugt_9_v16i16(<16 x i16> %0) {
2306; AVX1-LABEL: ugt_9_v16i16:
2307; AVX1:       # %bb.0:
2308; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2309; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2310; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2311; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2312; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2313; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2314; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2315; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2316; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2317; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2318; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2319; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2320; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2321; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2322; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2323; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2324; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2325; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2326; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2327; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2328; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2329; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9]
2330; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
2331; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
2332; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2333; AVX1-NEXT:    retq
2334;
2335; AVX2-LABEL: ugt_9_v16i16:
2336; AVX2:       # %bb.0:
2337; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2338; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2339; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2340; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2341; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2342; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2343; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2344; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2345; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2346; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2347; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2348; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2349; AVX2-NEXT:    retq
2350;
2351; AVX512VPOPCNTDQ-LABEL: ugt_9_v16i16:
2352; AVX512VPOPCNTDQ:       # %bb.0:
2353; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2354; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2355; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2356; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2357; AVX512VPOPCNTDQ-NEXT:    retq
2358;
2359; AVX512VPOPCNTDQVL-LABEL: ugt_9_v16i16:
2360; AVX512VPOPCNTDQVL:       # %bb.0:
2361; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2362; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2363; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2364; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2365; AVX512VPOPCNTDQVL-NEXT:    retq
2366;
2367; BITALG_NOVLX-LABEL: ugt_9_v16i16:
2368; BITALG_NOVLX:       # %bb.0:
2369; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2370; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2371; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2372; BITALG_NOVLX-NEXT:    retq
2373;
2374; BITALG-LABEL: ugt_9_v16i16:
2375; BITALG:       # %bb.0:
2376; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2377; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2378; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2379; BITALG-NEXT:    retq
2380  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2381  %3 = icmp ugt <16 x i16> %2, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
2382  %4 = sext <16 x i1> %3 to <16 x i16>
2383  ret <16 x i16> %4
2384}
2385
2386define <16 x i16> @ult_10_v16i16(<16 x i16> %0) {
2387; AVX1-LABEL: ult_10_v16i16:
2388; AVX1:       # %bb.0:
2389; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2390; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2391; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2392; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2393; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2394; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2395; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2396; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2397; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2398; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2399; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2400; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2401; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2402; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2403; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2404; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2405; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2406; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2407; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2408; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2409; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2410; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10]
2411; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2412; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
2413; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2414; AVX1-NEXT:    retq
2415;
2416; AVX2-LABEL: ult_10_v16i16:
2417; AVX2:       # %bb.0:
2418; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2419; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2420; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2421; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2422; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2423; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2424; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2425; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2426; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2427; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2428; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2429; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
2430; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2431; AVX2-NEXT:    retq
2432;
2433; AVX512VPOPCNTDQ-LABEL: ult_10_v16i16:
2434; AVX512VPOPCNTDQ:       # %bb.0:
2435; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2436; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2437; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2438; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
2439; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2440; AVX512VPOPCNTDQ-NEXT:    retq
2441;
2442; AVX512VPOPCNTDQVL-LABEL: ult_10_v16i16:
2443; AVX512VPOPCNTDQVL:       # %bb.0:
2444; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2445; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2446; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2447; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
2448; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2449; AVX512VPOPCNTDQVL-NEXT:    retq
2450;
2451; BITALG_NOVLX-LABEL: ult_10_v16i16:
2452; BITALG_NOVLX:       # %bb.0:
2453; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2454; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2455; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
2456; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2457; BITALG_NOVLX-NEXT:    retq
2458;
2459; BITALG-LABEL: ult_10_v16i16:
2460; BITALG:       # %bb.0:
2461; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2462; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2463; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2464; BITALG-NEXT:    retq
2465  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2466  %3 = icmp ult <16 x i16> %2, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
2467  %4 = sext <16 x i1> %3 to <16 x i16>
2468  ret <16 x i16> %4
2469}
2470
2471define <16 x i16> @ugt_10_v16i16(<16 x i16> %0) {
2472; AVX1-LABEL: ugt_10_v16i16:
2473; AVX1:       # %bb.0:
2474; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2475; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2476; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2477; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2478; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2479; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2480; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2481; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2482; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2483; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2484; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2485; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2486; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2487; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2488; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2489; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2490; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2491; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2492; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2493; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2494; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2495; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10]
2496; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
2497; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
2498; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2499; AVX1-NEXT:    retq
2500;
2501; AVX2-LABEL: ugt_10_v16i16:
2502; AVX2:       # %bb.0:
2503; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2504; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2505; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2506; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2507; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2508; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2509; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2510; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2511; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2512; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2513; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2514; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2515; AVX2-NEXT:    retq
2516;
2517; AVX512VPOPCNTDQ-LABEL: ugt_10_v16i16:
2518; AVX512VPOPCNTDQ:       # %bb.0:
2519; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2520; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2521; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2522; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2523; AVX512VPOPCNTDQ-NEXT:    retq
2524;
2525; AVX512VPOPCNTDQVL-LABEL: ugt_10_v16i16:
2526; AVX512VPOPCNTDQVL:       # %bb.0:
2527; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2528; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2529; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2530; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2531; AVX512VPOPCNTDQVL-NEXT:    retq
2532;
2533; BITALG_NOVLX-LABEL: ugt_10_v16i16:
2534; BITALG_NOVLX:       # %bb.0:
2535; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2536; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2537; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2538; BITALG_NOVLX-NEXT:    retq
2539;
2540; BITALG-LABEL: ugt_10_v16i16:
2541; BITALG:       # %bb.0:
2542; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2543; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2544; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2545; BITALG-NEXT:    retq
2546  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2547  %3 = icmp ugt <16 x i16> %2, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
2548  %4 = sext <16 x i1> %3 to <16 x i16>
2549  ret <16 x i16> %4
2550}
2551
2552define <16 x i16> @ult_11_v16i16(<16 x i16> %0) {
2553; AVX1-LABEL: ult_11_v16i16:
2554; AVX1:       # %bb.0:
2555; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2556; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2557; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2558; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2559; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2560; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2561; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2562; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2563; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2564; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2565; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2566; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2567; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2568; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2569; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2570; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2571; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2572; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2573; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2574; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2575; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2576; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11]
2577; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2578; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
2579; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2580; AVX1-NEXT:    retq
2581;
2582; AVX2-LABEL: ult_11_v16i16:
2583; AVX2:       # %bb.0:
2584; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2585; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2586; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2587; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2588; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2589; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2590; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2591; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2592; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2593; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2594; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2595; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11]
2596; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2597; AVX2-NEXT:    retq
2598;
2599; AVX512VPOPCNTDQ-LABEL: ult_11_v16i16:
2600; AVX512VPOPCNTDQ:       # %bb.0:
2601; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2602; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2603; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2604; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11]
2605; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2606; AVX512VPOPCNTDQ-NEXT:    retq
2607;
2608; AVX512VPOPCNTDQVL-LABEL: ult_11_v16i16:
2609; AVX512VPOPCNTDQVL:       # %bb.0:
2610; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2611; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2612; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2613; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11]
2614; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2615; AVX512VPOPCNTDQVL-NEXT:    retq
2616;
2617; BITALG_NOVLX-LABEL: ult_11_v16i16:
2618; BITALG_NOVLX:       # %bb.0:
2619; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2620; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2621; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11]
2622; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2623; BITALG_NOVLX-NEXT:    retq
2624;
2625; BITALG-LABEL: ult_11_v16i16:
2626; BITALG:       # %bb.0:
2627; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2628; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2629; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2630; BITALG-NEXT:    retq
2631  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2632  %3 = icmp ult <16 x i16> %2, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11>
2633  %4 = sext <16 x i1> %3 to <16 x i16>
2634  ret <16 x i16> %4
2635}
2636
2637define <16 x i16> @ugt_11_v16i16(<16 x i16> %0) {
2638; AVX1-LABEL: ugt_11_v16i16:
2639; AVX1:       # %bb.0:
2640; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2641; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2642; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2643; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2644; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2645; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2646; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2647; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2648; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2649; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2650; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2651; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2652; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2653; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2654; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2655; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2656; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2657; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2658; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2659; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2660; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2661; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11]
2662; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
2663; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
2664; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2665; AVX1-NEXT:    retq
2666;
2667; AVX2-LABEL: ugt_11_v16i16:
2668; AVX2:       # %bb.0:
2669; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2670; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2671; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2672; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2673; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2674; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2675; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2676; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2677; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2678; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2679; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2680; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2681; AVX2-NEXT:    retq
2682;
2683; AVX512VPOPCNTDQ-LABEL: ugt_11_v16i16:
2684; AVX512VPOPCNTDQ:       # %bb.0:
2685; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2686; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2687; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2688; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2689; AVX512VPOPCNTDQ-NEXT:    retq
2690;
2691; AVX512VPOPCNTDQVL-LABEL: ugt_11_v16i16:
2692; AVX512VPOPCNTDQVL:       # %bb.0:
2693; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2694; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2695; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2696; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2697; AVX512VPOPCNTDQVL-NEXT:    retq
2698;
2699; BITALG_NOVLX-LABEL: ugt_11_v16i16:
2700; BITALG_NOVLX:       # %bb.0:
2701; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2702; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2703; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2704; BITALG_NOVLX-NEXT:    retq
2705;
2706; BITALG-LABEL: ugt_11_v16i16:
2707; BITALG:       # %bb.0:
2708; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2709; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2710; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2711; BITALG-NEXT:    retq
2712  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2713  %3 = icmp ugt <16 x i16> %2, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11>
2714  %4 = sext <16 x i1> %3 to <16 x i16>
2715  ret <16 x i16> %4
2716}
2717
2718define <16 x i16> @ult_12_v16i16(<16 x i16> %0) {
2719; AVX1-LABEL: ult_12_v16i16:
2720; AVX1:       # %bb.0:
2721; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2722; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2723; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2724; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2725; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2726; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2727; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2728; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2729; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2730; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2731; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2732; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2733; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2734; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2735; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2736; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2737; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2738; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2739; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2740; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2741; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2742; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12]
2743; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2744; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
2745; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2746; AVX1-NEXT:    retq
2747;
2748; AVX2-LABEL: ult_12_v16i16:
2749; AVX2:       # %bb.0:
2750; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2751; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2752; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2753; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2754; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2755; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2756; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2757; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2758; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2759; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2760; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2761; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]
2762; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2763; AVX2-NEXT:    retq
2764;
2765; AVX512VPOPCNTDQ-LABEL: ult_12_v16i16:
2766; AVX512VPOPCNTDQ:       # %bb.0:
2767; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2768; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2769; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2770; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]
2771; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2772; AVX512VPOPCNTDQ-NEXT:    retq
2773;
2774; AVX512VPOPCNTDQVL-LABEL: ult_12_v16i16:
2775; AVX512VPOPCNTDQVL:       # %bb.0:
2776; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2777; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2778; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2779; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]
2780; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2781; AVX512VPOPCNTDQVL-NEXT:    retq
2782;
2783; BITALG_NOVLX-LABEL: ult_12_v16i16:
2784; BITALG_NOVLX:       # %bb.0:
2785; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2786; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2787; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]
2788; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2789; BITALG_NOVLX-NEXT:    retq
2790;
2791; BITALG-LABEL: ult_12_v16i16:
2792; BITALG:       # %bb.0:
2793; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2794; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2795; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2796; BITALG-NEXT:    retq
2797  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2798  %3 = icmp ult <16 x i16> %2, <i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12>
2799  %4 = sext <16 x i1> %3 to <16 x i16>
2800  ret <16 x i16> %4
2801}
2802
2803define <16 x i16> @ugt_12_v16i16(<16 x i16> %0) {
2804; AVX1-LABEL: ugt_12_v16i16:
2805; AVX1:       # %bb.0:
2806; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2807; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2808; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2809; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2810; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2811; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2812; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2813; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2814; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2815; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2816; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2817; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2818; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2819; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2820; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2821; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2822; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2823; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2824; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2825; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2826; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2827; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12]
2828; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
2829; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
2830; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2831; AVX1-NEXT:    retq
2832;
2833; AVX2-LABEL: ugt_12_v16i16:
2834; AVX2:       # %bb.0:
2835; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2836; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2837; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2838; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2839; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2840; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2841; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2842; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2843; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2844; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2845; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2846; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2847; AVX2-NEXT:    retq
2848;
2849; AVX512VPOPCNTDQ-LABEL: ugt_12_v16i16:
2850; AVX512VPOPCNTDQ:       # %bb.0:
2851; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2852; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2853; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2854; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2855; AVX512VPOPCNTDQ-NEXT:    retq
2856;
2857; AVX512VPOPCNTDQVL-LABEL: ugt_12_v16i16:
2858; AVX512VPOPCNTDQVL:       # %bb.0:
2859; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2860; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2861; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2862; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2863; AVX512VPOPCNTDQVL-NEXT:    retq
2864;
2865; BITALG_NOVLX-LABEL: ugt_12_v16i16:
2866; BITALG_NOVLX:       # %bb.0:
2867; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2868; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2869; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2870; BITALG_NOVLX-NEXT:    retq
2871;
2872; BITALG-LABEL: ugt_12_v16i16:
2873; BITALG:       # %bb.0:
2874; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2875; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2876; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2877; BITALG-NEXT:    retq
2878  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2879  %3 = icmp ugt <16 x i16> %2, <i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12>
2880  %4 = sext <16 x i1> %3 to <16 x i16>
2881  ret <16 x i16> %4
2882}
2883
2884define <16 x i16> @ult_13_v16i16(<16 x i16> %0) {
2885; AVX1-LABEL: ult_13_v16i16:
2886; AVX1:       # %bb.0:
2887; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2888; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2889; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2890; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2891; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2892; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2893; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2894; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2895; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2896; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2897; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2898; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2899; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2900; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2901; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2902; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2903; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2904; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2905; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2906; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2907; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2908; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13]
2909; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2910; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
2911; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2912; AVX1-NEXT:    retq
2913;
2914; AVX2-LABEL: ult_13_v16i16:
2915; AVX2:       # %bb.0:
2916; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2917; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2918; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2919; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2920; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2921; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2922; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
2923; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
2924; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
2925; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
2926; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
2927; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13]
2928; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2929; AVX2-NEXT:    retq
2930;
2931; AVX512VPOPCNTDQ-LABEL: ult_13_v16i16:
2932; AVX512VPOPCNTDQ:       # %bb.0:
2933; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2934; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2935; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2936; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13]
2937; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2938; AVX512VPOPCNTDQ-NEXT:    retq
2939;
2940; AVX512VPOPCNTDQVL-LABEL: ult_13_v16i16:
2941; AVX512VPOPCNTDQVL:       # %bb.0:
2942; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
2943; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
2944; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
2945; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13]
2946; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2947; AVX512VPOPCNTDQVL-NEXT:    retq
2948;
2949; BITALG_NOVLX-LABEL: ult_13_v16i16:
2950; BITALG_NOVLX:       # %bb.0:
2951; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2952; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2953; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13]
2954; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
2955; BITALG_NOVLX-NEXT:    retq
2956;
2957; BITALG-LABEL: ult_13_v16i16:
2958; BITALG:       # %bb.0:
2959; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
2960; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
2961; BITALG-NEXT:    vpmovm2w %k0, %ymm0
2962; BITALG-NEXT:    retq
2963  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
2964  %3 = icmp ult <16 x i16> %2, <i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13>
2965  %4 = sext <16 x i1> %3 to <16 x i16>
2966  ret <16 x i16> %4
2967}
2968
2969define <16 x i16> @ugt_13_v16i16(<16 x i16> %0) {
2970; AVX1-LABEL: ugt_13_v16i16:
2971; AVX1:       # %bb.0:
2972; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2973; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2974; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2975; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2976; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
2977; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
2978; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2979; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2980; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
2981; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
2982; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
2983; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2984; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
2985; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
2986; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2987; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2988; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2989; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
2990; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2991; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2992; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2993; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13]
2994; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
2995; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
2996; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2997; AVX1-NEXT:    retq
2998;
2999; AVX2-LABEL: ugt_13_v16i16:
3000; AVX2:       # %bb.0:
3001; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3002; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
3003; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3004; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
3005; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3006; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3007; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
3008; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
3009; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
3010; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
3011; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
3012; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3013; AVX2-NEXT:    retq
3014;
3015; AVX512VPOPCNTDQ-LABEL: ugt_13_v16i16:
3016; AVX512VPOPCNTDQ:       # %bb.0:
3017; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
3018; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3019; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3020; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3021; AVX512VPOPCNTDQ-NEXT:    retq
3022;
3023; AVX512VPOPCNTDQVL-LABEL: ugt_13_v16i16:
3024; AVX512VPOPCNTDQVL:       # %bb.0:
3025; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
3026; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
3027; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
3028; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3029; AVX512VPOPCNTDQVL-NEXT:    retq
3030;
3031; BITALG_NOVLX-LABEL: ugt_13_v16i16:
3032; BITALG_NOVLX:       # %bb.0:
3033; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3034; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3035; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3036; BITALG_NOVLX-NEXT:    retq
3037;
3038; BITALG-LABEL: ugt_13_v16i16:
3039; BITALG:       # %bb.0:
3040; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
3041; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
3042; BITALG-NEXT:    vpmovm2w %k0, %ymm0
3043; BITALG-NEXT:    retq
3044  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
3045  %3 = icmp ugt <16 x i16> %2, <i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13>
3046  %4 = sext <16 x i1> %3 to <16 x i16>
3047  ret <16 x i16> %4
3048}
3049
3050define <16 x i16> @ult_14_v16i16(<16 x i16> %0) {
3051; AVX1-LABEL: ult_14_v16i16:
3052; AVX1:       # %bb.0:
3053; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3054; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3055; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3056; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3057; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
3058; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
3059; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3060; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3061; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
3062; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3063; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
3064; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3065; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
3066; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3067; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3068; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3069; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3070; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
3071; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
3072; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3073; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
3074; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14]
3075; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3076; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
3077; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
3078; AVX1-NEXT:    retq
3079;
3080; AVX2-LABEL: ult_14_v16i16:
3081; AVX2:       # %bb.0:
3082; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3083; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
3084; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3085; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
3086; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3087; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3088; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
3089; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
3090; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
3091; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
3092; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
3093; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]
3094; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
3095; AVX2-NEXT:    retq
3096;
3097; AVX512VPOPCNTDQ-LABEL: ult_14_v16i16:
3098; AVX512VPOPCNTDQ:       # %bb.0:
3099; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
3100; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3101; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3102; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]
3103; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
3104; AVX512VPOPCNTDQ-NEXT:    retq
3105;
3106; AVX512VPOPCNTDQVL-LABEL: ult_14_v16i16:
3107; AVX512VPOPCNTDQVL:       # %bb.0:
3108; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
3109; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
3110; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
3111; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]
3112; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
3113; AVX512VPOPCNTDQVL-NEXT:    retq
3114;
3115; BITALG_NOVLX-LABEL: ult_14_v16i16:
3116; BITALG_NOVLX:       # %bb.0:
3117; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3118; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3119; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]
3120; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
3121; BITALG_NOVLX-NEXT:    retq
3122;
3123; BITALG-LABEL: ult_14_v16i16:
3124; BITALG:       # %bb.0:
3125; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
3126; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
3127; BITALG-NEXT:    vpmovm2w %k0, %ymm0
3128; BITALG-NEXT:    retq
3129  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
3130  %3 = icmp ult <16 x i16> %2, <i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14>
3131  %4 = sext <16 x i1> %3 to <16 x i16>
3132  ret <16 x i16> %4
3133}
3134
3135define <16 x i16> @ugt_14_v16i16(<16 x i16> %0) {
3136; AVX1-LABEL: ugt_14_v16i16:
3137; AVX1:       # %bb.0:
3138; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3139; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3140; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3141; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3142; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
3143; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
3144; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3145; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3146; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
3147; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3148; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
3149; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3150; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
3151; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3152; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3153; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3154; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3155; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
3156; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
3157; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3158; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
3159; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14]
3160; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
3161; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm2, %xmm1
3162; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
3163; AVX1-NEXT:    retq
3164;
3165; AVX2-LABEL: ugt_14_v16i16:
3166; AVX2:       # %bb.0:
3167; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3168; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
3169; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3170; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
3171; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3172; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3173; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
3174; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
3175; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
3176; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
3177; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
3178; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3179; AVX2-NEXT:    retq
3180;
3181; AVX512VPOPCNTDQ-LABEL: ugt_14_v16i16:
3182; AVX512VPOPCNTDQ:       # %bb.0:
3183; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
3184; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3185; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3186; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3187; AVX512VPOPCNTDQ-NEXT:    retq
3188;
3189; AVX512VPOPCNTDQVL-LABEL: ugt_14_v16i16:
3190; AVX512VPOPCNTDQVL:       # %bb.0:
3191; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
3192; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
3193; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
3194; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3195; AVX512VPOPCNTDQVL-NEXT:    retq
3196;
3197; BITALG_NOVLX-LABEL: ugt_14_v16i16:
3198; BITALG_NOVLX:       # %bb.0:
3199; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3200; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3201; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3202; BITALG_NOVLX-NEXT:    retq
3203;
3204; BITALG-LABEL: ugt_14_v16i16:
3205; BITALG:       # %bb.0:
3206; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
3207; BITALG-NEXT:    vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
3208; BITALG-NEXT:    vpmovm2w %k0, %ymm0
3209; BITALG-NEXT:    retq
3210  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
3211  %3 = icmp ugt <16 x i16> %2, <i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14>
3212  %4 = sext <16 x i1> %3 to <16 x i16>
3213  ret <16 x i16> %4
3214}
3215
3216define <16 x i16> @ult_15_v16i16(<16 x i16> %0) {
3217; AVX1-LABEL: ult_15_v16i16:
3218; AVX1:       # %bb.0:
3219; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3220; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3221; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3222; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3223; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
3224; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
3225; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3226; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3227; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
3228; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3229; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
3230; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3231; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm4
3232; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3233; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3234; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3235; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3236; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
3237; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
3238; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3239; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
3240; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15]
3241; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3242; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm1, %xmm1
3243; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
3244; AVX1-NEXT:    retq
3245;
3246; AVX2-LABEL: ult_15_v16i16:
3247; AVX2:       # %bb.0:
3248; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3249; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
3250; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3251; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
3252; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3253; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3254; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
3255; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
3256; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
3257; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
3258; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
3259; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3260; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
3261; AVX2-NEXT:    retq
3262;
3263; AVX512VPOPCNTDQ-LABEL: ult_15_v16i16:
3264; AVX512VPOPCNTDQ:       # %bb.0:
3265; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
3266; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3267; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3268; AVX512VPOPCNTDQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3269; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
3270; AVX512VPOPCNTDQ-NEXT:    retq
3271;
3272; AVX512VPOPCNTDQVL-LABEL: ult_15_v16i16:
3273; AVX512VPOPCNTDQVL:       # %bb.0:
3274; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
3275; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
3276; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %zmm0, %ymm0
3277; AVX512VPOPCNTDQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3278; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
3279; AVX512VPOPCNTDQVL-NEXT:    retq
3280;
3281; BITALG_NOVLX-LABEL: ult_15_v16i16:
3282; BITALG_NOVLX:       # %bb.0:
3283; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3284; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3285; BITALG_NOVLX-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3286; BITALG_NOVLX-NEXT:    vpcmpgtw %ymm0, %ymm1, %ymm0
3287; BITALG_NOVLX-NEXT:    retq
3288;
3289; BITALG-LABEL: ult_15_v16i16:
3290; BITALG:       # %bb.0:
3291; BITALG-NEXT:    vpopcntw %ymm0, %ymm0
3292; BITALG-NEXT:    vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
3293; BITALG-NEXT:    vpmovm2w %k0, %ymm0
3294; BITALG-NEXT:    retq
3295  %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)
3296  %3 = icmp ult <16 x i16> %2, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
3297  %4 = sext <16 x i1> %3 to <16 x i16>
3298  ret <16 x i16> %4
3299}
3300
3301define <8 x i32> @ugt_1_v8i32(<8 x i32> %0) {
3302; AVX1-LABEL: ugt_1_v8i32:
3303; AVX1:       # %bb.0:
3304; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3305; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
3306; AVX1-NEXT:    vpaddd %xmm2, %xmm1, %xmm3
3307; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
3308; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
3309; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
3310; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
3311; AVX1-NEXT:    vpaddd %xmm2, %xmm0, %xmm4
3312; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
3313; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0
3314; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
3315; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3316; AVX1-NEXT:    retq
3317;
3318; AVX2-LABEL: ugt_1_v8i32:
3319; AVX2:       # %bb.0:
3320; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
3321; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm2
3322; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
3323; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3324; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm0, %ymm0
3325; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
3326; AVX2-NEXT:    retq
3327;
3328; AVX512VPOPCNTDQ-LABEL: ugt_1_v8i32:
3329; AVX512VPOPCNTDQ:       # %bb.0:
3330; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3331; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3332; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1]
3333; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
3334; AVX512VPOPCNTDQ-NEXT:    retq
3335;
3336; AVX512VPOPCNTDQVL-LABEL: ugt_1_v8i32:
3337; AVX512VPOPCNTDQVL:       # %bb.0:
3338; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3339; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3340; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3341; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3342; AVX512VPOPCNTDQVL-NEXT:    retq
3343;
3344; BITALG_NOVLX-LABEL: ugt_1_v8i32:
3345; BITALG_NOVLX:       # %bb.0:
3346; BITALG_NOVLX-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
3347; BITALG_NOVLX-NEXT:    vpaddd %ymm1, %ymm0, %ymm1
3348; BITALG_NOVLX-NEXT:    vpand %ymm1, %ymm0, %ymm0
3349; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3350; BITALG_NOVLX-NEXT:    vpcmpeqd %ymm1, %ymm0, %ymm0
3351; BITALG_NOVLX-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
3352; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
3353; BITALG_NOVLX-NEXT:    retq
3354;
3355; BITALG-LABEL: ugt_1_v8i32:
3356; BITALG:       # %bb.0:
3357; BITALG-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
3358; BITALG-NEXT:    vpaddd %ymm1, %ymm0, %ymm1
3359; BITALG-NEXT:    vpand %ymm1, %ymm0, %ymm0
3360; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3361; BITALG-NEXT:    vpcmpeqd %ymm1, %ymm0, %ymm0
3362; BITALG-NEXT:    vpternlogq $15, %ymm0, %ymm0, %ymm0
3363; BITALG-NEXT:    retq
3364  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
3365  %3 = icmp ugt <8 x i32> %2, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
3366  %4 = sext <8 x i1> %3 to <8 x i32>
3367  ret <8 x i32> %4
3368}
3369
3370define <8 x i32> @ult_2_v8i32(<8 x i32> %0) {
3371; AVX1-LABEL: ult_2_v8i32:
3372; AVX1:       # %bb.0:
3373; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3374; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
3375; AVX1-NEXT:    vpaddd %xmm2, %xmm1, %xmm3
3376; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
3377; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
3378; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
3379; AVX1-NEXT:    vpaddd %xmm2, %xmm0, %xmm2
3380; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
3381; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0
3382; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3383; AVX1-NEXT:    retq
3384;
3385; AVX2-LABEL: ult_2_v8i32:
3386; AVX2:       # %bb.0:
3387; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
3388; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm1
3389; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3390; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3391; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm0, %ymm0
3392; AVX2-NEXT:    retq
3393;
3394; AVX512VPOPCNTDQ-LABEL: ult_2_v8i32:
3395; AVX512VPOPCNTDQ:       # %bb.0:
3396; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3397; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3398; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]
3399; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
3400; AVX512VPOPCNTDQ-NEXT:    retq
3401;
3402; AVX512VPOPCNTDQVL-LABEL: ult_2_v8i32:
3403; AVX512VPOPCNTDQVL:       # %bb.0:
3404; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3405; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3406; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3407; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3408; AVX512VPOPCNTDQVL-NEXT:    retq
3409;
3410; BITALG_NOVLX-LABEL: ult_2_v8i32:
3411; BITALG_NOVLX:       # %bb.0:
3412; BITALG_NOVLX-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
3413; BITALG_NOVLX-NEXT:    vpaddd %ymm1, %ymm0, %ymm1
3414; BITALG_NOVLX-NEXT:    vpand %ymm1, %ymm0, %ymm0
3415; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3416; BITALG_NOVLX-NEXT:    vpcmpeqd %ymm1, %ymm0, %ymm0
3417; BITALG_NOVLX-NEXT:    retq
3418;
3419; BITALG-LABEL: ult_2_v8i32:
3420; BITALG:       # %bb.0:
3421; BITALG-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
3422; BITALG-NEXT:    vpaddd %ymm1, %ymm0, %ymm1
3423; BITALG-NEXT:    vpand %ymm1, %ymm0, %ymm0
3424; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3425; BITALG-NEXT:    vpcmpeqd %ymm1, %ymm0, %ymm0
3426; BITALG-NEXT:    retq
3427  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
3428  %3 = icmp ult <8 x i32> %2, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
3429  %4 = sext <8 x i1> %3 to <8 x i32>
3430  ret <8 x i32> %4
3431}
3432
3433define <8 x i32> @ugt_2_v8i32(<8 x i32> %0) {
3434; AVX1-LABEL: ugt_2_v8i32:
3435; AVX1:       # %bb.0:
3436; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3437; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3438; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3439; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3440; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
3441; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
3442; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3443; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3444; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3445; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
3446; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
3447; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
3448; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
3449; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
3450; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3451; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
3452; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
3453; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3454; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3455; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3456; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
3457; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
3458; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
3459; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
3460; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
3461; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3462; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [2,2,2,2]
3463; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
3464; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
3465; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
3466; AVX1-NEXT:    retq
3467;
3468; AVX2-LABEL: ugt_2_v8i32:
3469; AVX2:       # %bb.0:
3470; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3471; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
3472; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3473; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
3474; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3475; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3476; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
3477; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
3478; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3479; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3480; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3481; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3482; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3483; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3484; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]
3485; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
3486; AVX2-NEXT:    retq
3487;
3488; AVX512VPOPCNTDQ-LABEL: ugt_2_v8i32:
3489; AVX512VPOPCNTDQ:       # %bb.0:
3490; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3491; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3492; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]
3493; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
3494; AVX512VPOPCNTDQ-NEXT:    retq
3495;
3496; AVX512VPOPCNTDQVL-LABEL: ugt_2_v8i32:
3497; AVX512VPOPCNTDQVL:       # %bb.0:
3498; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3499; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3500; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3501; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3502; AVX512VPOPCNTDQVL-NEXT:    retq
3503;
3504; BITALG_NOVLX-LABEL: ugt_2_v8i32:
3505; BITALG_NOVLX:       # %bb.0:
3506; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3507; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
3508; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3509; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3510; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3511; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3512; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3513; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3514; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]
3515; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
3516; BITALG_NOVLX-NEXT:    retq
3517;
3518; BITALG-LABEL: ugt_2_v8i32:
3519; BITALG:       # %bb.0:
3520; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
3521; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3522; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3523; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3524; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3525; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3526; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3527; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3528; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3529; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3530; BITALG-NEXT:    retq
3531  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
3532  %3 = icmp ugt <8 x i32> %2, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
3533  %4 = sext <8 x i1> %3 to <8 x i32>
3534  ret <8 x i32> %4
3535}
3536
3537define <8 x i32> @ult_3_v8i32(<8 x i32> %0) {
3538; AVX1-LABEL: ult_3_v8i32:
3539; AVX1:       # %bb.0:
3540; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3541; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3542; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3543; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3544; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
3545; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
3546; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3547; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3548; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3549; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
3550; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
3551; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
3552; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
3553; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
3554; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3555; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
3556; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
3557; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3558; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3559; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3560; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
3561; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
3562; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
3563; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
3564; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
3565; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3566; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [3,3,3,3]
3567; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
3568; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
3569; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
3570; AVX1-NEXT:    retq
3571;
3572; AVX2-LABEL: ult_3_v8i32:
3573; AVX2:       # %bb.0:
3574; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3575; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
3576; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3577; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
3578; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3579; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3580; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
3581; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
3582; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3583; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3584; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3585; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3586; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3587; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3588; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]
3589; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
3590; AVX2-NEXT:    retq
3591;
3592; AVX512VPOPCNTDQ-LABEL: ult_3_v8i32:
3593; AVX512VPOPCNTDQ:       # %bb.0:
3594; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3595; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3596; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]
3597; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
3598; AVX512VPOPCNTDQ-NEXT:    retq
3599;
3600; AVX512VPOPCNTDQVL-LABEL: ult_3_v8i32:
3601; AVX512VPOPCNTDQVL:       # %bb.0:
3602; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3603; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3604; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3605; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3606; AVX512VPOPCNTDQVL-NEXT:    retq
3607;
3608; BITALG_NOVLX-LABEL: ult_3_v8i32:
3609; BITALG_NOVLX:       # %bb.0:
3610; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3611; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
3612; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3613; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3614; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3615; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3616; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3617; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3618; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]
3619; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
3620; BITALG_NOVLX-NEXT:    retq
3621;
3622; BITALG-LABEL: ult_3_v8i32:
3623; BITALG:       # %bb.0:
3624; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
3625; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3626; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3627; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3628; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3629; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3630; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3631; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3632; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3633; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3634; BITALG-NEXT:    retq
3635  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
3636  %3 = icmp ult <8 x i32> %2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
3637  %4 = sext <8 x i1> %3 to <8 x i32>
3638  ret <8 x i32> %4
3639}
3640
3641define <8 x i32> @ugt_3_v8i32(<8 x i32> %0) {
3642; AVX1-LABEL: ugt_3_v8i32:
3643; AVX1:       # %bb.0:
3644; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3645; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3646; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3647; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3648; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
3649; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
3650; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3651; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3652; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3653; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
3654; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
3655; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
3656; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
3657; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
3658; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3659; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
3660; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
3661; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3662; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3663; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3664; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
3665; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
3666; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
3667; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
3668; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
3669; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3670; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [3,3,3,3]
3671; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
3672; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
3673; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
3674; AVX1-NEXT:    retq
3675;
3676; AVX2-LABEL: ugt_3_v8i32:
3677; AVX2:       # %bb.0:
3678; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3679; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
3680; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3681; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
3682; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3683; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3684; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
3685; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
3686; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3687; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3688; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3689; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3690; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3691; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3692; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]
3693; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
3694; AVX2-NEXT:    retq
3695;
3696; AVX512VPOPCNTDQ-LABEL: ugt_3_v8i32:
3697; AVX512VPOPCNTDQ:       # %bb.0:
3698; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3699; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3700; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]
3701; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
3702; AVX512VPOPCNTDQ-NEXT:    retq
3703;
3704; AVX512VPOPCNTDQVL-LABEL: ugt_3_v8i32:
3705; AVX512VPOPCNTDQVL:       # %bb.0:
3706; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3707; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3708; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3709; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3710; AVX512VPOPCNTDQVL-NEXT:    retq
3711;
3712; BITALG_NOVLX-LABEL: ugt_3_v8i32:
3713; BITALG_NOVLX:       # %bb.0:
3714; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3715; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
3716; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3717; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3718; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3719; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3720; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3721; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3722; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]
3723; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
3724; BITALG_NOVLX-NEXT:    retq
3725;
3726; BITALG-LABEL: ugt_3_v8i32:
3727; BITALG:       # %bb.0:
3728; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
3729; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3730; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3731; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3732; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3733; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3734; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3735; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3736; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3737; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3738; BITALG-NEXT:    retq
3739  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
3740  %3 = icmp ugt <8 x i32> %2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
3741  %4 = sext <8 x i1> %3 to <8 x i32>
3742  ret <8 x i32> %4
3743}
3744
3745define <8 x i32> @ult_4_v8i32(<8 x i32> %0) {
3746; AVX1-LABEL: ult_4_v8i32:
3747; AVX1:       # %bb.0:
3748; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3749; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3750; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3751; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3752; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
3753; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
3754; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3755; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3756; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3757; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
3758; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
3759; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
3760; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
3761; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
3762; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3763; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
3764; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
3765; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3766; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3767; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3768; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
3769; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
3770; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
3771; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
3772; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
3773; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3774; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [4,4,4,4]
3775; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
3776; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
3777; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
3778; AVX1-NEXT:    retq
3779;
3780; AVX2-LABEL: ult_4_v8i32:
3781; AVX2:       # %bb.0:
3782; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3783; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
3784; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3785; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
3786; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3787; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3788; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
3789; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
3790; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3791; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3792; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3793; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3794; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3795; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3796; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]
3797; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
3798; AVX2-NEXT:    retq
3799;
3800; AVX512VPOPCNTDQ-LABEL: ult_4_v8i32:
3801; AVX512VPOPCNTDQ:       # %bb.0:
3802; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3803; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3804; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]
3805; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
3806; AVX512VPOPCNTDQ-NEXT:    retq
3807;
3808; AVX512VPOPCNTDQVL-LABEL: ult_4_v8i32:
3809; AVX512VPOPCNTDQVL:       # %bb.0:
3810; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3811; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3812; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3813; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3814; AVX512VPOPCNTDQVL-NEXT:    retq
3815;
3816; BITALG_NOVLX-LABEL: ult_4_v8i32:
3817; BITALG_NOVLX:       # %bb.0:
3818; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3819; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
3820; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3821; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3822; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3823; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3824; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3825; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3826; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]
3827; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
3828; BITALG_NOVLX-NEXT:    retq
3829;
3830; BITALG-LABEL: ult_4_v8i32:
3831; BITALG:       # %bb.0:
3832; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
3833; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3834; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3835; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3836; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3837; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3838; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3839; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3840; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3841; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3842; BITALG-NEXT:    retq
3843  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
3844  %3 = icmp ult <8 x i32> %2, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
3845  %4 = sext <8 x i1> %3 to <8 x i32>
3846  ret <8 x i32> %4
3847}
3848
3849define <8 x i32> @ugt_4_v8i32(<8 x i32> %0) {
3850; AVX1-LABEL: ugt_4_v8i32:
3851; AVX1:       # %bb.0:
3852; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3853; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3854; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3855; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3856; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
3857; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
3858; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3859; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3860; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3861; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
3862; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
3863; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
3864; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
3865; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
3866; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3867; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
3868; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
3869; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3870; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3871; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3872; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
3873; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
3874; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
3875; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
3876; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
3877; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3878; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [4,4,4,4]
3879; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
3880; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
3881; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
3882; AVX1-NEXT:    retq
3883;
3884; AVX2-LABEL: ugt_4_v8i32:
3885; AVX2:       # %bb.0:
3886; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3887; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
3888; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3889; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
3890; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3891; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3892; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
3893; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
3894; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3895; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3896; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3897; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3898; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3899; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3900; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]
3901; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
3902; AVX2-NEXT:    retq
3903;
3904; AVX512VPOPCNTDQ-LABEL: ugt_4_v8i32:
3905; AVX512VPOPCNTDQ:       # %bb.0:
3906; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3907; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3908; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]
3909; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
3910; AVX512VPOPCNTDQ-NEXT:    retq
3911;
3912; AVX512VPOPCNTDQVL-LABEL: ugt_4_v8i32:
3913; AVX512VPOPCNTDQVL:       # %bb.0:
3914; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3915; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3916; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3917; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3918; AVX512VPOPCNTDQVL-NEXT:    retq
3919;
3920; BITALG_NOVLX-LABEL: ugt_4_v8i32:
3921; BITALG_NOVLX:       # %bb.0:
3922; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3923; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
3924; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3925; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3926; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3927; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3928; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3929; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3930; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]
3931; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
3932; BITALG_NOVLX-NEXT:    retq
3933;
3934; BITALG-LABEL: ugt_4_v8i32:
3935; BITALG:       # %bb.0:
3936; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
3937; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3938; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
3939; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
3940; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
3941; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
3942; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
3943; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
3944; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
3945; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
3946; BITALG-NEXT:    retq
3947  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
3948  %3 = icmp ugt <8 x i32> %2, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
3949  %4 = sext <8 x i1> %3 to <8 x i32>
3950  ret <8 x i32> %4
3951}
3952
3953define <8 x i32> @ult_5_v8i32(<8 x i32> %0) {
3954; AVX1-LABEL: ult_5_v8i32:
3955; AVX1:       # %bb.0:
3956; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3957; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3958; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3959; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3960; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
3961; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
3962; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
3963; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
3964; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3965; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
3966; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
3967; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
3968; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
3969; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
3970; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3971; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
3972; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
3973; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3974; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3975; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3976; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
3977; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
3978; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
3979; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
3980; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
3981; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3982; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [5,5,5,5]
3983; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
3984; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
3985; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
3986; AVX1-NEXT:    retq
3987;
3988; AVX2-LABEL: ult_5_v8i32:
3989; AVX2:       # %bb.0:
3990; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3991; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
3992; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3993; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
3994; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3995; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3996; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
3997; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
3998; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3999; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4000; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4001; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4002; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4003; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4004; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]
4005; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4006; AVX2-NEXT:    retq
4007;
4008; AVX512VPOPCNTDQ-LABEL: ult_5_v8i32:
4009; AVX512VPOPCNTDQ:       # %bb.0:
4010; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4011; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4012; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]
4013; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4014; AVX512VPOPCNTDQ-NEXT:    retq
4015;
4016; AVX512VPOPCNTDQVL-LABEL: ult_5_v8i32:
4017; AVX512VPOPCNTDQVL:       # %bb.0:
4018; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4019; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4020; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4021; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4022; AVX512VPOPCNTDQVL-NEXT:    retq
4023;
4024; BITALG_NOVLX-LABEL: ult_5_v8i32:
4025; BITALG_NOVLX:       # %bb.0:
4026; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4027; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
4028; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4029; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4030; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4031; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4032; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4033; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4034; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]
4035; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4036; BITALG_NOVLX-NEXT:    retq
4037;
4038; BITALG-LABEL: ult_5_v8i32:
4039; BITALG:       # %bb.0:
4040; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
4041; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4042; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4043; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4044; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4045; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4046; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4047; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4048; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4049; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4050; BITALG-NEXT:    retq
4051  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
4052  %3 = icmp ult <8 x i32> %2, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
4053  %4 = sext <8 x i1> %3 to <8 x i32>
4054  ret <8 x i32> %4
4055}
4056
4057define <8 x i32> @ugt_5_v8i32(<8 x i32> %0) {
4058; AVX1-LABEL: ugt_5_v8i32:
4059; AVX1:       # %bb.0:
4060; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4061; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4062; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4063; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4064; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
4065; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
4066; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
4067; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
4068; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
4069; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
4070; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
4071; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
4072; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
4073; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
4074; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
4075; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
4076; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
4077; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4078; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4079; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4080; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
4081; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
4082; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
4083; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
4084; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
4085; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4086; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [5,5,5,5]
4087; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
4088; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
4089; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
4090; AVX1-NEXT:    retq
4091;
4092; AVX2-LABEL: ugt_5_v8i32:
4093; AVX2:       # %bb.0:
4094; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4095; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
4096; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4097; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
4098; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
4099; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
4100; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
4101; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
4102; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4103; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4104; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4105; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4106; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4107; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4108; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]
4109; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4110; AVX2-NEXT:    retq
4111;
4112; AVX512VPOPCNTDQ-LABEL: ugt_5_v8i32:
4113; AVX512VPOPCNTDQ:       # %bb.0:
4114; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4115; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4116; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]
4117; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4118; AVX512VPOPCNTDQ-NEXT:    retq
4119;
4120; AVX512VPOPCNTDQVL-LABEL: ugt_5_v8i32:
4121; AVX512VPOPCNTDQVL:       # %bb.0:
4122; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4123; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4124; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4125; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4126; AVX512VPOPCNTDQVL-NEXT:    retq
4127;
4128; BITALG_NOVLX-LABEL: ugt_5_v8i32:
4129; BITALG_NOVLX:       # %bb.0:
4130; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4131; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
4132; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4133; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4134; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4135; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4136; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4137; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4138; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]
4139; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4140; BITALG_NOVLX-NEXT:    retq
4141;
4142; BITALG-LABEL: ugt_5_v8i32:
4143; BITALG:       # %bb.0:
4144; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
4145; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4146; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4147; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4148; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4149; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4150; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4151; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4152; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4153; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4154; BITALG-NEXT:    retq
4155  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
4156  %3 = icmp ugt <8 x i32> %2, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
4157  %4 = sext <8 x i1> %3 to <8 x i32>
4158  ret <8 x i32> %4
4159}
4160
4161define <8 x i32> @ult_6_v8i32(<8 x i32> %0) {
4162; AVX1-LABEL: ult_6_v8i32:
4163; AVX1:       # %bb.0:
4164; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4165; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4166; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4167; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4168; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
4169; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
4170; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
4171; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
4172; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
4173; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
4174; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
4175; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
4176; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
4177; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
4178; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
4179; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
4180; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
4181; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4182; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4183; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4184; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
4185; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
4186; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
4187; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
4188; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
4189; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4190; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [6,6,6,6]
4191; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
4192; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
4193; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
4194; AVX1-NEXT:    retq
4195;
4196; AVX2-LABEL: ult_6_v8i32:
4197; AVX2:       # %bb.0:
4198; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4199; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
4200; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4201; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
4202; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
4203; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
4204; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
4205; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
4206; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4207; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4208; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4209; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4210; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4211; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4212; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]
4213; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4214; AVX2-NEXT:    retq
4215;
4216; AVX512VPOPCNTDQ-LABEL: ult_6_v8i32:
4217; AVX512VPOPCNTDQ:       # %bb.0:
4218; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4219; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4220; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]
4221; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4222; AVX512VPOPCNTDQ-NEXT:    retq
4223;
4224; AVX512VPOPCNTDQVL-LABEL: ult_6_v8i32:
4225; AVX512VPOPCNTDQVL:       # %bb.0:
4226; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4227; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4228; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4229; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4230; AVX512VPOPCNTDQVL-NEXT:    retq
4231;
4232; BITALG_NOVLX-LABEL: ult_6_v8i32:
4233; BITALG_NOVLX:       # %bb.0:
4234; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4235; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
4236; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4237; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4238; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4239; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4240; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4241; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4242; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]
4243; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4244; BITALG_NOVLX-NEXT:    retq
4245;
4246; BITALG-LABEL: ult_6_v8i32:
4247; BITALG:       # %bb.0:
4248; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
4249; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4250; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4251; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4252; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4253; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4254; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4255; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4256; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4257; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4258; BITALG-NEXT:    retq
4259  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
4260  %3 = icmp ult <8 x i32> %2, <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6>
4261  %4 = sext <8 x i1> %3 to <8 x i32>
4262  ret <8 x i32> %4
4263}
4264
4265define <8 x i32> @ugt_6_v8i32(<8 x i32> %0) {
4266; AVX1-LABEL: ugt_6_v8i32:
4267; AVX1:       # %bb.0:
4268; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4269; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4270; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4271; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4272; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
4273; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
4274; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
4275; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
4276; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
4277; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
4278; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
4279; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
4280; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
4281; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
4282; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
4283; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
4284; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
4285; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4286; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4287; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4288; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
4289; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
4290; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
4291; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
4292; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
4293; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4294; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [6,6,6,6]
4295; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
4296; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
4297; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
4298; AVX1-NEXT:    retq
4299;
4300; AVX2-LABEL: ugt_6_v8i32:
4301; AVX2:       # %bb.0:
4302; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4303; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
4304; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4305; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
4306; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
4307; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
4308; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
4309; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
4310; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4311; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4312; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4313; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4314; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4315; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4316; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]
4317; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4318; AVX2-NEXT:    retq
4319;
4320; AVX512VPOPCNTDQ-LABEL: ugt_6_v8i32:
4321; AVX512VPOPCNTDQ:       # %bb.0:
4322; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4323; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4324; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]
4325; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4326; AVX512VPOPCNTDQ-NEXT:    retq
4327;
4328; AVX512VPOPCNTDQVL-LABEL: ugt_6_v8i32:
4329; AVX512VPOPCNTDQVL:       # %bb.0:
4330; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4331; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4332; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4333; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4334; AVX512VPOPCNTDQVL-NEXT:    retq
4335;
4336; BITALG_NOVLX-LABEL: ugt_6_v8i32:
4337; BITALG_NOVLX:       # %bb.0:
4338; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4339; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
4340; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4341; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4342; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4343; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4344; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4345; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4346; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]
4347; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4348; BITALG_NOVLX-NEXT:    retq
4349;
4350; BITALG-LABEL: ugt_6_v8i32:
4351; BITALG:       # %bb.0:
4352; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
4353; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4354; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4355; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4356; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4357; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4358; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4359; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4360; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4361; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4362; BITALG-NEXT:    retq
4363  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
4364  %3 = icmp ugt <8 x i32> %2, <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6>
4365  %4 = sext <8 x i1> %3 to <8 x i32>
4366  ret <8 x i32> %4
4367}
4368
4369define <8 x i32> @ult_7_v8i32(<8 x i32> %0) {
4370; AVX1-LABEL: ult_7_v8i32:
4371; AVX1:       # %bb.0:
4372; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4373; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4374; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4375; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4376; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
4377; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
4378; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
4379; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
4380; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
4381; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
4382; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
4383; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
4384; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
4385; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
4386; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
4387; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
4388; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
4389; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4390; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4391; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4392; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
4393; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
4394; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
4395; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
4396; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
4397; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4398; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [7,7,7,7]
4399; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
4400; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
4401; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
4402; AVX1-NEXT:    retq
4403;
4404; AVX2-LABEL: ult_7_v8i32:
4405; AVX2:       # %bb.0:
4406; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4407; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
4408; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4409; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
4410; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
4411; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
4412; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
4413; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
4414; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4415; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4416; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4417; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4418; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4419; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4420; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]
4421; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4422; AVX2-NEXT:    retq
4423;
4424; AVX512VPOPCNTDQ-LABEL: ult_7_v8i32:
4425; AVX512VPOPCNTDQ:       # %bb.0:
4426; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4427; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4428; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]
4429; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4430; AVX512VPOPCNTDQ-NEXT:    retq
4431;
4432; AVX512VPOPCNTDQVL-LABEL: ult_7_v8i32:
4433; AVX512VPOPCNTDQVL:       # %bb.0:
4434; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4435; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4436; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4437; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4438; AVX512VPOPCNTDQVL-NEXT:    retq
4439;
4440; BITALG_NOVLX-LABEL: ult_7_v8i32:
4441; BITALG_NOVLX:       # %bb.0:
4442; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4443; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
4444; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4445; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4446; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4447; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4448; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4449; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4450; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]
4451; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4452; BITALG_NOVLX-NEXT:    retq
4453;
4454; BITALG-LABEL: ult_7_v8i32:
4455; BITALG:       # %bb.0:
4456; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
4457; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4458; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4459; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4460; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4461; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4462; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4463; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4464; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4465; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4466; BITALG-NEXT:    retq
4467  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
4468  %3 = icmp ult <8 x i32> %2, <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>
4469  %4 = sext <8 x i1> %3 to <8 x i32>
4470  ret <8 x i32> %4
4471}
4472
4473define <8 x i32> @ugt_7_v8i32(<8 x i32> %0) {
4474; AVX1-LABEL: ugt_7_v8i32:
4475; AVX1:       # %bb.0:
4476; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4477; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4478; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4479; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4480; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
4481; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
4482; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
4483; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
4484; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
4485; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
4486; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
4487; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
4488; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
4489; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
4490; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
4491; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
4492; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
4493; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4494; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4495; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4496; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
4497; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
4498; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
4499; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
4500; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
4501; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4502; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [7,7,7,7]
4503; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
4504; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
4505; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
4506; AVX1-NEXT:    retq
4507;
4508; AVX2-LABEL: ugt_7_v8i32:
4509; AVX2:       # %bb.0:
4510; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4511; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
4512; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4513; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
4514; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
4515; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
4516; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
4517; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
4518; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4519; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4520; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4521; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4522; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4523; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4524; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]
4525; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4526; AVX2-NEXT:    retq
4527;
4528; AVX512VPOPCNTDQ-LABEL: ugt_7_v8i32:
4529; AVX512VPOPCNTDQ:       # %bb.0:
4530; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4531; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4532; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]
4533; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4534; AVX512VPOPCNTDQ-NEXT:    retq
4535;
4536; AVX512VPOPCNTDQVL-LABEL: ugt_7_v8i32:
4537; AVX512VPOPCNTDQVL:       # %bb.0:
4538; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4539; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4540; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4541; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4542; AVX512VPOPCNTDQVL-NEXT:    retq
4543;
4544; BITALG_NOVLX-LABEL: ugt_7_v8i32:
4545; BITALG_NOVLX:       # %bb.0:
4546; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4547; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
4548; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4549; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4550; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4551; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4552; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4553; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4554; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]
4555; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4556; BITALG_NOVLX-NEXT:    retq
4557;
4558; BITALG-LABEL: ugt_7_v8i32:
4559; BITALG:       # %bb.0:
4560; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
4561; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4562; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4563; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4564; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4565; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4566; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4567; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4568; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4569; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4570; BITALG-NEXT:    retq
4571  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
4572  %3 = icmp ugt <8 x i32> %2, <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>
4573  %4 = sext <8 x i1> %3 to <8 x i32>
4574  ret <8 x i32> %4
4575}
4576
4577define <8 x i32> @ult_8_v8i32(<8 x i32> %0) {
4578; AVX1-LABEL: ult_8_v8i32:
4579; AVX1:       # %bb.0:
4580; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4581; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4582; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4583; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4584; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
4585; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
4586; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
4587; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
4588; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
4589; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
4590; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
4591; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
4592; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
4593; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
4594; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
4595; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
4596; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
4597; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4598; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4599; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4600; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
4601; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
4602; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
4603; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
4604; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
4605; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4606; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [8,8,8,8]
4607; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
4608; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
4609; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
4610; AVX1-NEXT:    retq
4611;
4612; AVX2-LABEL: ult_8_v8i32:
4613; AVX2:       # %bb.0:
4614; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4615; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
4616; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4617; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
4618; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
4619; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
4620; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
4621; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
4622; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4623; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4624; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4625; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4626; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4627; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4628; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]
4629; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4630; AVX2-NEXT:    retq
4631;
4632; AVX512VPOPCNTDQ-LABEL: ult_8_v8i32:
4633; AVX512VPOPCNTDQ:       # %bb.0:
4634; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4635; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4636; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]
4637; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4638; AVX512VPOPCNTDQ-NEXT:    retq
4639;
4640; AVX512VPOPCNTDQVL-LABEL: ult_8_v8i32:
4641; AVX512VPOPCNTDQVL:       # %bb.0:
4642; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4643; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4644; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4645; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4646; AVX512VPOPCNTDQVL-NEXT:    retq
4647;
4648; BITALG_NOVLX-LABEL: ult_8_v8i32:
4649; BITALG_NOVLX:       # %bb.0:
4650; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4651; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
4652; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4653; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4654; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4655; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4656; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4657; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4658; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]
4659; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4660; BITALG_NOVLX-NEXT:    retq
4661;
4662; BITALG-LABEL: ult_8_v8i32:
4663; BITALG:       # %bb.0:
4664; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
4665; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4666; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4667; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4668; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4669; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4670; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4671; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4672; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4673; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4674; BITALG-NEXT:    retq
4675  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
4676  %3 = icmp ult <8 x i32> %2, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
4677  %4 = sext <8 x i1> %3 to <8 x i32>
4678  ret <8 x i32> %4
4679}
4680
4681define <8 x i32> @ugt_8_v8i32(<8 x i32> %0) {
4682; AVX1-LABEL: ugt_8_v8i32:
4683; AVX1:       # %bb.0:
4684; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4685; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4686; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4687; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4688; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
4689; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
4690; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
4691; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
4692; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
4693; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
4694; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
4695; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
4696; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
4697; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
4698; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
4699; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
4700; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
4701; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4702; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4703; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4704; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
4705; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
4706; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
4707; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
4708; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
4709; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4710; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [8,8,8,8]
4711; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
4712; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
4713; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
4714; AVX1-NEXT:    retq
4715;
4716; AVX2-LABEL: ugt_8_v8i32:
4717; AVX2:       # %bb.0:
4718; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4719; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
4720; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4721; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
4722; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
4723; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
4724; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
4725; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
4726; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4727; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4728; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4729; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4730; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4731; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4732; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]
4733; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4734; AVX2-NEXT:    retq
4735;
4736; AVX512VPOPCNTDQ-LABEL: ugt_8_v8i32:
4737; AVX512VPOPCNTDQ:       # %bb.0:
4738; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4739; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4740; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]
4741; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4742; AVX512VPOPCNTDQ-NEXT:    retq
4743;
4744; AVX512VPOPCNTDQVL-LABEL: ugt_8_v8i32:
4745; AVX512VPOPCNTDQVL:       # %bb.0:
4746; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4747; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4748; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4749; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4750; AVX512VPOPCNTDQVL-NEXT:    retq
4751;
4752; BITALG_NOVLX-LABEL: ugt_8_v8i32:
4753; BITALG_NOVLX:       # %bb.0:
4754; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4755; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
4756; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4757; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4758; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4759; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4760; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4761; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4762; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]
4763; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4764; BITALG_NOVLX-NEXT:    retq
4765;
4766; BITALG-LABEL: ugt_8_v8i32:
4767; BITALG:       # %bb.0:
4768; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
4769; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4770; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4771; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4772; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4773; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4774; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4775; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4776; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4777; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4778; BITALG-NEXT:    retq
4779  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
4780  %3 = icmp ugt <8 x i32> %2, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
4781  %4 = sext <8 x i1> %3 to <8 x i32>
4782  ret <8 x i32> %4
4783}
4784
4785define <8 x i32> @ult_9_v8i32(<8 x i32> %0) {
4786; AVX1-LABEL: ult_9_v8i32:
4787; AVX1:       # %bb.0:
4788; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4789; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4790; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4791; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4792; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
4793; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
4794; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
4795; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
4796; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
4797; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
4798; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
4799; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
4800; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
4801; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
4802; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
4803; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
4804; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
4805; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4806; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4807; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4808; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
4809; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
4810; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
4811; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
4812; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
4813; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4814; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [9,9,9,9]
4815; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
4816; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
4817; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
4818; AVX1-NEXT:    retq
4819;
4820; AVX2-LABEL: ult_9_v8i32:
4821; AVX2:       # %bb.0:
4822; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4823; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
4824; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4825; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
4826; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
4827; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
4828; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
4829; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
4830; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4831; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4832; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4833; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4834; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4835; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4836; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]
4837; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4838; AVX2-NEXT:    retq
4839;
4840; AVX512VPOPCNTDQ-LABEL: ult_9_v8i32:
4841; AVX512VPOPCNTDQ:       # %bb.0:
4842; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4843; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4844; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]
4845; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4846; AVX512VPOPCNTDQ-NEXT:    retq
4847;
4848; AVX512VPOPCNTDQVL-LABEL: ult_9_v8i32:
4849; AVX512VPOPCNTDQVL:       # %bb.0:
4850; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4851; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4852; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4853; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4854; AVX512VPOPCNTDQVL-NEXT:    retq
4855;
4856; BITALG_NOVLX-LABEL: ult_9_v8i32:
4857; BITALG_NOVLX:       # %bb.0:
4858; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4859; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
4860; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4861; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4862; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4863; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4864; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4865; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4866; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]
4867; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
4868; BITALG_NOVLX-NEXT:    retq
4869;
4870; BITALG-LABEL: ult_9_v8i32:
4871; BITALG:       # %bb.0:
4872; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
4873; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4874; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4875; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4876; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4877; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4878; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4879; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4880; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4881; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4882; BITALG-NEXT:    retq
4883  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
4884  %3 = icmp ult <8 x i32> %2, <i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9>
4885  %4 = sext <8 x i1> %3 to <8 x i32>
4886  ret <8 x i32> %4
4887}
4888
4889define <8 x i32> @ugt_9_v8i32(<8 x i32> %0) {
4890; AVX1-LABEL: ugt_9_v8i32:
4891; AVX1:       # %bb.0:
4892; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4893; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4894; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4895; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4896; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
4897; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
4898; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
4899; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
4900; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
4901; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
4902; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
4903; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
4904; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
4905; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
4906; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
4907; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
4908; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
4909; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4910; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4911; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4912; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
4913; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
4914; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
4915; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
4916; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
4917; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4918; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [9,9,9,9]
4919; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
4920; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
4921; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
4922; AVX1-NEXT:    retq
4923;
4924; AVX2-LABEL: ugt_9_v8i32:
4925; AVX2:       # %bb.0:
4926; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4927; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
4928; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4929; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
4930; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
4931; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
4932; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
4933; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
4934; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4935; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4936; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4937; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4938; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4939; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4940; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]
4941; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4942; AVX2-NEXT:    retq
4943;
4944; AVX512VPOPCNTDQ-LABEL: ugt_9_v8i32:
4945; AVX512VPOPCNTDQ:       # %bb.0:
4946; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4947; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4948; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]
4949; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4950; AVX512VPOPCNTDQ-NEXT:    retq
4951;
4952; AVX512VPOPCNTDQVL-LABEL: ugt_9_v8i32:
4953; AVX512VPOPCNTDQVL:       # %bb.0:
4954; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4955; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4956; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4957; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4958; AVX512VPOPCNTDQVL-NEXT:    retq
4959;
4960; BITALG_NOVLX-LABEL: ugt_9_v8i32:
4961; BITALG_NOVLX:       # %bb.0:
4962; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4963; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
4964; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4965; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4966; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4967; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4968; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4969; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4970; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]
4971; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
4972; BITALG_NOVLX-NEXT:    retq
4973;
4974; BITALG-LABEL: ugt_9_v8i32:
4975; BITALG:       # %bb.0:
4976; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
4977; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4978; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
4979; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
4980; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
4981; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
4982; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
4983; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
4984; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
4985; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
4986; BITALG-NEXT:    retq
4987  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
4988  %3 = icmp ugt <8 x i32> %2, <i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9>
4989  %4 = sext <8 x i1> %3 to <8 x i32>
4990  ret <8 x i32> %4
4991}
4992
4993define <8 x i32> @ult_10_v8i32(<8 x i32> %0) {
4994; AVX1-LABEL: ult_10_v8i32:
4995; AVX1:       # %bb.0:
4996; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4997; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4998; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4999; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5000; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
5001; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
5002; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
5003; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
5004; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
5005; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
5006; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
5007; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
5008; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
5009; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
5010; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5011; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
5012; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
5013; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5014; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5015; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5016; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
5017; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
5018; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
5019; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
5020; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
5021; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5022; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [10,10,10,10]
5023; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
5024; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
5025; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
5026; AVX1-NEXT:    retq
5027;
5028; AVX2-LABEL: ult_10_v8i32:
5029; AVX2:       # %bb.0:
5030; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5031; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
5032; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5033; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
5034; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
5035; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
5036; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
5037; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
5038; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5039; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5040; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5041; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5042; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5043; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5044; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]
5045; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5046; AVX2-NEXT:    retq
5047;
5048; AVX512VPOPCNTDQ-LABEL: ult_10_v8i32:
5049; AVX512VPOPCNTDQ:       # %bb.0:
5050; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5051; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5052; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]
5053; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5054; AVX512VPOPCNTDQ-NEXT:    retq
5055;
5056; AVX512VPOPCNTDQVL-LABEL: ult_10_v8i32:
5057; AVX512VPOPCNTDQVL:       # %bb.0:
5058; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5059; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5060; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5061; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5062; AVX512VPOPCNTDQVL-NEXT:    retq
5063;
5064; BITALG_NOVLX-LABEL: ult_10_v8i32:
5065; BITALG_NOVLX:       # %bb.0:
5066; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5067; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
5068; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5069; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5070; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5071; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5072; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5073; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5074; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]
5075; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5076; BITALG_NOVLX-NEXT:    retq
5077;
5078; BITALG-LABEL: ult_10_v8i32:
5079; BITALG:       # %bb.0:
5080; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
5081; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5082; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5083; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5084; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5085; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5086; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5087; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5088; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5089; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5090; BITALG-NEXT:    retq
5091  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
5092  %3 = icmp ult <8 x i32> %2, <i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10>
5093  %4 = sext <8 x i1> %3 to <8 x i32>
5094  ret <8 x i32> %4
5095}
5096
5097define <8 x i32> @ugt_10_v8i32(<8 x i32> %0) {
5098; AVX1-LABEL: ugt_10_v8i32:
5099; AVX1:       # %bb.0:
5100; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5101; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5102; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5103; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5104; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
5105; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
5106; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
5107; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
5108; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
5109; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
5110; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
5111; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
5112; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
5113; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
5114; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5115; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
5116; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
5117; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5118; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5119; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5120; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
5121; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
5122; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
5123; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
5124; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
5125; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5126; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [10,10,10,10]
5127; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
5128; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
5129; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
5130; AVX1-NEXT:    retq
5131;
5132; AVX2-LABEL: ugt_10_v8i32:
5133; AVX2:       # %bb.0:
5134; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5135; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
5136; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5137; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
5138; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
5139; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
5140; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
5141; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
5142; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5143; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5144; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5145; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5146; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5147; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5148; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]
5149; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5150; AVX2-NEXT:    retq
5151;
5152; AVX512VPOPCNTDQ-LABEL: ugt_10_v8i32:
5153; AVX512VPOPCNTDQ:       # %bb.0:
5154; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5155; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5156; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]
5157; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5158; AVX512VPOPCNTDQ-NEXT:    retq
5159;
5160; AVX512VPOPCNTDQVL-LABEL: ugt_10_v8i32:
5161; AVX512VPOPCNTDQVL:       # %bb.0:
5162; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5163; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5164; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5165; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5166; AVX512VPOPCNTDQVL-NEXT:    retq
5167;
5168; BITALG_NOVLX-LABEL: ugt_10_v8i32:
5169; BITALG_NOVLX:       # %bb.0:
5170; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5171; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
5172; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5173; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5174; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5175; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5176; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5177; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5178; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]
5179; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5180; BITALG_NOVLX-NEXT:    retq
5181;
5182; BITALG-LABEL: ugt_10_v8i32:
5183; BITALG:       # %bb.0:
5184; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
5185; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5186; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5187; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5188; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5189; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5190; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5191; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5192; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5193; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5194; BITALG-NEXT:    retq
5195  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
5196  %3 = icmp ugt <8 x i32> %2, <i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10>
5197  %4 = sext <8 x i1> %3 to <8 x i32>
5198  ret <8 x i32> %4
5199}
5200
5201define <8 x i32> @ult_11_v8i32(<8 x i32> %0) {
5202; AVX1-LABEL: ult_11_v8i32:
5203; AVX1:       # %bb.0:
5204; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5205; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5206; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5207; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5208; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
5209; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
5210; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
5211; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
5212; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
5213; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
5214; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
5215; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
5216; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
5217; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
5218; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5219; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
5220; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
5221; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5222; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5223; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5224; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
5225; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
5226; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
5227; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
5228; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
5229; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5230; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [11,11,11,11]
5231; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
5232; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
5233; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
5234; AVX1-NEXT:    retq
5235;
5236; AVX2-LABEL: ult_11_v8i32:
5237; AVX2:       # %bb.0:
5238; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5239; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
5240; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5241; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
5242; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
5243; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
5244; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
5245; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
5246; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5247; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5248; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5249; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5250; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5251; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5252; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]
5253; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5254; AVX2-NEXT:    retq
5255;
5256; AVX512VPOPCNTDQ-LABEL: ult_11_v8i32:
5257; AVX512VPOPCNTDQ:       # %bb.0:
5258; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5259; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5260; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]
5261; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5262; AVX512VPOPCNTDQ-NEXT:    retq
5263;
5264; AVX512VPOPCNTDQVL-LABEL: ult_11_v8i32:
5265; AVX512VPOPCNTDQVL:       # %bb.0:
5266; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5267; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5268; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5269; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5270; AVX512VPOPCNTDQVL-NEXT:    retq
5271;
5272; BITALG_NOVLX-LABEL: ult_11_v8i32:
5273; BITALG_NOVLX:       # %bb.0:
5274; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5275; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
5276; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5277; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5278; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5279; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5280; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5281; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5282; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]
5283; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5284; BITALG_NOVLX-NEXT:    retq
5285;
5286; BITALG-LABEL: ult_11_v8i32:
5287; BITALG:       # %bb.0:
5288; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
5289; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5290; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5291; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5292; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5293; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5294; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5295; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5296; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5297; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5298; BITALG-NEXT:    retq
5299  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
5300  %3 = icmp ult <8 x i32> %2, <i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11>
5301  %4 = sext <8 x i1> %3 to <8 x i32>
5302  ret <8 x i32> %4
5303}
5304
5305define <8 x i32> @ugt_11_v8i32(<8 x i32> %0) {
5306; AVX1-LABEL: ugt_11_v8i32:
5307; AVX1:       # %bb.0:
5308; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5309; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5310; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5311; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5312; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
5313; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
5314; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
5315; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
5316; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
5317; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
5318; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
5319; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
5320; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
5321; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
5322; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5323; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
5324; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
5325; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5326; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5327; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5328; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
5329; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
5330; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
5331; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
5332; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
5333; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5334; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [11,11,11,11]
5335; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
5336; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
5337; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
5338; AVX1-NEXT:    retq
5339;
5340; AVX2-LABEL: ugt_11_v8i32:
5341; AVX2:       # %bb.0:
5342; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5343; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
5344; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5345; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
5346; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
5347; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
5348; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
5349; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
5350; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5351; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5352; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5353; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5354; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5355; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5356; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]
5357; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5358; AVX2-NEXT:    retq
5359;
5360; AVX512VPOPCNTDQ-LABEL: ugt_11_v8i32:
5361; AVX512VPOPCNTDQ:       # %bb.0:
5362; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5363; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5364; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]
5365; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5366; AVX512VPOPCNTDQ-NEXT:    retq
5367;
5368; AVX512VPOPCNTDQVL-LABEL: ugt_11_v8i32:
5369; AVX512VPOPCNTDQVL:       # %bb.0:
5370; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5371; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5372; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5373; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5374; AVX512VPOPCNTDQVL-NEXT:    retq
5375;
5376; BITALG_NOVLX-LABEL: ugt_11_v8i32:
5377; BITALG_NOVLX:       # %bb.0:
5378; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5379; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
5380; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5381; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5382; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5383; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5384; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5385; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5386; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]
5387; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5388; BITALG_NOVLX-NEXT:    retq
5389;
5390; BITALG-LABEL: ugt_11_v8i32:
5391; BITALG:       # %bb.0:
5392; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
5393; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5394; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5395; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5396; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5397; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5398; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5399; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5400; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5401; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5402; BITALG-NEXT:    retq
5403  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
5404  %3 = icmp ugt <8 x i32> %2, <i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11>
5405  %4 = sext <8 x i1> %3 to <8 x i32>
5406  ret <8 x i32> %4
5407}
5408
5409define <8 x i32> @ult_12_v8i32(<8 x i32> %0) {
5410; AVX1-LABEL: ult_12_v8i32:
5411; AVX1:       # %bb.0:
5412; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5413; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5414; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5415; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5416; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
5417; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
5418; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
5419; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
5420; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
5421; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
5422; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
5423; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
5424; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
5425; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
5426; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5427; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
5428; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
5429; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5430; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5431; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5432; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
5433; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
5434; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
5435; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
5436; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
5437; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5438; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [12,12,12,12]
5439; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
5440; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
5441; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
5442; AVX1-NEXT:    retq
5443;
5444; AVX2-LABEL: ult_12_v8i32:
5445; AVX2:       # %bb.0:
5446; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5447; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
5448; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5449; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
5450; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
5451; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
5452; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
5453; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
5454; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5455; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5456; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5457; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5458; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5459; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5460; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]
5461; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5462; AVX2-NEXT:    retq
5463;
5464; AVX512VPOPCNTDQ-LABEL: ult_12_v8i32:
5465; AVX512VPOPCNTDQ:       # %bb.0:
5466; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5467; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5468; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]
5469; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5470; AVX512VPOPCNTDQ-NEXT:    retq
5471;
5472; AVX512VPOPCNTDQVL-LABEL: ult_12_v8i32:
5473; AVX512VPOPCNTDQVL:       # %bb.0:
5474; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5475; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5476; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5477; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5478; AVX512VPOPCNTDQVL-NEXT:    retq
5479;
5480; BITALG_NOVLX-LABEL: ult_12_v8i32:
5481; BITALG_NOVLX:       # %bb.0:
5482; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5483; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
5484; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5485; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5486; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5487; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5488; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5489; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5490; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]
5491; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5492; BITALG_NOVLX-NEXT:    retq
5493;
5494; BITALG-LABEL: ult_12_v8i32:
5495; BITALG:       # %bb.0:
5496; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
5497; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5498; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5499; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5500; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5501; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5502; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5503; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5504; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5505; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5506; BITALG-NEXT:    retq
5507  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
5508  %3 = icmp ult <8 x i32> %2, <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12>
5509  %4 = sext <8 x i1> %3 to <8 x i32>
5510  ret <8 x i32> %4
5511}
5512
5513define <8 x i32> @ugt_12_v8i32(<8 x i32> %0) {
5514; AVX1-LABEL: ugt_12_v8i32:
5515; AVX1:       # %bb.0:
5516; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5517; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5518; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5519; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5520; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
5521; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
5522; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
5523; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
5524; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
5525; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
5526; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
5527; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
5528; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
5529; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
5530; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5531; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
5532; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
5533; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5534; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5535; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5536; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
5537; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
5538; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
5539; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
5540; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
5541; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5542; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [12,12,12,12]
5543; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
5544; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
5545; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
5546; AVX1-NEXT:    retq
5547;
5548; AVX2-LABEL: ugt_12_v8i32:
5549; AVX2:       # %bb.0:
5550; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5551; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
5552; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5553; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
5554; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
5555; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
5556; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
5557; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
5558; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5559; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5560; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5561; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5562; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5563; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5564; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]
5565; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5566; AVX2-NEXT:    retq
5567;
5568; AVX512VPOPCNTDQ-LABEL: ugt_12_v8i32:
5569; AVX512VPOPCNTDQ:       # %bb.0:
5570; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5571; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5572; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]
5573; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5574; AVX512VPOPCNTDQ-NEXT:    retq
5575;
5576; AVX512VPOPCNTDQVL-LABEL: ugt_12_v8i32:
5577; AVX512VPOPCNTDQVL:       # %bb.0:
5578; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5579; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5580; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5581; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5582; AVX512VPOPCNTDQVL-NEXT:    retq
5583;
5584; BITALG_NOVLX-LABEL: ugt_12_v8i32:
5585; BITALG_NOVLX:       # %bb.0:
5586; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5587; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
5588; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5589; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5590; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5591; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5592; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5593; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5594; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]
5595; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5596; BITALG_NOVLX-NEXT:    retq
5597;
5598; BITALG-LABEL: ugt_12_v8i32:
5599; BITALG:       # %bb.0:
5600; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
5601; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5602; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5603; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5604; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5605; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5606; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5607; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5608; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5609; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5610; BITALG-NEXT:    retq
5611  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
5612  %3 = icmp ugt <8 x i32> %2, <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12>
5613  %4 = sext <8 x i1> %3 to <8 x i32>
5614  ret <8 x i32> %4
5615}
5616
5617define <8 x i32> @ult_13_v8i32(<8 x i32> %0) {
5618; AVX1-LABEL: ult_13_v8i32:
5619; AVX1:       # %bb.0:
5620; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5621; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5622; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5623; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5624; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
5625; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
5626; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
5627; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
5628; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
5629; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
5630; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
5631; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
5632; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
5633; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
5634; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5635; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
5636; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
5637; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5638; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5639; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5640; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
5641; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
5642; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
5643; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
5644; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
5645; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5646; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [13,13,13,13]
5647; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
5648; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
5649; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
5650; AVX1-NEXT:    retq
5651;
5652; AVX2-LABEL: ult_13_v8i32:
5653; AVX2:       # %bb.0:
5654; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5655; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
5656; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5657; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
5658; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
5659; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
5660; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
5661; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
5662; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5663; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5664; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5665; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5666; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5667; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5668; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]
5669; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5670; AVX2-NEXT:    retq
5671;
5672; AVX512VPOPCNTDQ-LABEL: ult_13_v8i32:
5673; AVX512VPOPCNTDQ:       # %bb.0:
5674; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5675; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5676; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]
5677; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5678; AVX512VPOPCNTDQ-NEXT:    retq
5679;
5680; AVX512VPOPCNTDQVL-LABEL: ult_13_v8i32:
5681; AVX512VPOPCNTDQVL:       # %bb.0:
5682; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5683; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5684; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5685; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5686; AVX512VPOPCNTDQVL-NEXT:    retq
5687;
5688; BITALG_NOVLX-LABEL: ult_13_v8i32:
5689; BITALG_NOVLX:       # %bb.0:
5690; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5691; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
5692; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5693; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5694; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5695; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5696; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5697; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5698; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]
5699; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5700; BITALG_NOVLX-NEXT:    retq
5701;
5702; BITALG-LABEL: ult_13_v8i32:
5703; BITALG:       # %bb.0:
5704; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
5705; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5706; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5707; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5708; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5709; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5710; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5711; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5712; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5713; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5714; BITALG-NEXT:    retq
5715  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
5716  %3 = icmp ult <8 x i32> %2, <i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13>
5717  %4 = sext <8 x i1> %3 to <8 x i32>
5718  ret <8 x i32> %4
5719}
5720
5721define <8 x i32> @ugt_13_v8i32(<8 x i32> %0) {
5722; AVX1-LABEL: ugt_13_v8i32:
5723; AVX1:       # %bb.0:
5724; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5725; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5726; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5727; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5728; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
5729; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
5730; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
5731; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
5732; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
5733; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
5734; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
5735; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
5736; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
5737; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
5738; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5739; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
5740; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
5741; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5742; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5743; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5744; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
5745; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
5746; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
5747; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
5748; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
5749; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5750; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [13,13,13,13]
5751; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
5752; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
5753; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
5754; AVX1-NEXT:    retq
5755;
5756; AVX2-LABEL: ugt_13_v8i32:
5757; AVX2:       # %bb.0:
5758; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5759; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
5760; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5761; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
5762; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
5763; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
5764; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
5765; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
5766; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5767; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5768; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5769; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5770; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5771; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5772; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]
5773; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5774; AVX2-NEXT:    retq
5775;
5776; AVX512VPOPCNTDQ-LABEL: ugt_13_v8i32:
5777; AVX512VPOPCNTDQ:       # %bb.0:
5778; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5779; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5780; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]
5781; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5782; AVX512VPOPCNTDQ-NEXT:    retq
5783;
5784; AVX512VPOPCNTDQVL-LABEL: ugt_13_v8i32:
5785; AVX512VPOPCNTDQVL:       # %bb.0:
5786; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5787; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5788; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5789; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5790; AVX512VPOPCNTDQVL-NEXT:    retq
5791;
5792; BITALG_NOVLX-LABEL: ugt_13_v8i32:
5793; BITALG_NOVLX:       # %bb.0:
5794; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5795; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
5796; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5797; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5798; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5799; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5800; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5801; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5802; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]
5803; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5804; BITALG_NOVLX-NEXT:    retq
5805;
5806; BITALG-LABEL: ugt_13_v8i32:
5807; BITALG:       # %bb.0:
5808; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
5809; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5810; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5811; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5812; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5813; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5814; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5815; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5816; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5817; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5818; BITALG-NEXT:    retq
5819  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
5820  %3 = icmp ugt <8 x i32> %2, <i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13>
5821  %4 = sext <8 x i1> %3 to <8 x i32>
5822  ret <8 x i32> %4
5823}
5824
5825define <8 x i32> @ult_14_v8i32(<8 x i32> %0) {
5826; AVX1-LABEL: ult_14_v8i32:
5827; AVX1:       # %bb.0:
5828; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5829; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5830; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5831; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5832; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
5833; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
5834; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
5835; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
5836; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
5837; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
5838; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
5839; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
5840; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
5841; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
5842; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5843; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
5844; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
5845; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5846; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5847; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5848; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
5849; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
5850; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
5851; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
5852; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
5853; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5854; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [14,14,14,14]
5855; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
5856; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
5857; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
5858; AVX1-NEXT:    retq
5859;
5860; AVX2-LABEL: ult_14_v8i32:
5861; AVX2:       # %bb.0:
5862; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5863; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
5864; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5865; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
5866; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
5867; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
5868; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
5869; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
5870; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5871; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5872; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5873; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5874; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5875; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5876; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]
5877; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5878; AVX2-NEXT:    retq
5879;
5880; AVX512VPOPCNTDQ-LABEL: ult_14_v8i32:
5881; AVX512VPOPCNTDQ:       # %bb.0:
5882; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5883; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5884; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]
5885; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5886; AVX512VPOPCNTDQ-NEXT:    retq
5887;
5888; AVX512VPOPCNTDQVL-LABEL: ult_14_v8i32:
5889; AVX512VPOPCNTDQVL:       # %bb.0:
5890; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5891; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5892; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5893; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5894; AVX512VPOPCNTDQVL-NEXT:    retq
5895;
5896; BITALG_NOVLX-LABEL: ult_14_v8i32:
5897; BITALG_NOVLX:       # %bb.0:
5898; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5899; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
5900; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5901; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5902; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5903; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5904; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5905; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5906; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]
5907; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
5908; BITALG_NOVLX-NEXT:    retq
5909;
5910; BITALG-LABEL: ult_14_v8i32:
5911; BITALG:       # %bb.0:
5912; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
5913; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5914; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5915; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5916; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5917; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5918; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5919; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5920; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5921; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5922; BITALG-NEXT:    retq
5923  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
5924  %3 = icmp ult <8 x i32> %2, <i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14>
5925  %4 = sext <8 x i1> %3 to <8 x i32>
5926  ret <8 x i32> %4
5927}
5928
5929define <8 x i32> @ugt_14_v8i32(<8 x i32> %0) {
5930; AVX1-LABEL: ugt_14_v8i32:
5931; AVX1:       # %bb.0:
5932; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5933; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5934; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5935; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5936; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
5937; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
5938; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
5939; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
5940; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
5941; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
5942; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
5943; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
5944; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
5945; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
5946; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5947; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
5948; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
5949; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5950; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5951; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5952; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
5953; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
5954; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
5955; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
5956; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
5957; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5958; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [14,14,14,14]
5959; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
5960; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
5961; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
5962; AVX1-NEXT:    retq
5963;
5964; AVX2-LABEL: ugt_14_v8i32:
5965; AVX2:       # %bb.0:
5966; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5967; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
5968; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5969; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
5970; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
5971; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
5972; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
5973; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
5974; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5975; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
5976; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
5977; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
5978; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
5979; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
5980; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]
5981; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5982; AVX2-NEXT:    retq
5983;
5984; AVX512VPOPCNTDQ-LABEL: ugt_14_v8i32:
5985; AVX512VPOPCNTDQ:       # %bb.0:
5986; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
5987; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5988; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]
5989; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
5990; AVX512VPOPCNTDQ-NEXT:    retq
5991;
5992; AVX512VPOPCNTDQVL-LABEL: ugt_14_v8i32:
5993; AVX512VPOPCNTDQVL:       # %bb.0:
5994; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5995; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
5996; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
5997; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
5998; AVX512VPOPCNTDQVL-NEXT:    retq
5999;
6000; BITALG_NOVLX-LABEL: ugt_14_v8i32:
6001; BITALG_NOVLX:       # %bb.0:
6002; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6003; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6004; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6005; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6006; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6007; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6008; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6009; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6010; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]
6011; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6012; BITALG_NOVLX-NEXT:    retq
6013;
6014; BITALG-LABEL: ugt_14_v8i32:
6015; BITALG:       # %bb.0:
6016; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
6017; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6018; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6019; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6020; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6021; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6022; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6023; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6024; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6025; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6026; BITALG-NEXT:    retq
6027  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
6028  %3 = icmp ugt <8 x i32> %2, <i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14>
6029  %4 = sext <8 x i1> %3 to <8 x i32>
6030  ret <8 x i32> %4
6031}
6032
6033define <8 x i32> @ult_15_v8i32(<8 x i32> %0) {
6034; AVX1-LABEL: ult_15_v8i32:
6035; AVX1:       # %bb.0:
6036; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6037; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6038; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6039; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6040; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
6041; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
6042; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
6043; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
6044; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
6045; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
6046; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
6047; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
6048; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
6049; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
6050; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6051; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
6052; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
6053; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6054; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6055; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6056; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
6057; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
6058; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
6059; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6060; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
6061; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
6062; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15]
6063; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6064; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
6065; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
6066; AVX1-NEXT:    retq
6067;
6068; AVX2-LABEL: ult_15_v8i32:
6069; AVX2:       # %bb.0:
6070; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6071; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
6072; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6073; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
6074; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
6075; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
6076; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
6077; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
6078; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6079; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6080; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6081; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6082; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6083; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6084; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]
6085; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6086; AVX2-NEXT:    retq
6087;
6088; AVX512VPOPCNTDQ-LABEL: ult_15_v8i32:
6089; AVX512VPOPCNTDQ:       # %bb.0:
6090; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6091; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6092; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]
6093; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6094; AVX512VPOPCNTDQ-NEXT:    retq
6095;
6096; AVX512VPOPCNTDQVL-LABEL: ult_15_v8i32:
6097; AVX512VPOPCNTDQVL:       # %bb.0:
6098; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
6099; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6100; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6101; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6102; AVX512VPOPCNTDQVL-NEXT:    retq
6103;
6104; BITALG_NOVLX-LABEL: ult_15_v8i32:
6105; BITALG_NOVLX:       # %bb.0:
6106; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6107; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6108; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6109; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6110; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6111; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6112; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6113; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6114; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]
6115; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6116; BITALG_NOVLX-NEXT:    retq
6117;
6118; BITALG-LABEL: ult_15_v8i32:
6119; BITALG:       # %bb.0:
6120; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
6121; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6122; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6123; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6124; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6125; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6126; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6127; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6128; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6129; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6130; BITALG-NEXT:    retq
6131  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
6132  %3 = icmp ult <8 x i32> %2, <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>
6133  %4 = sext <8 x i1> %3 to <8 x i32>
6134  ret <8 x i32> %4
6135}
6136
6137define <8 x i32> @ugt_15_v8i32(<8 x i32> %0) {
6138; AVX1-LABEL: ugt_15_v8i32:
6139; AVX1:       # %bb.0:
6140; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6141; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6142; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6143; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6144; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
6145; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
6146; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
6147; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
6148; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
6149; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
6150; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
6151; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
6152; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
6153; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
6154; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6155; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
6156; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
6157; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6158; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6159; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6160; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
6161; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
6162; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
6163; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6164; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
6165; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
6166; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15]
6167; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6168; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
6169; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
6170; AVX1-NEXT:    retq
6171;
6172; AVX2-LABEL: ugt_15_v8i32:
6173; AVX2:       # %bb.0:
6174; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6175; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
6176; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6177; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
6178; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
6179; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
6180; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
6181; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
6182; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6183; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6184; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6185; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6186; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6187; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6188; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]
6189; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6190; AVX2-NEXT:    retq
6191;
6192; AVX512VPOPCNTDQ-LABEL: ugt_15_v8i32:
6193; AVX512VPOPCNTDQ:       # %bb.0:
6194; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6195; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6196; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]
6197; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6198; AVX512VPOPCNTDQ-NEXT:    retq
6199;
6200; AVX512VPOPCNTDQVL-LABEL: ugt_15_v8i32:
6201; AVX512VPOPCNTDQVL:       # %bb.0:
6202; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
6203; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6204; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6205; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6206; AVX512VPOPCNTDQVL-NEXT:    retq
6207;
6208; BITALG_NOVLX-LABEL: ugt_15_v8i32:
6209; BITALG_NOVLX:       # %bb.0:
6210; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6211; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6212; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6213; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6214; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6215; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6216; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6217; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6218; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]
6219; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6220; BITALG_NOVLX-NEXT:    retq
6221;
6222; BITALG-LABEL: ugt_15_v8i32:
6223; BITALG:       # %bb.0:
6224; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
6225; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6226; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6227; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6228; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6229; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6230; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6231; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6232; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6233; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6234; BITALG-NEXT:    retq
6235  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
6236  %3 = icmp ugt <8 x i32> %2, <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>
6237  %4 = sext <8 x i1> %3 to <8 x i32>
6238  ret <8 x i32> %4
6239}
6240
6241define <8 x i32> @ult_16_v8i32(<8 x i32> %0) {
6242; AVX1-LABEL: ult_16_v8i32:
6243; AVX1:       # %bb.0:
6244; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6245; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6246; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6247; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6248; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
6249; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
6250; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
6251; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
6252; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
6253; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
6254; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
6255; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
6256; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
6257; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
6258; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6259; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
6260; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
6261; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6262; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6263; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6264; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
6265; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
6266; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
6267; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6268; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
6269; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
6270; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [16,16,16,16]
6271; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6272; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
6273; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
6274; AVX1-NEXT:    retq
6275;
6276; AVX2-LABEL: ult_16_v8i32:
6277; AVX2:       # %bb.0:
6278; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6279; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
6280; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6281; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
6282; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
6283; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
6284; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
6285; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
6286; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6287; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6288; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6289; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6290; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6291; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6292; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]
6293; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6294; AVX2-NEXT:    retq
6295;
6296; AVX512VPOPCNTDQ-LABEL: ult_16_v8i32:
6297; AVX512VPOPCNTDQ:       # %bb.0:
6298; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6299; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6300; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]
6301; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6302; AVX512VPOPCNTDQ-NEXT:    retq
6303;
6304; AVX512VPOPCNTDQVL-LABEL: ult_16_v8i32:
6305; AVX512VPOPCNTDQVL:       # %bb.0:
6306; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
6307; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6308; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6309; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6310; AVX512VPOPCNTDQVL-NEXT:    retq
6311;
6312; BITALG_NOVLX-LABEL: ult_16_v8i32:
6313; BITALG_NOVLX:       # %bb.0:
6314; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6315; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6316; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6317; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6318; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6319; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6320; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6321; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6322; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]
6323; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6324; BITALG_NOVLX-NEXT:    retq
6325;
6326; BITALG-LABEL: ult_16_v8i32:
6327; BITALG:       # %bb.0:
6328; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
6329; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6330; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6331; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6332; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6333; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6334; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6335; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6336; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6337; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6338; BITALG-NEXT:    retq
6339  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
6340  %3 = icmp ult <8 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
6341  %4 = sext <8 x i1> %3 to <8 x i32>
6342  ret <8 x i32> %4
6343}
6344
6345define <8 x i32> @ugt_16_v8i32(<8 x i32> %0) {
6346; AVX1-LABEL: ugt_16_v8i32:
6347; AVX1:       # %bb.0:
6348; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6349; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6350; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6351; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6352; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
6353; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
6354; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
6355; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
6356; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
6357; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
6358; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
6359; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
6360; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
6361; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
6362; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6363; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
6364; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
6365; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6366; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6367; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6368; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
6369; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
6370; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
6371; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6372; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
6373; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
6374; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [16,16,16,16]
6375; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6376; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
6377; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
6378; AVX1-NEXT:    retq
6379;
6380; AVX2-LABEL: ugt_16_v8i32:
6381; AVX2:       # %bb.0:
6382; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6383; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
6384; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6385; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
6386; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
6387; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
6388; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
6389; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
6390; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6391; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6392; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6393; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6394; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6395; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6396; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]
6397; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6398; AVX2-NEXT:    retq
6399;
6400; AVX512VPOPCNTDQ-LABEL: ugt_16_v8i32:
6401; AVX512VPOPCNTDQ:       # %bb.0:
6402; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6403; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6404; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]
6405; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6406; AVX512VPOPCNTDQ-NEXT:    retq
6407;
6408; AVX512VPOPCNTDQVL-LABEL: ugt_16_v8i32:
6409; AVX512VPOPCNTDQVL:       # %bb.0:
6410; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
6411; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6412; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6413; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6414; AVX512VPOPCNTDQVL-NEXT:    retq
6415;
6416; BITALG_NOVLX-LABEL: ugt_16_v8i32:
6417; BITALG_NOVLX:       # %bb.0:
6418; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6419; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6420; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6421; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6422; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6423; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6424; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6425; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6426; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]
6427; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6428; BITALG_NOVLX-NEXT:    retq
6429;
6430; BITALG-LABEL: ugt_16_v8i32:
6431; BITALG:       # %bb.0:
6432; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
6433; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6434; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6435; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6436; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6437; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6438; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6439; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6440; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6441; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6442; BITALG-NEXT:    retq
6443  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
6444  %3 = icmp ugt <8 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
6445  %4 = sext <8 x i1> %3 to <8 x i32>
6446  ret <8 x i32> %4
6447}
6448
6449define <8 x i32> @ult_17_v8i32(<8 x i32> %0) {
6450; AVX1-LABEL: ult_17_v8i32:
6451; AVX1:       # %bb.0:
6452; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6453; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6454; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6455; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6456; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
6457; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
6458; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
6459; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
6460; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
6461; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
6462; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
6463; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
6464; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
6465; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
6466; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6467; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
6468; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
6469; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6470; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6471; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6472; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
6473; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
6474; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
6475; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6476; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
6477; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
6478; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [17,17,17,17]
6479; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6480; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
6481; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
6482; AVX1-NEXT:    retq
6483;
6484; AVX2-LABEL: ult_17_v8i32:
6485; AVX2:       # %bb.0:
6486; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6487; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
6488; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6489; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
6490; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
6491; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
6492; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
6493; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
6494; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6495; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6496; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6497; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6498; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6499; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6500; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]
6501; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6502; AVX2-NEXT:    retq
6503;
6504; AVX512VPOPCNTDQ-LABEL: ult_17_v8i32:
6505; AVX512VPOPCNTDQ:       # %bb.0:
6506; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6507; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6508; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]
6509; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6510; AVX512VPOPCNTDQ-NEXT:    retq
6511;
6512; AVX512VPOPCNTDQVL-LABEL: ult_17_v8i32:
6513; AVX512VPOPCNTDQVL:       # %bb.0:
6514; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
6515; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6516; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6517; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6518; AVX512VPOPCNTDQVL-NEXT:    retq
6519;
6520; BITALG_NOVLX-LABEL: ult_17_v8i32:
6521; BITALG_NOVLX:       # %bb.0:
6522; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6523; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6524; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6525; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6526; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6527; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6528; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6529; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6530; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]
6531; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6532; BITALG_NOVLX-NEXT:    retq
6533;
6534; BITALG-LABEL: ult_17_v8i32:
6535; BITALG:       # %bb.0:
6536; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
6537; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6538; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6539; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6540; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6541; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6542; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6543; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6544; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6545; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6546; BITALG-NEXT:    retq
6547  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
6548  %3 = icmp ult <8 x i32> %2, <i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17>
6549  %4 = sext <8 x i1> %3 to <8 x i32>
6550  ret <8 x i32> %4
6551}
6552
6553define <8 x i32> @ugt_17_v8i32(<8 x i32> %0) {
6554; AVX1-LABEL: ugt_17_v8i32:
6555; AVX1:       # %bb.0:
6556; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6557; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6558; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6559; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6560; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
6561; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
6562; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
6563; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
6564; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
6565; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
6566; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
6567; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
6568; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
6569; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
6570; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6571; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
6572; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
6573; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6574; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6575; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6576; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
6577; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
6578; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
6579; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6580; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
6581; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
6582; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [17,17,17,17]
6583; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6584; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
6585; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
6586; AVX1-NEXT:    retq
6587;
6588; AVX2-LABEL: ugt_17_v8i32:
6589; AVX2:       # %bb.0:
6590; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6591; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
6592; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6593; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
6594; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
6595; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
6596; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
6597; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
6598; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6599; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6600; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6601; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6602; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6603; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6604; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]
6605; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6606; AVX2-NEXT:    retq
6607;
6608; AVX512VPOPCNTDQ-LABEL: ugt_17_v8i32:
6609; AVX512VPOPCNTDQ:       # %bb.0:
6610; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6611; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6612; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]
6613; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6614; AVX512VPOPCNTDQ-NEXT:    retq
6615;
6616; AVX512VPOPCNTDQVL-LABEL: ugt_17_v8i32:
6617; AVX512VPOPCNTDQVL:       # %bb.0:
6618; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
6619; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6620; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6621; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6622; AVX512VPOPCNTDQVL-NEXT:    retq
6623;
6624; BITALG_NOVLX-LABEL: ugt_17_v8i32:
6625; BITALG_NOVLX:       # %bb.0:
6626; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6627; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6628; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6629; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6630; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6631; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6632; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6633; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6634; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]
6635; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6636; BITALG_NOVLX-NEXT:    retq
6637;
6638; BITALG-LABEL: ugt_17_v8i32:
6639; BITALG:       # %bb.0:
6640; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
6641; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6642; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6643; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6644; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6645; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6646; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6647; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6648; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6649; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6650; BITALG-NEXT:    retq
6651  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
6652  %3 = icmp ugt <8 x i32> %2, <i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17>
6653  %4 = sext <8 x i1> %3 to <8 x i32>
6654  ret <8 x i32> %4
6655}
6656
6657define <8 x i32> @ult_18_v8i32(<8 x i32> %0) {
6658; AVX1-LABEL: ult_18_v8i32:
6659; AVX1:       # %bb.0:
6660; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6661; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6662; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6663; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6664; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
6665; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
6666; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
6667; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
6668; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
6669; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
6670; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
6671; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
6672; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
6673; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
6674; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6675; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
6676; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
6677; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6678; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6679; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6680; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
6681; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
6682; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
6683; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6684; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
6685; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
6686; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [18,18,18,18]
6687; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6688; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
6689; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
6690; AVX1-NEXT:    retq
6691;
6692; AVX2-LABEL: ult_18_v8i32:
6693; AVX2:       # %bb.0:
6694; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6695; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
6696; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6697; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
6698; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
6699; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
6700; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
6701; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
6702; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6703; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6704; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6705; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6706; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6707; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6708; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]
6709; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6710; AVX2-NEXT:    retq
6711;
6712; AVX512VPOPCNTDQ-LABEL: ult_18_v8i32:
6713; AVX512VPOPCNTDQ:       # %bb.0:
6714; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6715; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6716; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]
6717; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6718; AVX512VPOPCNTDQ-NEXT:    retq
6719;
6720; AVX512VPOPCNTDQVL-LABEL: ult_18_v8i32:
6721; AVX512VPOPCNTDQVL:       # %bb.0:
6722; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
6723; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6724; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6725; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6726; AVX512VPOPCNTDQVL-NEXT:    retq
6727;
6728; BITALG_NOVLX-LABEL: ult_18_v8i32:
6729; BITALG_NOVLX:       # %bb.0:
6730; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6731; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6732; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6733; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6734; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6735; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6736; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6737; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6738; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]
6739; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6740; BITALG_NOVLX-NEXT:    retq
6741;
6742; BITALG-LABEL: ult_18_v8i32:
6743; BITALG:       # %bb.0:
6744; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
6745; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6746; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6747; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6748; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6749; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6750; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6751; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6752; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6753; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6754; BITALG-NEXT:    retq
6755  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
6756  %3 = icmp ult <8 x i32> %2, <i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18>
6757  %4 = sext <8 x i1> %3 to <8 x i32>
6758  ret <8 x i32> %4
6759}
6760
6761define <8 x i32> @ugt_18_v8i32(<8 x i32> %0) {
6762; AVX1-LABEL: ugt_18_v8i32:
6763; AVX1:       # %bb.0:
6764; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6765; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6766; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6767; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6768; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
6769; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
6770; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
6771; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
6772; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
6773; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
6774; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
6775; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
6776; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
6777; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
6778; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6779; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
6780; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
6781; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6782; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6783; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6784; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
6785; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
6786; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
6787; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6788; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
6789; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
6790; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [18,18,18,18]
6791; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6792; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
6793; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
6794; AVX1-NEXT:    retq
6795;
6796; AVX2-LABEL: ugt_18_v8i32:
6797; AVX2:       # %bb.0:
6798; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6799; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
6800; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6801; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
6802; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
6803; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
6804; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
6805; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
6806; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6807; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6808; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6809; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6810; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6811; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6812; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]
6813; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6814; AVX2-NEXT:    retq
6815;
6816; AVX512VPOPCNTDQ-LABEL: ugt_18_v8i32:
6817; AVX512VPOPCNTDQ:       # %bb.0:
6818; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6819; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6820; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]
6821; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6822; AVX512VPOPCNTDQ-NEXT:    retq
6823;
6824; AVX512VPOPCNTDQVL-LABEL: ugt_18_v8i32:
6825; AVX512VPOPCNTDQVL:       # %bb.0:
6826; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
6827; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6828; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6829; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6830; AVX512VPOPCNTDQVL-NEXT:    retq
6831;
6832; BITALG_NOVLX-LABEL: ugt_18_v8i32:
6833; BITALG_NOVLX:       # %bb.0:
6834; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6835; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6836; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6837; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6838; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6839; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6840; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6841; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6842; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]
6843; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
6844; BITALG_NOVLX-NEXT:    retq
6845;
6846; BITALG-LABEL: ugt_18_v8i32:
6847; BITALG:       # %bb.0:
6848; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
6849; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6850; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6851; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6852; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6853; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6854; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6855; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6856; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6857; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6858; BITALG-NEXT:    retq
6859  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
6860  %3 = icmp ugt <8 x i32> %2, <i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18>
6861  %4 = sext <8 x i1> %3 to <8 x i32>
6862  ret <8 x i32> %4
6863}
6864
6865define <8 x i32> @ult_19_v8i32(<8 x i32> %0) {
6866; AVX1-LABEL: ult_19_v8i32:
6867; AVX1:       # %bb.0:
6868; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6869; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6870; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6871; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6872; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
6873; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
6874; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
6875; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
6876; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
6877; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
6878; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
6879; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
6880; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
6881; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
6882; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6883; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
6884; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
6885; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6886; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6887; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6888; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
6889; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
6890; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
6891; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6892; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
6893; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
6894; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [19,19,19,19]
6895; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6896; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
6897; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
6898; AVX1-NEXT:    retq
6899;
6900; AVX2-LABEL: ult_19_v8i32:
6901; AVX2:       # %bb.0:
6902; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6903; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
6904; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6905; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
6906; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
6907; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
6908; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
6909; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
6910; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6911; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6912; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6913; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6914; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6915; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6916; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]
6917; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6918; AVX2-NEXT:    retq
6919;
6920; AVX512VPOPCNTDQ-LABEL: ult_19_v8i32:
6921; AVX512VPOPCNTDQ:       # %bb.0:
6922; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6923; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6924; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]
6925; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6926; AVX512VPOPCNTDQ-NEXT:    retq
6927;
6928; AVX512VPOPCNTDQVL-LABEL: ult_19_v8i32:
6929; AVX512VPOPCNTDQVL:       # %bb.0:
6930; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
6931; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6932; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6933; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6934; AVX512VPOPCNTDQVL-NEXT:    retq
6935;
6936; BITALG_NOVLX-LABEL: ult_19_v8i32:
6937; BITALG_NOVLX:       # %bb.0:
6938; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6939; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6940; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6941; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6942; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6943; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6944; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6945; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6946; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]
6947; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
6948; BITALG_NOVLX-NEXT:    retq
6949;
6950; BITALG-LABEL: ult_19_v8i32:
6951; BITALG:       # %bb.0:
6952; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
6953; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6954; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
6955; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
6956; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
6957; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
6958; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
6959; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
6960; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
6961; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
6962; BITALG-NEXT:    retq
6963  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
6964  %3 = icmp ult <8 x i32> %2, <i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19>
6965  %4 = sext <8 x i1> %3 to <8 x i32>
6966  ret <8 x i32> %4
6967}
6968
6969define <8 x i32> @ugt_19_v8i32(<8 x i32> %0) {
6970; AVX1-LABEL: ugt_19_v8i32:
6971; AVX1:       # %bb.0:
6972; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6973; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6974; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6975; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6976; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
6977; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
6978; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
6979; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
6980; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
6981; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
6982; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
6983; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
6984; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
6985; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
6986; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6987; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
6988; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
6989; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6990; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6991; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6992; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
6993; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
6994; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
6995; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6996; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
6997; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
6998; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [19,19,19,19]
6999; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7000; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
7001; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
7002; AVX1-NEXT:    retq
7003;
7004; AVX2-LABEL: ugt_19_v8i32:
7005; AVX2:       # %bb.0:
7006; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7007; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
7008; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7009; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
7010; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
7011; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
7012; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
7013; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
7014; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7015; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7016; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7017; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7018; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7019; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7020; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]
7021; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7022; AVX2-NEXT:    retq
7023;
7024; AVX512VPOPCNTDQ-LABEL: ugt_19_v8i32:
7025; AVX512VPOPCNTDQ:       # %bb.0:
7026; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7027; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7028; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]
7029; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7030; AVX512VPOPCNTDQ-NEXT:    retq
7031;
7032; AVX512VPOPCNTDQVL-LABEL: ugt_19_v8i32:
7033; AVX512VPOPCNTDQVL:       # %bb.0:
7034; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
7035; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7036; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7037; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7038; AVX512VPOPCNTDQVL-NEXT:    retq
7039;
7040; BITALG_NOVLX-LABEL: ugt_19_v8i32:
7041; BITALG_NOVLX:       # %bb.0:
7042; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7043; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7044; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7045; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7046; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7047; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7048; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7049; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7050; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]
7051; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7052; BITALG_NOVLX-NEXT:    retq
7053;
7054; BITALG-LABEL: ugt_19_v8i32:
7055; BITALG:       # %bb.0:
7056; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
7057; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7058; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7059; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7060; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7061; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7062; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7063; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7064; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7065; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7066; BITALG-NEXT:    retq
7067  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
7068  %3 = icmp ugt <8 x i32> %2, <i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19>
7069  %4 = sext <8 x i1> %3 to <8 x i32>
7070  ret <8 x i32> %4
7071}
7072
7073define <8 x i32> @ult_20_v8i32(<8 x i32> %0) {
7074; AVX1-LABEL: ult_20_v8i32:
7075; AVX1:       # %bb.0:
7076; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7077; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7078; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7079; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7080; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
7081; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
7082; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
7083; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
7084; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
7085; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
7086; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
7087; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
7088; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
7089; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
7090; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7091; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
7092; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
7093; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7094; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7095; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7096; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
7097; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
7098; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
7099; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7100; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
7101; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
7102; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [20,20,20,20]
7103; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7104; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
7105; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
7106; AVX1-NEXT:    retq
7107;
7108; AVX2-LABEL: ult_20_v8i32:
7109; AVX2:       # %bb.0:
7110; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7111; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
7112; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7113; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
7114; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
7115; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
7116; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
7117; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
7118; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7119; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7120; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7121; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7122; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7123; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7124; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]
7125; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7126; AVX2-NEXT:    retq
7127;
7128; AVX512VPOPCNTDQ-LABEL: ult_20_v8i32:
7129; AVX512VPOPCNTDQ:       # %bb.0:
7130; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7131; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7132; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]
7133; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7134; AVX512VPOPCNTDQ-NEXT:    retq
7135;
7136; AVX512VPOPCNTDQVL-LABEL: ult_20_v8i32:
7137; AVX512VPOPCNTDQVL:       # %bb.0:
7138; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
7139; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7140; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7141; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7142; AVX512VPOPCNTDQVL-NEXT:    retq
7143;
7144; BITALG_NOVLX-LABEL: ult_20_v8i32:
7145; BITALG_NOVLX:       # %bb.0:
7146; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7147; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7148; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7149; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7150; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7151; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7152; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7153; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7154; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]
7155; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7156; BITALG_NOVLX-NEXT:    retq
7157;
7158; BITALG-LABEL: ult_20_v8i32:
7159; BITALG:       # %bb.0:
7160; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
7161; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7162; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7163; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7164; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7165; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7166; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7167; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7168; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7169; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7170; BITALG-NEXT:    retq
7171  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
7172  %3 = icmp ult <8 x i32> %2, <i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20>
7173  %4 = sext <8 x i1> %3 to <8 x i32>
7174  ret <8 x i32> %4
7175}
7176
7177define <8 x i32> @ugt_20_v8i32(<8 x i32> %0) {
7178; AVX1-LABEL: ugt_20_v8i32:
7179; AVX1:       # %bb.0:
7180; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7181; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7182; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7183; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7184; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
7185; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
7186; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
7187; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
7188; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
7189; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
7190; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
7191; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
7192; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
7193; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
7194; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7195; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
7196; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
7197; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7198; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7199; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7200; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
7201; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
7202; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
7203; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7204; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
7205; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
7206; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [20,20,20,20]
7207; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7208; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
7209; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
7210; AVX1-NEXT:    retq
7211;
7212; AVX2-LABEL: ugt_20_v8i32:
7213; AVX2:       # %bb.0:
7214; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7215; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
7216; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7217; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
7218; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
7219; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
7220; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
7221; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
7222; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7223; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7224; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7225; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7226; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7227; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7228; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]
7229; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7230; AVX2-NEXT:    retq
7231;
7232; AVX512VPOPCNTDQ-LABEL: ugt_20_v8i32:
7233; AVX512VPOPCNTDQ:       # %bb.0:
7234; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7235; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7236; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]
7237; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7238; AVX512VPOPCNTDQ-NEXT:    retq
7239;
7240; AVX512VPOPCNTDQVL-LABEL: ugt_20_v8i32:
7241; AVX512VPOPCNTDQVL:       # %bb.0:
7242; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
7243; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7244; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7245; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7246; AVX512VPOPCNTDQVL-NEXT:    retq
7247;
7248; BITALG_NOVLX-LABEL: ugt_20_v8i32:
7249; BITALG_NOVLX:       # %bb.0:
7250; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7251; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7252; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7253; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7254; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7255; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7256; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7257; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7258; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]
7259; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7260; BITALG_NOVLX-NEXT:    retq
7261;
7262; BITALG-LABEL: ugt_20_v8i32:
7263; BITALG:       # %bb.0:
7264; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
7265; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7266; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7267; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7268; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7269; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7270; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7271; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7272; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7273; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7274; BITALG-NEXT:    retq
7275  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
7276  %3 = icmp ugt <8 x i32> %2, <i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20>
7277  %4 = sext <8 x i1> %3 to <8 x i32>
7278  ret <8 x i32> %4
7279}
7280
7281define <8 x i32> @ult_21_v8i32(<8 x i32> %0) {
7282; AVX1-LABEL: ult_21_v8i32:
7283; AVX1:       # %bb.0:
7284; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7285; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7286; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7287; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7288; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
7289; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
7290; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
7291; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
7292; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
7293; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
7294; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
7295; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
7296; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
7297; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
7298; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7299; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
7300; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
7301; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7302; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7303; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7304; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
7305; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
7306; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
7307; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7308; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
7309; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
7310; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [21,21,21,21]
7311; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7312; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
7313; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
7314; AVX1-NEXT:    retq
7315;
7316; AVX2-LABEL: ult_21_v8i32:
7317; AVX2:       # %bb.0:
7318; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7319; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
7320; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7321; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
7322; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
7323; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
7324; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
7325; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
7326; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7327; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7328; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7329; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7330; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7331; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7332; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]
7333; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7334; AVX2-NEXT:    retq
7335;
7336; AVX512VPOPCNTDQ-LABEL: ult_21_v8i32:
7337; AVX512VPOPCNTDQ:       # %bb.0:
7338; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7339; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7340; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]
7341; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7342; AVX512VPOPCNTDQ-NEXT:    retq
7343;
7344; AVX512VPOPCNTDQVL-LABEL: ult_21_v8i32:
7345; AVX512VPOPCNTDQVL:       # %bb.0:
7346; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
7347; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7348; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7349; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7350; AVX512VPOPCNTDQVL-NEXT:    retq
7351;
7352; BITALG_NOVLX-LABEL: ult_21_v8i32:
7353; BITALG_NOVLX:       # %bb.0:
7354; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7355; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7356; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7357; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7358; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7359; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7360; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7361; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7362; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]
7363; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7364; BITALG_NOVLX-NEXT:    retq
7365;
7366; BITALG-LABEL: ult_21_v8i32:
7367; BITALG:       # %bb.0:
7368; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
7369; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7370; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7371; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7372; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7373; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7374; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7375; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7376; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7377; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7378; BITALG-NEXT:    retq
7379  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
7380  %3 = icmp ult <8 x i32> %2, <i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21>
7381  %4 = sext <8 x i1> %3 to <8 x i32>
7382  ret <8 x i32> %4
7383}
7384
7385define <8 x i32> @ugt_21_v8i32(<8 x i32> %0) {
7386; AVX1-LABEL: ugt_21_v8i32:
7387; AVX1:       # %bb.0:
7388; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7389; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7390; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7391; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7392; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
7393; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
7394; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
7395; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
7396; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
7397; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
7398; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
7399; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
7400; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
7401; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
7402; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7403; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
7404; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
7405; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7406; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7407; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7408; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
7409; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
7410; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
7411; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7412; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
7413; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
7414; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [21,21,21,21]
7415; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7416; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
7417; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
7418; AVX1-NEXT:    retq
7419;
7420; AVX2-LABEL: ugt_21_v8i32:
7421; AVX2:       # %bb.0:
7422; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7423; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
7424; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7425; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
7426; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
7427; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
7428; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
7429; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
7430; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7431; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7432; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7433; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7434; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7435; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7436; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]
7437; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7438; AVX2-NEXT:    retq
7439;
7440; AVX512VPOPCNTDQ-LABEL: ugt_21_v8i32:
7441; AVX512VPOPCNTDQ:       # %bb.0:
7442; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7443; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7444; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]
7445; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7446; AVX512VPOPCNTDQ-NEXT:    retq
7447;
7448; AVX512VPOPCNTDQVL-LABEL: ugt_21_v8i32:
7449; AVX512VPOPCNTDQVL:       # %bb.0:
7450; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
7451; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7452; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7453; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7454; AVX512VPOPCNTDQVL-NEXT:    retq
7455;
7456; BITALG_NOVLX-LABEL: ugt_21_v8i32:
7457; BITALG_NOVLX:       # %bb.0:
7458; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7459; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7460; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7461; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7462; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7463; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7464; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7465; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7466; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]
7467; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7468; BITALG_NOVLX-NEXT:    retq
7469;
7470; BITALG-LABEL: ugt_21_v8i32:
7471; BITALG:       # %bb.0:
7472; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
7473; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7474; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7475; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7476; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7477; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7478; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7479; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7480; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7481; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7482; BITALG-NEXT:    retq
7483  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
7484  %3 = icmp ugt <8 x i32> %2, <i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21>
7485  %4 = sext <8 x i1> %3 to <8 x i32>
7486  ret <8 x i32> %4
7487}
7488
7489define <8 x i32> @ult_22_v8i32(<8 x i32> %0) {
7490; AVX1-LABEL: ult_22_v8i32:
7491; AVX1:       # %bb.0:
7492; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7493; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7494; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7495; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7496; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
7497; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
7498; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
7499; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
7500; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
7501; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
7502; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
7503; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
7504; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
7505; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
7506; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7507; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
7508; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
7509; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7510; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7511; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7512; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
7513; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
7514; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
7515; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7516; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
7517; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
7518; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [22,22,22,22]
7519; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7520; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
7521; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
7522; AVX1-NEXT:    retq
7523;
7524; AVX2-LABEL: ult_22_v8i32:
7525; AVX2:       # %bb.0:
7526; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7527; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
7528; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7529; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
7530; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
7531; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
7532; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
7533; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
7534; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7535; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7536; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7537; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7538; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7539; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7540; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]
7541; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7542; AVX2-NEXT:    retq
7543;
7544; AVX512VPOPCNTDQ-LABEL: ult_22_v8i32:
7545; AVX512VPOPCNTDQ:       # %bb.0:
7546; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7547; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7548; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]
7549; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7550; AVX512VPOPCNTDQ-NEXT:    retq
7551;
7552; AVX512VPOPCNTDQVL-LABEL: ult_22_v8i32:
7553; AVX512VPOPCNTDQVL:       # %bb.0:
7554; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
7555; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7556; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7557; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7558; AVX512VPOPCNTDQVL-NEXT:    retq
7559;
7560; BITALG_NOVLX-LABEL: ult_22_v8i32:
7561; BITALG_NOVLX:       # %bb.0:
7562; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7563; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7564; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7565; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7566; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7567; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7568; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7569; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7570; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]
7571; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7572; BITALG_NOVLX-NEXT:    retq
7573;
7574; BITALG-LABEL: ult_22_v8i32:
7575; BITALG:       # %bb.0:
7576; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
7577; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7578; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7579; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7580; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7581; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7582; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7583; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7584; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7585; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7586; BITALG-NEXT:    retq
7587  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
7588  %3 = icmp ult <8 x i32> %2, <i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22>
7589  %4 = sext <8 x i1> %3 to <8 x i32>
7590  ret <8 x i32> %4
7591}
7592
7593define <8 x i32> @ugt_22_v8i32(<8 x i32> %0) {
7594; AVX1-LABEL: ugt_22_v8i32:
7595; AVX1:       # %bb.0:
7596; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7597; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7598; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7599; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7600; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
7601; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
7602; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
7603; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
7604; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
7605; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
7606; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
7607; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
7608; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
7609; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
7610; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7611; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
7612; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
7613; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7614; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7615; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7616; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
7617; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
7618; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
7619; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7620; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
7621; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
7622; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [22,22,22,22]
7623; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7624; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
7625; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
7626; AVX1-NEXT:    retq
7627;
7628; AVX2-LABEL: ugt_22_v8i32:
7629; AVX2:       # %bb.0:
7630; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7631; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
7632; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7633; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
7634; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
7635; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
7636; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
7637; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
7638; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7639; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7640; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7641; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7642; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7643; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7644; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]
7645; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7646; AVX2-NEXT:    retq
7647;
7648; AVX512VPOPCNTDQ-LABEL: ugt_22_v8i32:
7649; AVX512VPOPCNTDQ:       # %bb.0:
7650; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7651; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7652; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]
7653; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7654; AVX512VPOPCNTDQ-NEXT:    retq
7655;
7656; AVX512VPOPCNTDQVL-LABEL: ugt_22_v8i32:
7657; AVX512VPOPCNTDQVL:       # %bb.0:
7658; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
7659; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7660; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7661; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7662; AVX512VPOPCNTDQVL-NEXT:    retq
7663;
7664; BITALG_NOVLX-LABEL: ugt_22_v8i32:
7665; BITALG_NOVLX:       # %bb.0:
7666; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7667; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7668; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7669; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7670; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7671; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7672; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7673; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7674; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]
7675; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7676; BITALG_NOVLX-NEXT:    retq
7677;
7678; BITALG-LABEL: ugt_22_v8i32:
7679; BITALG:       # %bb.0:
7680; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
7681; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7682; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7683; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7684; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7685; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7686; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7687; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7688; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7689; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7690; BITALG-NEXT:    retq
7691  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
7692  %3 = icmp ugt <8 x i32> %2, <i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22>
7693  %4 = sext <8 x i1> %3 to <8 x i32>
7694  ret <8 x i32> %4
7695}
7696
7697define <8 x i32> @ult_23_v8i32(<8 x i32> %0) {
7698; AVX1-LABEL: ult_23_v8i32:
7699; AVX1:       # %bb.0:
7700; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7701; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7702; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7703; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7704; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
7705; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
7706; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
7707; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
7708; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
7709; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
7710; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
7711; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
7712; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
7713; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
7714; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7715; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
7716; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
7717; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7718; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7719; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7720; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
7721; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
7722; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
7723; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7724; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
7725; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
7726; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [23,23,23,23]
7727; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7728; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
7729; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
7730; AVX1-NEXT:    retq
7731;
7732; AVX2-LABEL: ult_23_v8i32:
7733; AVX2:       # %bb.0:
7734; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7735; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
7736; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7737; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
7738; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
7739; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
7740; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
7741; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
7742; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7743; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7744; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7745; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7746; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7747; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7748; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]
7749; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7750; AVX2-NEXT:    retq
7751;
7752; AVX512VPOPCNTDQ-LABEL: ult_23_v8i32:
7753; AVX512VPOPCNTDQ:       # %bb.0:
7754; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7755; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7756; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]
7757; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7758; AVX512VPOPCNTDQ-NEXT:    retq
7759;
7760; AVX512VPOPCNTDQVL-LABEL: ult_23_v8i32:
7761; AVX512VPOPCNTDQVL:       # %bb.0:
7762; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
7763; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7764; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7765; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7766; AVX512VPOPCNTDQVL-NEXT:    retq
7767;
7768; BITALG_NOVLX-LABEL: ult_23_v8i32:
7769; BITALG_NOVLX:       # %bb.0:
7770; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7771; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7772; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7773; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7774; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7775; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7776; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7777; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7778; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]
7779; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7780; BITALG_NOVLX-NEXT:    retq
7781;
7782; BITALG-LABEL: ult_23_v8i32:
7783; BITALG:       # %bb.0:
7784; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
7785; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7786; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7787; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7788; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7789; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7790; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7791; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7792; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7793; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7794; BITALG-NEXT:    retq
7795  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
7796  %3 = icmp ult <8 x i32> %2, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23>
7797  %4 = sext <8 x i1> %3 to <8 x i32>
7798  ret <8 x i32> %4
7799}
7800
7801define <8 x i32> @ugt_23_v8i32(<8 x i32> %0) {
7802; AVX1-LABEL: ugt_23_v8i32:
7803; AVX1:       # %bb.0:
7804; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7805; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7806; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7807; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7808; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
7809; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
7810; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
7811; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
7812; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
7813; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
7814; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
7815; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
7816; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
7817; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
7818; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7819; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
7820; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
7821; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7822; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7823; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7824; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
7825; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
7826; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
7827; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7828; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
7829; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
7830; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [23,23,23,23]
7831; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7832; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
7833; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
7834; AVX1-NEXT:    retq
7835;
7836; AVX2-LABEL: ugt_23_v8i32:
7837; AVX2:       # %bb.0:
7838; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7839; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
7840; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7841; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
7842; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
7843; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
7844; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
7845; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
7846; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7847; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7848; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7849; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7850; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7851; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7852; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]
7853; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7854; AVX2-NEXT:    retq
7855;
7856; AVX512VPOPCNTDQ-LABEL: ugt_23_v8i32:
7857; AVX512VPOPCNTDQ:       # %bb.0:
7858; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7859; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7860; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]
7861; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7862; AVX512VPOPCNTDQ-NEXT:    retq
7863;
7864; AVX512VPOPCNTDQVL-LABEL: ugt_23_v8i32:
7865; AVX512VPOPCNTDQVL:       # %bb.0:
7866; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
7867; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7868; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7869; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7870; AVX512VPOPCNTDQVL-NEXT:    retq
7871;
7872; BITALG_NOVLX-LABEL: ugt_23_v8i32:
7873; BITALG_NOVLX:       # %bb.0:
7874; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7875; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7876; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7877; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7878; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7879; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7880; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7881; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7882; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]
7883; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
7884; BITALG_NOVLX-NEXT:    retq
7885;
7886; BITALG-LABEL: ugt_23_v8i32:
7887; BITALG:       # %bb.0:
7888; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
7889; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7890; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7891; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7892; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7893; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7894; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7895; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7896; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7897; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7898; BITALG-NEXT:    retq
7899  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
7900  %3 = icmp ugt <8 x i32> %2, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23>
7901  %4 = sext <8 x i1> %3 to <8 x i32>
7902  ret <8 x i32> %4
7903}
7904
7905define <8 x i32> @ult_24_v8i32(<8 x i32> %0) {
7906; AVX1-LABEL: ult_24_v8i32:
7907; AVX1:       # %bb.0:
7908; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7909; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7910; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7911; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7912; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
7913; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
7914; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
7915; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
7916; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
7917; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
7918; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
7919; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
7920; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
7921; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
7922; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
7923; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
7924; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
7925; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7926; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7927; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7928; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
7929; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
7930; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
7931; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7932; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
7933; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
7934; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [24,24,24,24]
7935; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7936; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
7937; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
7938; AVX1-NEXT:    retq
7939;
7940; AVX2-LABEL: ult_24_v8i32:
7941; AVX2:       # %bb.0:
7942; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7943; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
7944; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7945; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
7946; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
7947; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
7948; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
7949; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
7950; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7951; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7952; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7953; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7954; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7955; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7956; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]
7957; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7958; AVX2-NEXT:    retq
7959;
7960; AVX512VPOPCNTDQ-LABEL: ult_24_v8i32:
7961; AVX512VPOPCNTDQ:       # %bb.0:
7962; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7963; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7964; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]
7965; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7966; AVX512VPOPCNTDQ-NEXT:    retq
7967;
7968; AVX512VPOPCNTDQVL-LABEL: ult_24_v8i32:
7969; AVX512VPOPCNTDQVL:       # %bb.0:
7970; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
7971; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
7972; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
7973; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
7974; AVX512VPOPCNTDQVL-NEXT:    retq
7975;
7976; BITALG_NOVLX-LABEL: ult_24_v8i32:
7977; BITALG_NOVLX:       # %bb.0:
7978; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7979; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7980; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7981; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7982; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7983; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7984; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7985; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7986; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]
7987; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
7988; BITALG_NOVLX-NEXT:    retq
7989;
7990; BITALG-LABEL: ult_24_v8i32:
7991; BITALG:       # %bb.0:
7992; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
7993; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7994; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
7995; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
7996; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
7997; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
7998; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
7999; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8000; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8001; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8002; BITALG-NEXT:    retq
8003  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
8004  %3 = icmp ult <8 x i32> %2, <i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24>
8005  %4 = sext <8 x i1> %3 to <8 x i32>
8006  ret <8 x i32> %4
8007}
8008
8009define <8 x i32> @ugt_24_v8i32(<8 x i32> %0) {
8010; AVX1-LABEL: ugt_24_v8i32:
8011; AVX1:       # %bb.0:
8012; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8013; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8014; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8015; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8016; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
8017; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
8018; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
8019; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
8020; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
8021; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
8022; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
8023; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
8024; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
8025; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
8026; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
8027; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
8028; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
8029; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8030; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8031; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8032; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
8033; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
8034; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
8035; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8036; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
8037; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
8038; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [24,24,24,24]
8039; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8040; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
8041; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
8042; AVX1-NEXT:    retq
8043;
8044; AVX2-LABEL: ugt_24_v8i32:
8045; AVX2:       # %bb.0:
8046; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8047; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
8048; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8049; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
8050; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
8051; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
8052; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
8053; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
8054; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8055; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8056; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8057; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8058; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8059; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8060; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]
8061; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8062; AVX2-NEXT:    retq
8063;
8064; AVX512VPOPCNTDQ-LABEL: ugt_24_v8i32:
8065; AVX512VPOPCNTDQ:       # %bb.0:
8066; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8067; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8068; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]
8069; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8070; AVX512VPOPCNTDQ-NEXT:    retq
8071;
8072; AVX512VPOPCNTDQVL-LABEL: ugt_24_v8i32:
8073; AVX512VPOPCNTDQVL:       # %bb.0:
8074; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
8075; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8076; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8077; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8078; AVX512VPOPCNTDQVL-NEXT:    retq
8079;
8080; BITALG_NOVLX-LABEL: ugt_24_v8i32:
8081; BITALG_NOVLX:       # %bb.0:
8082; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8083; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8084; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8085; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8086; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8087; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8088; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8089; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8090; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]
8091; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8092; BITALG_NOVLX-NEXT:    retq
8093;
8094; BITALG-LABEL: ugt_24_v8i32:
8095; BITALG:       # %bb.0:
8096; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
8097; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8098; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8099; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8100; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8101; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8102; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8103; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8104; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8105; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8106; BITALG-NEXT:    retq
8107  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
8108  %3 = icmp ugt <8 x i32> %2, <i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24>
8109  %4 = sext <8 x i1> %3 to <8 x i32>
8110  ret <8 x i32> %4
8111}
8112
8113define <8 x i32> @ult_25_v8i32(<8 x i32> %0) {
8114; AVX1-LABEL: ult_25_v8i32:
8115; AVX1:       # %bb.0:
8116; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8117; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8118; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8119; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8120; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
8121; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
8122; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
8123; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
8124; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
8125; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
8126; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
8127; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
8128; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
8129; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
8130; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
8131; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
8132; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
8133; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8134; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8135; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8136; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
8137; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
8138; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
8139; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8140; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
8141; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
8142; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [25,25,25,25]
8143; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8144; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
8145; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
8146; AVX1-NEXT:    retq
8147;
8148; AVX2-LABEL: ult_25_v8i32:
8149; AVX2:       # %bb.0:
8150; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8151; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
8152; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8153; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
8154; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
8155; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
8156; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
8157; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
8158; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8159; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8160; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8161; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8162; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8163; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8164; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]
8165; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8166; AVX2-NEXT:    retq
8167;
8168; AVX512VPOPCNTDQ-LABEL: ult_25_v8i32:
8169; AVX512VPOPCNTDQ:       # %bb.0:
8170; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8171; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8172; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]
8173; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8174; AVX512VPOPCNTDQ-NEXT:    retq
8175;
8176; AVX512VPOPCNTDQVL-LABEL: ult_25_v8i32:
8177; AVX512VPOPCNTDQVL:       # %bb.0:
8178; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
8179; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8180; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8181; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8182; AVX512VPOPCNTDQVL-NEXT:    retq
8183;
8184; BITALG_NOVLX-LABEL: ult_25_v8i32:
8185; BITALG_NOVLX:       # %bb.0:
8186; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8187; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8188; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8189; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8190; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8191; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8192; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8193; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8194; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]
8195; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8196; BITALG_NOVLX-NEXT:    retq
8197;
8198; BITALG-LABEL: ult_25_v8i32:
8199; BITALG:       # %bb.0:
8200; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
8201; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8202; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8203; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8204; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8205; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8206; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8207; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8208; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8209; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8210; BITALG-NEXT:    retq
8211  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
8212  %3 = icmp ult <8 x i32> %2, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>
8213  %4 = sext <8 x i1> %3 to <8 x i32>
8214  ret <8 x i32> %4
8215}
8216
8217define <8 x i32> @ugt_25_v8i32(<8 x i32> %0) {
8218; AVX1-LABEL: ugt_25_v8i32:
8219; AVX1:       # %bb.0:
8220; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8221; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8222; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8223; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8224; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
8225; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
8226; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
8227; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
8228; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
8229; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
8230; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
8231; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
8232; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
8233; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
8234; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
8235; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
8236; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
8237; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8238; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8239; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8240; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
8241; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
8242; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
8243; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8244; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
8245; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
8246; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [25,25,25,25]
8247; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8248; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
8249; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
8250; AVX1-NEXT:    retq
8251;
8252; AVX2-LABEL: ugt_25_v8i32:
8253; AVX2:       # %bb.0:
8254; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8255; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
8256; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8257; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
8258; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
8259; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
8260; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
8261; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
8262; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8263; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8264; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8265; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8266; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8267; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8268; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]
8269; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8270; AVX2-NEXT:    retq
8271;
8272; AVX512VPOPCNTDQ-LABEL: ugt_25_v8i32:
8273; AVX512VPOPCNTDQ:       # %bb.0:
8274; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8275; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8276; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]
8277; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8278; AVX512VPOPCNTDQ-NEXT:    retq
8279;
8280; AVX512VPOPCNTDQVL-LABEL: ugt_25_v8i32:
8281; AVX512VPOPCNTDQVL:       # %bb.0:
8282; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
8283; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8284; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8285; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8286; AVX512VPOPCNTDQVL-NEXT:    retq
8287;
8288; BITALG_NOVLX-LABEL: ugt_25_v8i32:
8289; BITALG_NOVLX:       # %bb.0:
8290; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8291; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8292; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8293; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8294; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8295; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8296; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8297; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8298; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]
8299; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8300; BITALG_NOVLX-NEXT:    retq
8301;
8302; BITALG-LABEL: ugt_25_v8i32:
8303; BITALG:       # %bb.0:
8304; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
8305; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8306; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8307; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8308; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8309; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8310; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8311; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8312; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8313; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8314; BITALG-NEXT:    retq
8315  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
8316  %3 = icmp ugt <8 x i32> %2, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>
8317  %4 = sext <8 x i1> %3 to <8 x i32>
8318  ret <8 x i32> %4
8319}
8320
8321define <8 x i32> @ult_26_v8i32(<8 x i32> %0) {
8322; AVX1-LABEL: ult_26_v8i32:
8323; AVX1:       # %bb.0:
8324; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8325; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8326; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8327; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8328; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
8329; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
8330; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
8331; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
8332; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
8333; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
8334; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
8335; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
8336; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
8337; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
8338; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
8339; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
8340; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
8341; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8342; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8343; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8344; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
8345; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
8346; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
8347; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8348; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
8349; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
8350; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [26,26,26,26]
8351; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8352; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
8353; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
8354; AVX1-NEXT:    retq
8355;
8356; AVX2-LABEL: ult_26_v8i32:
8357; AVX2:       # %bb.0:
8358; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8359; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
8360; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8361; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
8362; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
8363; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
8364; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
8365; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
8366; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8367; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8368; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8369; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8370; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8371; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8372; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]
8373; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8374; AVX2-NEXT:    retq
8375;
8376; AVX512VPOPCNTDQ-LABEL: ult_26_v8i32:
8377; AVX512VPOPCNTDQ:       # %bb.0:
8378; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8379; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8380; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]
8381; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8382; AVX512VPOPCNTDQ-NEXT:    retq
8383;
8384; AVX512VPOPCNTDQVL-LABEL: ult_26_v8i32:
8385; AVX512VPOPCNTDQVL:       # %bb.0:
8386; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
8387; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8388; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8389; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8390; AVX512VPOPCNTDQVL-NEXT:    retq
8391;
8392; BITALG_NOVLX-LABEL: ult_26_v8i32:
8393; BITALG_NOVLX:       # %bb.0:
8394; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8395; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8396; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8397; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8398; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8399; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8400; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8401; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8402; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]
8403; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8404; BITALG_NOVLX-NEXT:    retq
8405;
8406; BITALG-LABEL: ult_26_v8i32:
8407; BITALG:       # %bb.0:
8408; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
8409; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8410; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8411; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8412; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8413; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8414; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8415; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8416; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8417; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8418; BITALG-NEXT:    retq
8419  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
8420  %3 = icmp ult <8 x i32> %2, <i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26>
8421  %4 = sext <8 x i1> %3 to <8 x i32>
8422  ret <8 x i32> %4
8423}
8424
8425define <8 x i32> @ugt_26_v8i32(<8 x i32> %0) {
8426; AVX1-LABEL: ugt_26_v8i32:
8427; AVX1:       # %bb.0:
8428; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8429; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8430; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8431; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8432; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
8433; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
8434; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
8435; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
8436; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
8437; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
8438; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
8439; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
8440; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
8441; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
8442; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
8443; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
8444; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
8445; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8446; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8447; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8448; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
8449; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
8450; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
8451; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8452; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
8453; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
8454; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [26,26,26,26]
8455; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8456; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
8457; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
8458; AVX1-NEXT:    retq
8459;
8460; AVX2-LABEL: ugt_26_v8i32:
8461; AVX2:       # %bb.0:
8462; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8463; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
8464; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8465; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
8466; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
8467; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
8468; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
8469; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
8470; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8471; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8472; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8473; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8474; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8475; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8476; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]
8477; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8478; AVX2-NEXT:    retq
8479;
8480; AVX512VPOPCNTDQ-LABEL: ugt_26_v8i32:
8481; AVX512VPOPCNTDQ:       # %bb.0:
8482; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8483; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8484; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]
8485; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8486; AVX512VPOPCNTDQ-NEXT:    retq
8487;
8488; AVX512VPOPCNTDQVL-LABEL: ugt_26_v8i32:
8489; AVX512VPOPCNTDQVL:       # %bb.0:
8490; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
8491; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8492; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8493; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8494; AVX512VPOPCNTDQVL-NEXT:    retq
8495;
8496; BITALG_NOVLX-LABEL: ugt_26_v8i32:
8497; BITALG_NOVLX:       # %bb.0:
8498; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8499; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8500; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8501; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8502; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8503; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8504; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8505; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8506; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]
8507; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8508; BITALG_NOVLX-NEXT:    retq
8509;
8510; BITALG-LABEL: ugt_26_v8i32:
8511; BITALG:       # %bb.0:
8512; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
8513; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8514; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8515; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8516; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8517; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8518; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8519; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8520; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8521; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8522; BITALG-NEXT:    retq
8523  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
8524  %3 = icmp ugt <8 x i32> %2, <i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26>
8525  %4 = sext <8 x i1> %3 to <8 x i32>
8526  ret <8 x i32> %4
8527}
8528
8529define <8 x i32> @ult_27_v8i32(<8 x i32> %0) {
8530; AVX1-LABEL: ult_27_v8i32:
8531; AVX1:       # %bb.0:
8532; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8533; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8534; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8535; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8536; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
8537; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
8538; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
8539; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
8540; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
8541; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
8542; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
8543; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
8544; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
8545; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
8546; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
8547; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
8548; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
8549; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8550; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8551; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8552; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
8553; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
8554; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
8555; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8556; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
8557; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
8558; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [27,27,27,27]
8559; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8560; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
8561; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
8562; AVX1-NEXT:    retq
8563;
8564; AVX2-LABEL: ult_27_v8i32:
8565; AVX2:       # %bb.0:
8566; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8567; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
8568; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8569; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
8570; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
8571; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
8572; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
8573; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
8574; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8575; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8576; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8577; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8578; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8579; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8580; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]
8581; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8582; AVX2-NEXT:    retq
8583;
8584; AVX512VPOPCNTDQ-LABEL: ult_27_v8i32:
8585; AVX512VPOPCNTDQ:       # %bb.0:
8586; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8587; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8588; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]
8589; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8590; AVX512VPOPCNTDQ-NEXT:    retq
8591;
8592; AVX512VPOPCNTDQVL-LABEL: ult_27_v8i32:
8593; AVX512VPOPCNTDQVL:       # %bb.0:
8594; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
8595; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8596; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8597; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8598; AVX512VPOPCNTDQVL-NEXT:    retq
8599;
8600; BITALG_NOVLX-LABEL: ult_27_v8i32:
8601; BITALG_NOVLX:       # %bb.0:
8602; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8603; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8604; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8605; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8606; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8607; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8608; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8609; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8610; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]
8611; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8612; BITALG_NOVLX-NEXT:    retq
8613;
8614; BITALG-LABEL: ult_27_v8i32:
8615; BITALG:       # %bb.0:
8616; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
8617; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8618; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8619; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8620; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8621; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8622; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8623; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8624; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8625; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8626; BITALG-NEXT:    retq
8627  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
8628  %3 = icmp ult <8 x i32> %2, <i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27>
8629  %4 = sext <8 x i1> %3 to <8 x i32>
8630  ret <8 x i32> %4
8631}
8632
8633define <8 x i32> @ugt_27_v8i32(<8 x i32> %0) {
8634; AVX1-LABEL: ugt_27_v8i32:
8635; AVX1:       # %bb.0:
8636; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8637; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8638; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8639; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8640; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
8641; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
8642; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
8643; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
8644; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
8645; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
8646; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
8647; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
8648; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
8649; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
8650; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
8651; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
8652; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
8653; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8654; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8655; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8656; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
8657; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
8658; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
8659; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8660; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
8661; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
8662; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [27,27,27,27]
8663; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8664; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
8665; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
8666; AVX1-NEXT:    retq
8667;
8668; AVX2-LABEL: ugt_27_v8i32:
8669; AVX2:       # %bb.0:
8670; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8671; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
8672; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8673; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
8674; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
8675; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
8676; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
8677; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
8678; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8679; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8680; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8681; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8682; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8683; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8684; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]
8685; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8686; AVX2-NEXT:    retq
8687;
8688; AVX512VPOPCNTDQ-LABEL: ugt_27_v8i32:
8689; AVX512VPOPCNTDQ:       # %bb.0:
8690; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8691; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8692; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]
8693; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8694; AVX512VPOPCNTDQ-NEXT:    retq
8695;
8696; AVX512VPOPCNTDQVL-LABEL: ugt_27_v8i32:
8697; AVX512VPOPCNTDQVL:       # %bb.0:
8698; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
8699; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8700; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8701; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8702; AVX512VPOPCNTDQVL-NEXT:    retq
8703;
8704; BITALG_NOVLX-LABEL: ugt_27_v8i32:
8705; BITALG_NOVLX:       # %bb.0:
8706; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8707; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8708; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8709; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8710; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8711; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8712; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8713; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8714; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]
8715; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8716; BITALG_NOVLX-NEXT:    retq
8717;
8718; BITALG-LABEL: ugt_27_v8i32:
8719; BITALG:       # %bb.0:
8720; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
8721; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8722; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8723; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8724; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8725; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8726; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8727; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8728; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8729; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8730; BITALG-NEXT:    retq
8731  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
8732  %3 = icmp ugt <8 x i32> %2, <i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27>
8733  %4 = sext <8 x i1> %3 to <8 x i32>
8734  ret <8 x i32> %4
8735}
8736
8737define <8 x i32> @ult_28_v8i32(<8 x i32> %0) {
8738; AVX1-LABEL: ult_28_v8i32:
8739; AVX1:       # %bb.0:
8740; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8741; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8742; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8743; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8744; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
8745; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
8746; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
8747; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
8748; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
8749; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
8750; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
8751; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
8752; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
8753; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
8754; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
8755; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
8756; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
8757; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8758; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8759; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8760; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
8761; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
8762; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
8763; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8764; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
8765; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
8766; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [28,28,28,28]
8767; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8768; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
8769; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
8770; AVX1-NEXT:    retq
8771;
8772; AVX2-LABEL: ult_28_v8i32:
8773; AVX2:       # %bb.0:
8774; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8775; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
8776; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8777; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
8778; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
8779; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
8780; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
8781; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
8782; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8783; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8784; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8785; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8786; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8787; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8788; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]
8789; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8790; AVX2-NEXT:    retq
8791;
8792; AVX512VPOPCNTDQ-LABEL: ult_28_v8i32:
8793; AVX512VPOPCNTDQ:       # %bb.0:
8794; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8795; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8796; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]
8797; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8798; AVX512VPOPCNTDQ-NEXT:    retq
8799;
8800; AVX512VPOPCNTDQVL-LABEL: ult_28_v8i32:
8801; AVX512VPOPCNTDQVL:       # %bb.0:
8802; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
8803; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8804; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8805; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8806; AVX512VPOPCNTDQVL-NEXT:    retq
8807;
8808; BITALG_NOVLX-LABEL: ult_28_v8i32:
8809; BITALG_NOVLX:       # %bb.0:
8810; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8811; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8812; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8813; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8814; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8815; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8816; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8817; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8818; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]
8819; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8820; BITALG_NOVLX-NEXT:    retq
8821;
8822; BITALG-LABEL: ult_28_v8i32:
8823; BITALG:       # %bb.0:
8824; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
8825; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8826; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8827; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8828; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8829; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8830; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8831; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8832; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8833; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8834; BITALG-NEXT:    retq
8835  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
8836  %3 = icmp ult <8 x i32> %2, <i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28>
8837  %4 = sext <8 x i1> %3 to <8 x i32>
8838  ret <8 x i32> %4
8839}
8840
8841define <8 x i32> @ugt_28_v8i32(<8 x i32> %0) {
8842; AVX1-LABEL: ugt_28_v8i32:
8843; AVX1:       # %bb.0:
8844; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8845; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8846; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8847; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8848; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
8849; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
8850; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
8851; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
8852; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
8853; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
8854; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
8855; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
8856; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
8857; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
8858; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
8859; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
8860; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
8861; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8862; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8863; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8864; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
8865; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
8866; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
8867; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8868; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
8869; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
8870; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [28,28,28,28]
8871; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8872; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
8873; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
8874; AVX1-NEXT:    retq
8875;
8876; AVX2-LABEL: ugt_28_v8i32:
8877; AVX2:       # %bb.0:
8878; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8879; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
8880; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8881; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
8882; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
8883; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
8884; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
8885; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
8886; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8887; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8888; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8889; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8890; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8891; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8892; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]
8893; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8894; AVX2-NEXT:    retq
8895;
8896; AVX512VPOPCNTDQ-LABEL: ugt_28_v8i32:
8897; AVX512VPOPCNTDQ:       # %bb.0:
8898; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8899; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8900; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]
8901; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8902; AVX512VPOPCNTDQ-NEXT:    retq
8903;
8904; AVX512VPOPCNTDQVL-LABEL: ugt_28_v8i32:
8905; AVX512VPOPCNTDQVL:       # %bb.0:
8906; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
8907; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8908; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8909; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8910; AVX512VPOPCNTDQVL-NEXT:    retq
8911;
8912; BITALG_NOVLX-LABEL: ugt_28_v8i32:
8913; BITALG_NOVLX:       # %bb.0:
8914; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8915; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8916; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8917; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8918; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8919; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8920; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8921; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8922; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]
8923; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
8924; BITALG_NOVLX-NEXT:    retq
8925;
8926; BITALG-LABEL: ugt_28_v8i32:
8927; BITALG:       # %bb.0:
8928; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
8929; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8930; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8931; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8932; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8933; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8934; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8935; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
8936; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
8937; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
8938; BITALG-NEXT:    retq
8939  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
8940  %3 = icmp ugt <8 x i32> %2, <i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28>
8941  %4 = sext <8 x i1> %3 to <8 x i32>
8942  ret <8 x i32> %4
8943}
8944
8945define <8 x i32> @ult_29_v8i32(<8 x i32> %0) {
8946; AVX1-LABEL: ult_29_v8i32:
8947; AVX1:       # %bb.0:
8948; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8949; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8950; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8951; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8952; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
8953; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
8954; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
8955; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
8956; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
8957; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
8958; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
8959; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
8960; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
8961; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
8962; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
8963; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
8964; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
8965; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8966; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8967; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8968; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
8969; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
8970; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
8971; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8972; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
8973; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
8974; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [29,29,29,29]
8975; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8976; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
8977; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
8978; AVX1-NEXT:    retq
8979;
8980; AVX2-LABEL: ult_29_v8i32:
8981; AVX2:       # %bb.0:
8982; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8983; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
8984; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8985; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
8986; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
8987; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
8988; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
8989; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
8990; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8991; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
8992; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
8993; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
8994; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
8995; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
8996; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]
8997; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
8998; AVX2-NEXT:    retq
8999;
9000; AVX512VPOPCNTDQ-LABEL: ult_29_v8i32:
9001; AVX512VPOPCNTDQ:       # %bb.0:
9002; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9003; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9004; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]
9005; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
9006; AVX512VPOPCNTDQ-NEXT:    retq
9007;
9008; AVX512VPOPCNTDQVL-LABEL: ult_29_v8i32:
9009; AVX512VPOPCNTDQVL:       # %bb.0:
9010; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
9011; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
9012; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9013; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
9014; AVX512VPOPCNTDQVL-NEXT:    retq
9015;
9016; BITALG_NOVLX-LABEL: ult_29_v8i32:
9017; BITALG_NOVLX:       # %bb.0:
9018; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9019; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9020; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9021; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9022; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9023; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9024; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9025; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9026; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]
9027; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
9028; BITALG_NOVLX-NEXT:    retq
9029;
9030; BITALG-LABEL: ult_29_v8i32:
9031; BITALG:       # %bb.0:
9032; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
9033; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9034; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9035; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9036; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9037; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9038; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9039; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
9040; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9041; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
9042; BITALG-NEXT:    retq
9043  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
9044  %3 = icmp ult <8 x i32> %2, <i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29>
9045  %4 = sext <8 x i1> %3 to <8 x i32>
9046  ret <8 x i32> %4
9047}
9048
9049define <8 x i32> @ugt_29_v8i32(<8 x i32> %0) {
9050; AVX1-LABEL: ugt_29_v8i32:
9051; AVX1:       # %bb.0:
9052; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9053; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9054; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9055; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9056; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
9057; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
9058; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
9059; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
9060; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
9061; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
9062; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
9063; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
9064; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
9065; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
9066; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
9067; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
9068; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
9069; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9070; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9071; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9072; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
9073; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
9074; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
9075; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9076; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
9077; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
9078; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [29,29,29,29]
9079; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9080; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
9081; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
9082; AVX1-NEXT:    retq
9083;
9084; AVX2-LABEL: ugt_29_v8i32:
9085; AVX2:       # %bb.0:
9086; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9087; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
9088; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9089; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
9090; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
9091; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
9092; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
9093; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
9094; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9095; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9096; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9097; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9098; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9099; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9100; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]
9101; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
9102; AVX2-NEXT:    retq
9103;
9104; AVX512VPOPCNTDQ-LABEL: ugt_29_v8i32:
9105; AVX512VPOPCNTDQ:       # %bb.0:
9106; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9107; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9108; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]
9109; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
9110; AVX512VPOPCNTDQ-NEXT:    retq
9111;
9112; AVX512VPOPCNTDQVL-LABEL: ugt_29_v8i32:
9113; AVX512VPOPCNTDQVL:       # %bb.0:
9114; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
9115; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
9116; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9117; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
9118; AVX512VPOPCNTDQVL-NEXT:    retq
9119;
9120; BITALG_NOVLX-LABEL: ugt_29_v8i32:
9121; BITALG_NOVLX:       # %bb.0:
9122; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9123; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9124; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9125; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9126; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9127; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9128; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9129; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9130; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]
9131; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
9132; BITALG_NOVLX-NEXT:    retq
9133;
9134; BITALG-LABEL: ugt_29_v8i32:
9135; BITALG:       # %bb.0:
9136; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
9137; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9138; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9139; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9140; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9141; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9142; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9143; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
9144; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9145; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
9146; BITALG-NEXT:    retq
9147  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
9148  %3 = icmp ugt <8 x i32> %2, <i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29>
9149  %4 = sext <8 x i1> %3 to <8 x i32>
9150  ret <8 x i32> %4
9151}
9152
9153define <8 x i32> @ult_30_v8i32(<8 x i32> %0) {
9154; AVX1-LABEL: ult_30_v8i32:
9155; AVX1:       # %bb.0:
9156; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9157; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9158; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9159; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9160; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
9161; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
9162; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
9163; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
9164; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
9165; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
9166; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
9167; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
9168; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
9169; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
9170; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
9171; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
9172; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
9173; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9174; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9175; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9176; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
9177; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
9178; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
9179; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9180; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
9181; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
9182; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [30,30,30,30]
9183; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9184; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
9185; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
9186; AVX1-NEXT:    retq
9187;
9188; AVX2-LABEL: ult_30_v8i32:
9189; AVX2:       # %bb.0:
9190; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9191; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
9192; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9193; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
9194; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
9195; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
9196; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
9197; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
9198; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9199; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9200; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9201; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9202; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9203; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9204; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]
9205; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
9206; AVX2-NEXT:    retq
9207;
9208; AVX512VPOPCNTDQ-LABEL: ult_30_v8i32:
9209; AVX512VPOPCNTDQ:       # %bb.0:
9210; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9211; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9212; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]
9213; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
9214; AVX512VPOPCNTDQ-NEXT:    retq
9215;
9216; AVX512VPOPCNTDQVL-LABEL: ult_30_v8i32:
9217; AVX512VPOPCNTDQVL:       # %bb.0:
9218; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
9219; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
9220; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9221; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
9222; AVX512VPOPCNTDQVL-NEXT:    retq
9223;
9224; BITALG_NOVLX-LABEL: ult_30_v8i32:
9225; BITALG_NOVLX:       # %bb.0:
9226; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9227; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9228; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9229; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9230; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9231; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9232; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9233; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9234; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]
9235; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
9236; BITALG_NOVLX-NEXT:    retq
9237;
9238; BITALG-LABEL: ult_30_v8i32:
9239; BITALG:       # %bb.0:
9240; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
9241; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9242; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9243; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9244; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9245; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9246; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9247; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
9248; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9249; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
9250; BITALG-NEXT:    retq
9251  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
9252  %3 = icmp ult <8 x i32> %2, <i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30>
9253  %4 = sext <8 x i1> %3 to <8 x i32>
9254  ret <8 x i32> %4
9255}
9256
9257define <8 x i32> @ugt_30_v8i32(<8 x i32> %0) {
9258; AVX1-LABEL: ugt_30_v8i32:
9259; AVX1:       # %bb.0:
9260; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9261; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9262; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9263; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9264; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
9265; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
9266; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
9267; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
9268; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
9269; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
9270; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
9271; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
9272; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
9273; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
9274; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
9275; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
9276; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
9277; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9278; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9279; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9280; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
9281; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
9282; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
9283; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9284; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
9285; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
9286; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [30,30,30,30]
9287; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9288; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1
9289; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
9290; AVX1-NEXT:    retq
9291;
9292; AVX2-LABEL: ugt_30_v8i32:
9293; AVX2:       # %bb.0:
9294; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9295; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
9296; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9297; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
9298; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
9299; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
9300; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
9301; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
9302; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9303; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9304; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9305; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9306; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9307; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9308; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]
9309; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
9310; AVX2-NEXT:    retq
9311;
9312; AVX512VPOPCNTDQ-LABEL: ugt_30_v8i32:
9313; AVX512VPOPCNTDQ:       # %bb.0:
9314; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9315; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9316; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]
9317; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
9318; AVX512VPOPCNTDQ-NEXT:    retq
9319;
9320; AVX512VPOPCNTDQVL-LABEL: ugt_30_v8i32:
9321; AVX512VPOPCNTDQVL:       # %bb.0:
9322; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
9323; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
9324; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9325; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
9326; AVX512VPOPCNTDQVL-NEXT:    retq
9327;
9328; BITALG_NOVLX-LABEL: ugt_30_v8i32:
9329; BITALG_NOVLX:       # %bb.0:
9330; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9331; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9332; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9333; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9334; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9335; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9336; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9337; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9338; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]
9339; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
9340; BITALG_NOVLX-NEXT:    retq
9341;
9342; BITALG-LABEL: ugt_30_v8i32:
9343; BITALG:       # %bb.0:
9344; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
9345; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9346; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9347; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9348; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9349; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9350; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9351; BITALG-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
9352; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9353; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
9354; BITALG-NEXT:    retq
9355  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
9356  %3 = icmp ugt <8 x i32> %2, <i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30>
9357  %4 = sext <8 x i1> %3 to <8 x i32>
9358  ret <8 x i32> %4
9359}
9360
9361define <8 x i32> @ult_31_v8i32(<8 x i32> %0) {
9362; AVX1-LABEL: ult_31_v8i32:
9363; AVX1:       # %bb.0:
9364; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9365; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9366; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9367; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9368; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
9369; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
9370; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
9371; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
9372; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
9373; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3]
9374; AVX1-NEXT:    vpsadbw %xmm4, %xmm5, %xmm5
9375; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero
9376; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
9377; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
9378; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
9379; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
9380; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
9381; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9382; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9383; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9384; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
9385; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
9386; AVX1-NEXT:    vpsadbw %xmm4, %xmm1, %xmm1
9387; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9388; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
9389; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
9390; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [31,31,31,31]
9391; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9392; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1
9393; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
9394; AVX1-NEXT:    retq
9395;
9396; AVX2-LABEL: ult_31_v8i32:
9397; AVX2:       # %bb.0:
9398; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9399; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
9400; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9401; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
9402; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
9403; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
9404; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
9405; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
9406; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9407; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9408; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9409; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9410; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9411; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9412; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31]
9413; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
9414; AVX2-NEXT:    retq
9415;
9416; AVX512VPOPCNTDQ-LABEL: ult_31_v8i32:
9417; AVX512VPOPCNTDQ:       # %bb.0:
9418; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9419; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9420; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31]
9421; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
9422; AVX512VPOPCNTDQ-NEXT:    retq
9423;
9424; AVX512VPOPCNTDQVL-LABEL: ult_31_v8i32:
9425; AVX512VPOPCNTDQVL:       # %bb.0:
9426; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
9427; AVX512VPOPCNTDQVL-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
9428; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9429; AVX512VPOPCNTDQVL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
9430; AVX512VPOPCNTDQVL-NEXT:    retq
9431;
9432; BITALG_NOVLX-LABEL: ult_31_v8i32:
9433; BITALG_NOVLX:       # %bb.0:
9434; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9435; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9436; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9437; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9438; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9439; BITALG_NOVLX-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9440; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9441; BITALG_NOVLX-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9442; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31]
9443; BITALG_NOVLX-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
9444; BITALG_NOVLX-NEXT:    retq
9445;
9446; BITALG-LABEL: ult_31_v8i32:
9447; BITALG:       # %bb.0:
9448; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
9449; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9450; BITALG-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
9451; BITALG-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
9452; BITALG-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
9453; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9454; BITALG-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
9455; BITALG-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
9456; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9457; BITALG-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
9458; BITALG-NEXT:    retq
9459  %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)
9460  %3 = icmp ult <8 x i32> %2, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>
9461  %4 = sext <8 x i1> %3 to <8 x i32>
9462  ret <8 x i32> %4
9463}
9464
9465define <4 x i64> @ugt_1_v4i64(<4 x i64> %0) {
9466; AVX1-LABEL: ugt_1_v4i64:
9467; AVX1:       # %bb.0:
9468; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
9469; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
9470; AVX1-NEXT:    vpaddq %xmm2, %xmm1, %xmm3
9471; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
9472; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
9473; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm1, %xmm1
9474; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
9475; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm4
9476; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
9477; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm0, %xmm0
9478; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
9479; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
9480; AVX1-NEXT:    retq
9481;
9482; AVX2-LABEL: ugt_1_v4i64:
9483; AVX2:       # %bb.0:
9484; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
9485; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm2
9486; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
9487; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
9488; AVX2-NEXT:    vpcmpeqq %ymm2, %ymm0, %ymm0
9489; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
9490; AVX2-NEXT:    retq
9491;
9492; AVX512VPOPCNTDQ-LABEL: ugt_1_v4i64:
9493; AVX512VPOPCNTDQ:       # %bb.0:
9494; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9495; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
9496; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]
9497; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
9498; AVX512VPOPCNTDQ-NEXT:    retq
9499;
9500; AVX512VPOPCNTDQVL-LABEL: ugt_1_v4i64:
9501; AVX512VPOPCNTDQVL:       # %bb.0:
9502; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
9503; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9504; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9505; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9506; AVX512VPOPCNTDQVL-NEXT:    retq
9507;
9508; BITALG_NOVLX-LABEL: ugt_1_v4i64:
9509; BITALG_NOVLX:       # %bb.0:
9510; BITALG_NOVLX-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
9511; BITALG_NOVLX-NEXT:    vpaddq %ymm1, %ymm0, %ymm1
9512; BITALG_NOVLX-NEXT:    vpand %ymm1, %ymm0, %ymm0
9513; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9514; BITALG_NOVLX-NEXT:    vpcmpeqq %ymm1, %ymm0, %ymm0
9515; BITALG_NOVLX-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
9516; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9517; BITALG_NOVLX-NEXT:    retq
9518;
9519; BITALG-LABEL: ugt_1_v4i64:
9520; BITALG:       # %bb.0:
9521; BITALG-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
9522; BITALG-NEXT:    vpaddq %ymm1, %ymm0, %ymm1
9523; BITALG-NEXT:    vpand %ymm1, %ymm0, %ymm0
9524; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9525; BITALG-NEXT:    vpcmpeqq %ymm1, %ymm0, %ymm0
9526; BITALG-NEXT:    vpternlogq $15, %ymm0, %ymm0, %ymm0
9527; BITALG-NEXT:    retq
9528  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
9529  %3 = icmp ugt <4 x i64> %2, <i64 1, i64 1, i64 1, i64 1>
9530  %4 = sext <4 x i1> %3 to <4 x i64>
9531  ret <4 x i64> %4
9532}
9533
9534define <4 x i64> @ult_2_v4i64(<4 x i64> %0) {
9535; AVX1-LABEL: ult_2_v4i64:
9536; AVX1:       # %bb.0:
9537; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
9538; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
9539; AVX1-NEXT:    vpaddq %xmm2, %xmm1, %xmm3
9540; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
9541; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
9542; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm1, %xmm1
9543; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm2
9544; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
9545; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm0, %xmm0
9546; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
9547; AVX1-NEXT:    retq
9548;
9549; AVX2-LABEL: ult_2_v4i64:
9550; AVX2:       # %bb.0:
9551; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
9552; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm1
9553; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
9554; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9555; AVX2-NEXT:    vpcmpeqq %ymm1, %ymm0, %ymm0
9556; AVX2-NEXT:    retq
9557;
9558; AVX512VPOPCNTDQ-LABEL: ult_2_v4i64:
9559; AVX512VPOPCNTDQ:       # %bb.0:
9560; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9561; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
9562; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]
9563; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
9564; AVX512VPOPCNTDQ-NEXT:    retq
9565;
9566; AVX512VPOPCNTDQVL-LABEL: ult_2_v4i64:
9567; AVX512VPOPCNTDQVL:       # %bb.0:
9568; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
9569; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9570; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9571; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9572; AVX512VPOPCNTDQVL-NEXT:    retq
9573;
9574; BITALG_NOVLX-LABEL: ult_2_v4i64:
9575; BITALG_NOVLX:       # %bb.0:
9576; BITALG_NOVLX-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
9577; BITALG_NOVLX-NEXT:    vpaddq %ymm1, %ymm0, %ymm1
9578; BITALG_NOVLX-NEXT:    vpand %ymm1, %ymm0, %ymm0
9579; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9580; BITALG_NOVLX-NEXT:    vpcmpeqq %ymm1, %ymm0, %ymm0
9581; BITALG_NOVLX-NEXT:    retq
9582;
9583; BITALG-LABEL: ult_2_v4i64:
9584; BITALG:       # %bb.0:
9585; BITALG-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
9586; BITALG-NEXT:    vpaddq %ymm1, %ymm0, %ymm1
9587; BITALG-NEXT:    vpand %ymm1, %ymm0, %ymm0
9588; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9589; BITALG-NEXT:    vpcmpeqq %ymm1, %ymm0, %ymm0
9590; BITALG-NEXT:    retq
9591  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
9592  %3 = icmp ult <4 x i64> %2, <i64 2, i64 2, i64 2, i64 2>
9593  %4 = sext <4 x i1> %3 to <4 x i64>
9594  ret <4 x i64> %4
9595}
9596
9597define <4 x i64> @ugt_2_v4i64(<4 x i64> %0) {
9598; AVX1-LABEL: ugt_2_v4i64:
9599; AVX1:       # %bb.0:
9600; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9601; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9602; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9603; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9604; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
9605; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
9606; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
9607; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
9608; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
9609; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
9610; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
9611; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
9612; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
9613; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9614; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9615; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9616; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
9617; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
9618; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [2,2]
9619; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
9620; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
9621; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
9622; AVX1-NEXT:    retq
9623;
9624; AVX2-LABEL: ugt_2_v4i64:
9625; AVX2:       # %bb.0:
9626; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9627; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
9628; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9629; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
9630; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
9631; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
9632; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
9633; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
9634; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9635; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9636; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]
9637; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
9638; AVX2-NEXT:    retq
9639;
9640; AVX512VPOPCNTDQ-LABEL: ugt_2_v4i64:
9641; AVX512VPOPCNTDQ:       # %bb.0:
9642; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9643; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
9644; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]
9645; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
9646; AVX512VPOPCNTDQ-NEXT:    retq
9647;
9648; AVX512VPOPCNTDQVL-LABEL: ugt_2_v4i64:
9649; AVX512VPOPCNTDQVL:       # %bb.0:
9650; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
9651; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9652; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9653; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9654; AVX512VPOPCNTDQVL-NEXT:    retq
9655;
9656; BITALG_NOVLX-LABEL: ugt_2_v4i64:
9657; BITALG_NOVLX:       # %bb.0:
9658; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9659; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9660; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9661; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9662; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]
9663; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
9664; BITALG_NOVLX-NEXT:    retq
9665;
9666; BITALG-LABEL: ugt_2_v4i64:
9667; BITALG:       # %bb.0:
9668; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
9669; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9670; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9671; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9672; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9673; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9674; BITALG-NEXT:    retq
9675  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
9676  %3 = icmp ugt <4 x i64> %2, <i64 2, i64 2, i64 2, i64 2>
9677  %4 = sext <4 x i1> %3 to <4 x i64>
9678  ret <4 x i64> %4
9679}
9680
9681define <4 x i64> @ult_3_v4i64(<4 x i64> %0) {
9682; AVX1-LABEL: ult_3_v4i64:
9683; AVX1:       # %bb.0:
9684; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9685; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9686; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9687; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9688; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
9689; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
9690; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
9691; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
9692; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
9693; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
9694; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
9695; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
9696; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
9697; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9698; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9699; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9700; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
9701; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
9702; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [3,3]
9703; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
9704; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
9705; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
9706; AVX1-NEXT:    retq
9707;
9708; AVX2-LABEL: ult_3_v4i64:
9709; AVX2:       # %bb.0:
9710; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9711; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
9712; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9713; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
9714; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
9715; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
9716; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
9717; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
9718; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9719; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9720; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]
9721; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
9722; AVX2-NEXT:    retq
9723;
9724; AVX512VPOPCNTDQ-LABEL: ult_3_v4i64:
9725; AVX512VPOPCNTDQ:       # %bb.0:
9726; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9727; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
9728; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]
9729; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
9730; AVX512VPOPCNTDQ-NEXT:    retq
9731;
9732; AVX512VPOPCNTDQVL-LABEL: ult_3_v4i64:
9733; AVX512VPOPCNTDQVL:       # %bb.0:
9734; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
9735; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9736; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9737; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9738; AVX512VPOPCNTDQVL-NEXT:    retq
9739;
9740; BITALG_NOVLX-LABEL: ult_3_v4i64:
9741; BITALG_NOVLX:       # %bb.0:
9742; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9743; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9744; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9745; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9746; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]
9747; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
9748; BITALG_NOVLX-NEXT:    retq
9749;
9750; BITALG-LABEL: ult_3_v4i64:
9751; BITALG:       # %bb.0:
9752; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
9753; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9754; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9755; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9756; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9757; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9758; BITALG-NEXT:    retq
9759  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
9760  %3 = icmp ult <4 x i64> %2, <i64 3, i64 3, i64 3, i64 3>
9761  %4 = sext <4 x i1> %3 to <4 x i64>
9762  ret <4 x i64> %4
9763}
9764
9765define <4 x i64> @ugt_3_v4i64(<4 x i64> %0) {
9766; AVX1-LABEL: ugt_3_v4i64:
9767; AVX1:       # %bb.0:
9768; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9769; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9770; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9771; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9772; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
9773; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
9774; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
9775; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
9776; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
9777; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
9778; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
9779; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
9780; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
9781; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9782; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9783; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9784; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
9785; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
9786; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [3,3]
9787; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
9788; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
9789; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
9790; AVX1-NEXT:    retq
9791;
9792; AVX2-LABEL: ugt_3_v4i64:
9793; AVX2:       # %bb.0:
9794; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9795; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
9796; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9797; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
9798; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
9799; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
9800; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
9801; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
9802; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9803; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9804; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]
9805; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
9806; AVX2-NEXT:    retq
9807;
9808; AVX512VPOPCNTDQ-LABEL: ugt_3_v4i64:
9809; AVX512VPOPCNTDQ:       # %bb.0:
9810; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9811; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
9812; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]
9813; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
9814; AVX512VPOPCNTDQ-NEXT:    retq
9815;
9816; AVX512VPOPCNTDQVL-LABEL: ugt_3_v4i64:
9817; AVX512VPOPCNTDQVL:       # %bb.0:
9818; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
9819; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9820; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9821; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9822; AVX512VPOPCNTDQVL-NEXT:    retq
9823;
9824; BITALG_NOVLX-LABEL: ugt_3_v4i64:
9825; BITALG_NOVLX:       # %bb.0:
9826; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9827; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9828; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9829; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9830; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]
9831; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
9832; BITALG_NOVLX-NEXT:    retq
9833;
9834; BITALG-LABEL: ugt_3_v4i64:
9835; BITALG:       # %bb.0:
9836; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
9837; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9838; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9839; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9840; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9841; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9842; BITALG-NEXT:    retq
9843  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
9844  %3 = icmp ugt <4 x i64> %2, <i64 3, i64 3, i64 3, i64 3>
9845  %4 = sext <4 x i1> %3 to <4 x i64>
9846  ret <4 x i64> %4
9847}
9848
9849define <4 x i64> @ult_4_v4i64(<4 x i64> %0) {
9850; AVX1-LABEL: ult_4_v4i64:
9851; AVX1:       # %bb.0:
9852; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9853; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9854; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9855; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9856; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
9857; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
9858; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
9859; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
9860; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
9861; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
9862; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
9863; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
9864; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
9865; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9866; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9867; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9868; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
9869; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
9870; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [4,4]
9871; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
9872; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
9873; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
9874; AVX1-NEXT:    retq
9875;
9876; AVX2-LABEL: ult_4_v4i64:
9877; AVX2:       # %bb.0:
9878; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9879; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
9880; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9881; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
9882; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
9883; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
9884; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
9885; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
9886; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9887; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9888; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]
9889; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
9890; AVX2-NEXT:    retq
9891;
9892; AVX512VPOPCNTDQ-LABEL: ult_4_v4i64:
9893; AVX512VPOPCNTDQ:       # %bb.0:
9894; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9895; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
9896; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]
9897; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
9898; AVX512VPOPCNTDQ-NEXT:    retq
9899;
9900; AVX512VPOPCNTDQVL-LABEL: ult_4_v4i64:
9901; AVX512VPOPCNTDQVL:       # %bb.0:
9902; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
9903; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9904; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9905; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9906; AVX512VPOPCNTDQVL-NEXT:    retq
9907;
9908; BITALG_NOVLX-LABEL: ult_4_v4i64:
9909; BITALG_NOVLX:       # %bb.0:
9910; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9911; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9912; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9913; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9914; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]
9915; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
9916; BITALG_NOVLX-NEXT:    retq
9917;
9918; BITALG-LABEL: ult_4_v4i64:
9919; BITALG:       # %bb.0:
9920; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
9921; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9922; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9923; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9924; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9925; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9926; BITALG-NEXT:    retq
9927  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
9928  %3 = icmp ult <4 x i64> %2, <i64 4, i64 4, i64 4, i64 4>
9929  %4 = sext <4 x i1> %3 to <4 x i64>
9930  ret <4 x i64> %4
9931}
9932
9933define <4 x i64> @ugt_4_v4i64(<4 x i64> %0) {
9934; AVX1-LABEL: ugt_4_v4i64:
9935; AVX1:       # %bb.0:
9936; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9937; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9938; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9939; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9940; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
9941; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
9942; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
9943; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
9944; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
9945; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
9946; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
9947; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
9948; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
9949; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9950; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9951; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9952; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
9953; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
9954; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [4,4]
9955; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
9956; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
9957; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
9958; AVX1-NEXT:    retq
9959;
9960; AVX2-LABEL: ugt_4_v4i64:
9961; AVX2:       # %bb.0:
9962; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9963; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
9964; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9965; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
9966; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
9967; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
9968; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
9969; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
9970; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9971; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9972; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]
9973; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
9974; AVX2-NEXT:    retq
9975;
9976; AVX512VPOPCNTDQ-LABEL: ugt_4_v4i64:
9977; AVX512VPOPCNTDQ:       # %bb.0:
9978; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9979; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
9980; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]
9981; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
9982; AVX512VPOPCNTDQ-NEXT:    retq
9983;
9984; AVX512VPOPCNTDQVL-LABEL: ugt_4_v4i64:
9985; AVX512VPOPCNTDQVL:       # %bb.0:
9986; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
9987; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
9988; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
9989; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
9990; AVX512VPOPCNTDQVL-NEXT:    retq
9991;
9992; BITALG_NOVLX-LABEL: ugt_4_v4i64:
9993; BITALG_NOVLX:       # %bb.0:
9994; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9995; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9996; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9997; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
9998; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]
9999; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10000; BITALG_NOVLX-NEXT:    retq
10001;
10002; BITALG-LABEL: ugt_4_v4i64:
10003; BITALG:       # %bb.0:
10004; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10005; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10006; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10007; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10008; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10009; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10010; BITALG-NEXT:    retq
10011  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10012  %3 = icmp ugt <4 x i64> %2, <i64 4, i64 4, i64 4, i64 4>
10013  %4 = sext <4 x i1> %3 to <4 x i64>
10014  ret <4 x i64> %4
10015}
10016
10017define <4 x i64> @ult_5_v4i64(<4 x i64> %0) {
10018; AVX1-LABEL: ult_5_v4i64:
10019; AVX1:       # %bb.0:
10020; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10021; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10022; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10023; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10024; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10025; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10026; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10027; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10028; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10029; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10030; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10031; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10032; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10033; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10034; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10035; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10036; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10037; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10038; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [5,5]
10039; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
10040; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
10041; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10042; AVX1-NEXT:    retq
10043;
10044; AVX2-LABEL: ult_5_v4i64:
10045; AVX2:       # %bb.0:
10046; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10047; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10048; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10049; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10050; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10051; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10052; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10053; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10054; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10055; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10056; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]
10057; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10058; AVX2-NEXT:    retq
10059;
10060; AVX512VPOPCNTDQ-LABEL: ult_5_v4i64:
10061; AVX512VPOPCNTDQ:       # %bb.0:
10062; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10063; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10064; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]
10065; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10066; AVX512VPOPCNTDQ-NEXT:    retq
10067;
10068; AVX512VPOPCNTDQVL-LABEL: ult_5_v4i64:
10069; AVX512VPOPCNTDQVL:       # %bb.0:
10070; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10071; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10072; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10073; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10074; AVX512VPOPCNTDQVL-NEXT:    retq
10075;
10076; BITALG_NOVLX-LABEL: ult_5_v4i64:
10077; BITALG_NOVLX:       # %bb.0:
10078; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10079; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10080; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10081; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10082; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]
10083; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10084; BITALG_NOVLX-NEXT:    retq
10085;
10086; BITALG-LABEL: ult_5_v4i64:
10087; BITALG:       # %bb.0:
10088; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10089; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10090; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10091; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10092; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10093; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10094; BITALG-NEXT:    retq
10095  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10096  %3 = icmp ult <4 x i64> %2, <i64 5, i64 5, i64 5, i64 5>
10097  %4 = sext <4 x i1> %3 to <4 x i64>
10098  ret <4 x i64> %4
10099}
10100
10101define <4 x i64> @ugt_5_v4i64(<4 x i64> %0) {
10102; AVX1-LABEL: ugt_5_v4i64:
10103; AVX1:       # %bb.0:
10104; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10105; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10106; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10107; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10108; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10109; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10110; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10111; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10112; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10113; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10114; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10115; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10116; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10117; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10118; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10119; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10120; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10121; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10122; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [5,5]
10123; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
10124; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
10125; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10126; AVX1-NEXT:    retq
10127;
10128; AVX2-LABEL: ugt_5_v4i64:
10129; AVX2:       # %bb.0:
10130; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10131; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10132; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10133; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10134; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10135; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10136; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10137; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10138; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10139; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10140; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]
10141; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10142; AVX2-NEXT:    retq
10143;
10144; AVX512VPOPCNTDQ-LABEL: ugt_5_v4i64:
10145; AVX512VPOPCNTDQ:       # %bb.0:
10146; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10147; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10148; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]
10149; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10150; AVX512VPOPCNTDQ-NEXT:    retq
10151;
10152; AVX512VPOPCNTDQVL-LABEL: ugt_5_v4i64:
10153; AVX512VPOPCNTDQVL:       # %bb.0:
10154; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10155; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10156; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10157; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10158; AVX512VPOPCNTDQVL-NEXT:    retq
10159;
10160; BITALG_NOVLX-LABEL: ugt_5_v4i64:
10161; BITALG_NOVLX:       # %bb.0:
10162; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10163; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10164; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10165; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10166; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]
10167; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10168; BITALG_NOVLX-NEXT:    retq
10169;
10170; BITALG-LABEL: ugt_5_v4i64:
10171; BITALG:       # %bb.0:
10172; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10173; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10174; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10175; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10176; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10177; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10178; BITALG-NEXT:    retq
10179  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10180  %3 = icmp ugt <4 x i64> %2, <i64 5, i64 5, i64 5, i64 5>
10181  %4 = sext <4 x i1> %3 to <4 x i64>
10182  ret <4 x i64> %4
10183}
10184
10185define <4 x i64> @ult_6_v4i64(<4 x i64> %0) {
10186; AVX1-LABEL: ult_6_v4i64:
10187; AVX1:       # %bb.0:
10188; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10189; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10190; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10191; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10192; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10193; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10194; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10195; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10196; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10197; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10198; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10199; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10200; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10201; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10202; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10203; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10204; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10205; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10206; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [6,6]
10207; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
10208; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
10209; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10210; AVX1-NEXT:    retq
10211;
10212; AVX2-LABEL: ult_6_v4i64:
10213; AVX2:       # %bb.0:
10214; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10215; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10216; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10217; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10218; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10219; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10220; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10221; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10222; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10223; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10224; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]
10225; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10226; AVX2-NEXT:    retq
10227;
10228; AVX512VPOPCNTDQ-LABEL: ult_6_v4i64:
10229; AVX512VPOPCNTDQ:       # %bb.0:
10230; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10231; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10232; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]
10233; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10234; AVX512VPOPCNTDQ-NEXT:    retq
10235;
10236; AVX512VPOPCNTDQVL-LABEL: ult_6_v4i64:
10237; AVX512VPOPCNTDQVL:       # %bb.0:
10238; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10239; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10240; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10241; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10242; AVX512VPOPCNTDQVL-NEXT:    retq
10243;
10244; BITALG_NOVLX-LABEL: ult_6_v4i64:
10245; BITALG_NOVLX:       # %bb.0:
10246; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10247; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10248; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10249; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10250; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]
10251; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10252; BITALG_NOVLX-NEXT:    retq
10253;
10254; BITALG-LABEL: ult_6_v4i64:
10255; BITALG:       # %bb.0:
10256; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10257; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10258; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10259; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10260; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10261; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10262; BITALG-NEXT:    retq
10263  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10264  %3 = icmp ult <4 x i64> %2, <i64 6, i64 6, i64 6, i64 6>
10265  %4 = sext <4 x i1> %3 to <4 x i64>
10266  ret <4 x i64> %4
10267}
10268
10269define <4 x i64> @ugt_6_v4i64(<4 x i64> %0) {
10270; AVX1-LABEL: ugt_6_v4i64:
10271; AVX1:       # %bb.0:
10272; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10273; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10274; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10275; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10276; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10277; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10278; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10279; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10280; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10281; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10282; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10283; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10284; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10285; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10286; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10287; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10288; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10289; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10290; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [6,6]
10291; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
10292; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
10293; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10294; AVX1-NEXT:    retq
10295;
10296; AVX2-LABEL: ugt_6_v4i64:
10297; AVX2:       # %bb.0:
10298; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10299; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10300; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10301; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10302; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10303; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10304; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10305; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10306; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10307; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10308; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]
10309; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10310; AVX2-NEXT:    retq
10311;
10312; AVX512VPOPCNTDQ-LABEL: ugt_6_v4i64:
10313; AVX512VPOPCNTDQ:       # %bb.0:
10314; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10315; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10316; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]
10317; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10318; AVX512VPOPCNTDQ-NEXT:    retq
10319;
10320; AVX512VPOPCNTDQVL-LABEL: ugt_6_v4i64:
10321; AVX512VPOPCNTDQVL:       # %bb.0:
10322; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10323; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10324; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10325; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10326; AVX512VPOPCNTDQVL-NEXT:    retq
10327;
10328; BITALG_NOVLX-LABEL: ugt_6_v4i64:
10329; BITALG_NOVLX:       # %bb.0:
10330; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10331; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10332; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10333; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10334; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]
10335; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10336; BITALG_NOVLX-NEXT:    retq
10337;
10338; BITALG-LABEL: ugt_6_v4i64:
10339; BITALG:       # %bb.0:
10340; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10341; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10342; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10343; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10344; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10345; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10346; BITALG-NEXT:    retq
10347  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10348  %3 = icmp ugt <4 x i64> %2, <i64 6, i64 6, i64 6, i64 6>
10349  %4 = sext <4 x i1> %3 to <4 x i64>
10350  ret <4 x i64> %4
10351}
10352
10353define <4 x i64> @ult_7_v4i64(<4 x i64> %0) {
10354; AVX1-LABEL: ult_7_v4i64:
10355; AVX1:       # %bb.0:
10356; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10357; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10358; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10359; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10360; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10361; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10362; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10363; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10364; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10365; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10366; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10367; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10368; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10369; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10370; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10371; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10372; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10373; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10374; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [7,7]
10375; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
10376; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
10377; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10378; AVX1-NEXT:    retq
10379;
10380; AVX2-LABEL: ult_7_v4i64:
10381; AVX2:       # %bb.0:
10382; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10383; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10384; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10385; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10386; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10387; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10388; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10389; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10390; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10391; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10392; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]
10393; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10394; AVX2-NEXT:    retq
10395;
10396; AVX512VPOPCNTDQ-LABEL: ult_7_v4i64:
10397; AVX512VPOPCNTDQ:       # %bb.0:
10398; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10399; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10400; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]
10401; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10402; AVX512VPOPCNTDQ-NEXT:    retq
10403;
10404; AVX512VPOPCNTDQVL-LABEL: ult_7_v4i64:
10405; AVX512VPOPCNTDQVL:       # %bb.0:
10406; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10407; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10408; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10409; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10410; AVX512VPOPCNTDQVL-NEXT:    retq
10411;
10412; BITALG_NOVLX-LABEL: ult_7_v4i64:
10413; BITALG_NOVLX:       # %bb.0:
10414; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10415; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10416; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10417; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10418; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]
10419; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10420; BITALG_NOVLX-NEXT:    retq
10421;
10422; BITALG-LABEL: ult_7_v4i64:
10423; BITALG:       # %bb.0:
10424; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10425; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10426; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10427; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10428; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10429; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10430; BITALG-NEXT:    retq
10431  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10432  %3 = icmp ult <4 x i64> %2, <i64 7, i64 7, i64 7, i64 7>
10433  %4 = sext <4 x i1> %3 to <4 x i64>
10434  ret <4 x i64> %4
10435}
10436
10437define <4 x i64> @ugt_7_v4i64(<4 x i64> %0) {
10438; AVX1-LABEL: ugt_7_v4i64:
10439; AVX1:       # %bb.0:
10440; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10441; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10442; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10443; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10444; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10445; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10446; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10447; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10448; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10449; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10450; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10451; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10452; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10453; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10454; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10455; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10456; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10457; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10458; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [7,7]
10459; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
10460; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
10461; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10462; AVX1-NEXT:    retq
10463;
10464; AVX2-LABEL: ugt_7_v4i64:
10465; AVX2:       # %bb.0:
10466; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10467; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10468; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10469; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10470; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10471; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10472; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10473; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10474; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10475; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10476; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]
10477; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10478; AVX2-NEXT:    retq
10479;
10480; AVX512VPOPCNTDQ-LABEL: ugt_7_v4i64:
10481; AVX512VPOPCNTDQ:       # %bb.0:
10482; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10483; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10484; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]
10485; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10486; AVX512VPOPCNTDQ-NEXT:    retq
10487;
10488; AVX512VPOPCNTDQVL-LABEL: ugt_7_v4i64:
10489; AVX512VPOPCNTDQVL:       # %bb.0:
10490; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10491; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10492; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10493; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10494; AVX512VPOPCNTDQVL-NEXT:    retq
10495;
10496; BITALG_NOVLX-LABEL: ugt_7_v4i64:
10497; BITALG_NOVLX:       # %bb.0:
10498; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10499; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10500; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10501; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10502; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]
10503; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10504; BITALG_NOVLX-NEXT:    retq
10505;
10506; BITALG-LABEL: ugt_7_v4i64:
10507; BITALG:       # %bb.0:
10508; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10509; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10510; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10511; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10512; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10513; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10514; BITALG-NEXT:    retq
10515  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10516  %3 = icmp ugt <4 x i64> %2, <i64 7, i64 7, i64 7, i64 7>
10517  %4 = sext <4 x i1> %3 to <4 x i64>
10518  ret <4 x i64> %4
10519}
10520
10521define <4 x i64> @ult_8_v4i64(<4 x i64> %0) {
10522; AVX1-LABEL: ult_8_v4i64:
10523; AVX1:       # %bb.0:
10524; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10525; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10526; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10527; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10528; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10529; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10530; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10531; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10532; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10533; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10534; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10535; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10536; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10537; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10538; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10539; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10540; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10541; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10542; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [8,8]
10543; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
10544; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
10545; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10546; AVX1-NEXT:    retq
10547;
10548; AVX2-LABEL: ult_8_v4i64:
10549; AVX2:       # %bb.0:
10550; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10551; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10552; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10553; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10554; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10555; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10556; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10557; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10558; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10559; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10560; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]
10561; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10562; AVX2-NEXT:    retq
10563;
10564; AVX512VPOPCNTDQ-LABEL: ult_8_v4i64:
10565; AVX512VPOPCNTDQ:       # %bb.0:
10566; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10567; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10568; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]
10569; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10570; AVX512VPOPCNTDQ-NEXT:    retq
10571;
10572; AVX512VPOPCNTDQVL-LABEL: ult_8_v4i64:
10573; AVX512VPOPCNTDQVL:       # %bb.0:
10574; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10575; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10576; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10577; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10578; AVX512VPOPCNTDQVL-NEXT:    retq
10579;
10580; BITALG_NOVLX-LABEL: ult_8_v4i64:
10581; BITALG_NOVLX:       # %bb.0:
10582; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10583; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10584; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10585; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10586; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]
10587; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10588; BITALG_NOVLX-NEXT:    retq
10589;
10590; BITALG-LABEL: ult_8_v4i64:
10591; BITALG:       # %bb.0:
10592; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10593; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10594; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10595; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10596; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10597; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10598; BITALG-NEXT:    retq
10599  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10600  %3 = icmp ult <4 x i64> %2, <i64 8, i64 8, i64 8, i64 8>
10601  %4 = sext <4 x i1> %3 to <4 x i64>
10602  ret <4 x i64> %4
10603}
10604
10605define <4 x i64> @ugt_8_v4i64(<4 x i64> %0) {
10606; AVX1-LABEL: ugt_8_v4i64:
10607; AVX1:       # %bb.0:
10608; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10609; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10610; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10611; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10612; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10613; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10614; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10615; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10616; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10617; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10618; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10619; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10620; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10621; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10622; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10623; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10624; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10625; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10626; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [8,8]
10627; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
10628; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
10629; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10630; AVX1-NEXT:    retq
10631;
10632; AVX2-LABEL: ugt_8_v4i64:
10633; AVX2:       # %bb.0:
10634; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10635; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10636; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10637; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10638; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10639; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10640; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10641; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10642; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10643; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10644; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]
10645; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10646; AVX2-NEXT:    retq
10647;
10648; AVX512VPOPCNTDQ-LABEL: ugt_8_v4i64:
10649; AVX512VPOPCNTDQ:       # %bb.0:
10650; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10651; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10652; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]
10653; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10654; AVX512VPOPCNTDQ-NEXT:    retq
10655;
10656; AVX512VPOPCNTDQVL-LABEL: ugt_8_v4i64:
10657; AVX512VPOPCNTDQVL:       # %bb.0:
10658; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10659; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10660; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10661; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10662; AVX512VPOPCNTDQVL-NEXT:    retq
10663;
10664; BITALG_NOVLX-LABEL: ugt_8_v4i64:
10665; BITALG_NOVLX:       # %bb.0:
10666; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10667; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10668; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10669; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10670; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]
10671; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10672; BITALG_NOVLX-NEXT:    retq
10673;
10674; BITALG-LABEL: ugt_8_v4i64:
10675; BITALG:       # %bb.0:
10676; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10677; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10678; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10679; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10680; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10681; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10682; BITALG-NEXT:    retq
10683  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10684  %3 = icmp ugt <4 x i64> %2, <i64 8, i64 8, i64 8, i64 8>
10685  %4 = sext <4 x i1> %3 to <4 x i64>
10686  ret <4 x i64> %4
10687}
10688
10689define <4 x i64> @ult_9_v4i64(<4 x i64> %0) {
10690; AVX1-LABEL: ult_9_v4i64:
10691; AVX1:       # %bb.0:
10692; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10693; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10694; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10695; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10696; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10697; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10698; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10699; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10700; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10701; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10702; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10703; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10704; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10705; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10706; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10707; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10708; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10709; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10710; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [9,9]
10711; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
10712; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
10713; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10714; AVX1-NEXT:    retq
10715;
10716; AVX2-LABEL: ult_9_v4i64:
10717; AVX2:       # %bb.0:
10718; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10719; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10720; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10721; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10722; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10723; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10724; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10725; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10726; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10727; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10728; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]
10729; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10730; AVX2-NEXT:    retq
10731;
10732; AVX512VPOPCNTDQ-LABEL: ult_9_v4i64:
10733; AVX512VPOPCNTDQ:       # %bb.0:
10734; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10735; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10736; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]
10737; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10738; AVX512VPOPCNTDQ-NEXT:    retq
10739;
10740; AVX512VPOPCNTDQVL-LABEL: ult_9_v4i64:
10741; AVX512VPOPCNTDQVL:       # %bb.0:
10742; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10743; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10744; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10745; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10746; AVX512VPOPCNTDQVL-NEXT:    retq
10747;
10748; BITALG_NOVLX-LABEL: ult_9_v4i64:
10749; BITALG_NOVLX:       # %bb.0:
10750; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10751; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10752; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10753; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10754; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]
10755; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10756; BITALG_NOVLX-NEXT:    retq
10757;
10758; BITALG-LABEL: ult_9_v4i64:
10759; BITALG:       # %bb.0:
10760; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10761; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10762; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10763; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10764; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10765; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10766; BITALG-NEXT:    retq
10767  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10768  %3 = icmp ult <4 x i64> %2, <i64 9, i64 9, i64 9, i64 9>
10769  %4 = sext <4 x i1> %3 to <4 x i64>
10770  ret <4 x i64> %4
10771}
10772
10773define <4 x i64> @ugt_9_v4i64(<4 x i64> %0) {
10774; AVX1-LABEL: ugt_9_v4i64:
10775; AVX1:       # %bb.0:
10776; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10777; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10778; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10779; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10780; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10781; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10782; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10783; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10784; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10785; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10786; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10787; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10788; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10789; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10790; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10791; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10792; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10793; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10794; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [9,9]
10795; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
10796; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
10797; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10798; AVX1-NEXT:    retq
10799;
10800; AVX2-LABEL: ugt_9_v4i64:
10801; AVX2:       # %bb.0:
10802; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10803; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10804; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10805; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10806; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10807; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10808; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10809; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10810; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10811; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10812; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]
10813; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10814; AVX2-NEXT:    retq
10815;
10816; AVX512VPOPCNTDQ-LABEL: ugt_9_v4i64:
10817; AVX512VPOPCNTDQ:       # %bb.0:
10818; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10819; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10820; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]
10821; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10822; AVX512VPOPCNTDQ-NEXT:    retq
10823;
10824; AVX512VPOPCNTDQVL-LABEL: ugt_9_v4i64:
10825; AVX512VPOPCNTDQVL:       # %bb.0:
10826; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10827; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10828; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10829; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10830; AVX512VPOPCNTDQVL-NEXT:    retq
10831;
10832; BITALG_NOVLX-LABEL: ugt_9_v4i64:
10833; BITALG_NOVLX:       # %bb.0:
10834; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10835; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10836; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10837; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10838; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]
10839; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10840; BITALG_NOVLX-NEXT:    retq
10841;
10842; BITALG-LABEL: ugt_9_v4i64:
10843; BITALG:       # %bb.0:
10844; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10845; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10846; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10847; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10848; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10849; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10850; BITALG-NEXT:    retq
10851  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10852  %3 = icmp ugt <4 x i64> %2, <i64 9, i64 9, i64 9, i64 9>
10853  %4 = sext <4 x i1> %3 to <4 x i64>
10854  ret <4 x i64> %4
10855}
10856
10857define <4 x i64> @ult_10_v4i64(<4 x i64> %0) {
10858; AVX1-LABEL: ult_10_v4i64:
10859; AVX1:       # %bb.0:
10860; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10861; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10862; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10863; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10864; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10865; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10866; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10867; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10868; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10869; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10870; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10871; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10872; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10873; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10874; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10875; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10876; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10877; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10878; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [10,10]
10879; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
10880; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
10881; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10882; AVX1-NEXT:    retq
10883;
10884; AVX2-LABEL: ult_10_v4i64:
10885; AVX2:       # %bb.0:
10886; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10887; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10888; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10889; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10890; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10891; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10892; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10893; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10894; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10895; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10896; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]
10897; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10898; AVX2-NEXT:    retq
10899;
10900; AVX512VPOPCNTDQ-LABEL: ult_10_v4i64:
10901; AVX512VPOPCNTDQ:       # %bb.0:
10902; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10903; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10904; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]
10905; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10906; AVX512VPOPCNTDQ-NEXT:    retq
10907;
10908; AVX512VPOPCNTDQVL-LABEL: ult_10_v4i64:
10909; AVX512VPOPCNTDQVL:       # %bb.0:
10910; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10911; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10912; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10913; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10914; AVX512VPOPCNTDQVL-NEXT:    retq
10915;
10916; BITALG_NOVLX-LABEL: ult_10_v4i64:
10917; BITALG_NOVLX:       # %bb.0:
10918; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10919; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10920; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10921; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10922; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]
10923; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
10924; BITALG_NOVLX-NEXT:    retq
10925;
10926; BITALG-LABEL: ult_10_v4i64:
10927; BITALG:       # %bb.0:
10928; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
10929; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10930; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10931; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10932; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10933; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10934; BITALG-NEXT:    retq
10935  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
10936  %3 = icmp ult <4 x i64> %2, <i64 10, i64 10, i64 10, i64 10>
10937  %4 = sext <4 x i1> %3 to <4 x i64>
10938  ret <4 x i64> %4
10939}
10940
10941define <4 x i64> @ugt_10_v4i64(<4 x i64> %0) {
10942; AVX1-LABEL: ugt_10_v4i64:
10943; AVX1:       # %bb.0:
10944; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10945; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10946; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10947; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10948; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
10949; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
10950; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
10951; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
10952; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
10953; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
10954; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
10955; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
10956; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
10957; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10958; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10959; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10960; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
10961; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
10962; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [10,10]
10963; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
10964; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
10965; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
10966; AVX1-NEXT:    retq
10967;
10968; AVX2-LABEL: ugt_10_v4i64:
10969; AVX2:       # %bb.0:
10970; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10971; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
10972; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10973; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
10974; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
10975; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
10976; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
10977; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
10978; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10979; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
10980; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]
10981; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10982; AVX2-NEXT:    retq
10983;
10984; AVX512VPOPCNTDQ-LABEL: ugt_10_v4i64:
10985; AVX512VPOPCNTDQ:       # %bb.0:
10986; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10987; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
10988; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]
10989; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
10990; AVX512VPOPCNTDQ-NEXT:    retq
10991;
10992; AVX512VPOPCNTDQVL-LABEL: ugt_10_v4i64:
10993; AVX512VPOPCNTDQVL:       # %bb.0:
10994; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
10995; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
10996; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
10997; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
10998; AVX512VPOPCNTDQVL-NEXT:    retq
10999;
11000; BITALG_NOVLX-LABEL: ugt_10_v4i64:
11001; BITALG_NOVLX:       # %bb.0:
11002; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11003; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11004; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11005; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11006; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]
11007; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11008; BITALG_NOVLX-NEXT:    retq
11009;
11010; BITALG-LABEL: ugt_10_v4i64:
11011; BITALG:       # %bb.0:
11012; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11013; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11014; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11015; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11016; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11017; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11018; BITALG-NEXT:    retq
11019  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11020  %3 = icmp ugt <4 x i64> %2, <i64 10, i64 10, i64 10, i64 10>
11021  %4 = sext <4 x i1> %3 to <4 x i64>
11022  ret <4 x i64> %4
11023}
11024
11025define <4 x i64> @ult_11_v4i64(<4 x i64> %0) {
11026; AVX1-LABEL: ult_11_v4i64:
11027; AVX1:       # %bb.0:
11028; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11029; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11030; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11031; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11032; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11033; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11034; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11035; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11036; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11037; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11038; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11039; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11040; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11041; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11042; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11043; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11044; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11045; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11046; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [11,11]
11047; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
11048; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
11049; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11050; AVX1-NEXT:    retq
11051;
11052; AVX2-LABEL: ult_11_v4i64:
11053; AVX2:       # %bb.0:
11054; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11055; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11056; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11057; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11058; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11059; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11060; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11061; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11062; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11063; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11064; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]
11065; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11066; AVX2-NEXT:    retq
11067;
11068; AVX512VPOPCNTDQ-LABEL: ult_11_v4i64:
11069; AVX512VPOPCNTDQ:       # %bb.0:
11070; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11071; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11072; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]
11073; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11074; AVX512VPOPCNTDQ-NEXT:    retq
11075;
11076; AVX512VPOPCNTDQVL-LABEL: ult_11_v4i64:
11077; AVX512VPOPCNTDQVL:       # %bb.0:
11078; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11079; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11080; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11081; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11082; AVX512VPOPCNTDQVL-NEXT:    retq
11083;
11084; BITALG_NOVLX-LABEL: ult_11_v4i64:
11085; BITALG_NOVLX:       # %bb.0:
11086; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11087; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11088; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11089; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11090; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]
11091; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11092; BITALG_NOVLX-NEXT:    retq
11093;
11094; BITALG-LABEL: ult_11_v4i64:
11095; BITALG:       # %bb.0:
11096; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11097; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11098; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11099; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11100; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11101; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11102; BITALG-NEXT:    retq
11103  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11104  %3 = icmp ult <4 x i64> %2, <i64 11, i64 11, i64 11, i64 11>
11105  %4 = sext <4 x i1> %3 to <4 x i64>
11106  ret <4 x i64> %4
11107}
11108
11109define <4 x i64> @ugt_11_v4i64(<4 x i64> %0) {
11110; AVX1-LABEL: ugt_11_v4i64:
11111; AVX1:       # %bb.0:
11112; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11113; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11114; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11115; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11116; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11117; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11118; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11119; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11120; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11121; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11122; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11123; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11124; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11125; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11126; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11127; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11128; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11129; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11130; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [11,11]
11131; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
11132; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
11133; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11134; AVX1-NEXT:    retq
11135;
11136; AVX2-LABEL: ugt_11_v4i64:
11137; AVX2:       # %bb.0:
11138; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11139; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11140; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11141; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11142; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11143; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11144; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11145; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11146; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11147; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11148; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]
11149; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11150; AVX2-NEXT:    retq
11151;
11152; AVX512VPOPCNTDQ-LABEL: ugt_11_v4i64:
11153; AVX512VPOPCNTDQ:       # %bb.0:
11154; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11155; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11156; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]
11157; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11158; AVX512VPOPCNTDQ-NEXT:    retq
11159;
11160; AVX512VPOPCNTDQVL-LABEL: ugt_11_v4i64:
11161; AVX512VPOPCNTDQVL:       # %bb.0:
11162; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11163; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11164; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11165; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11166; AVX512VPOPCNTDQVL-NEXT:    retq
11167;
11168; BITALG_NOVLX-LABEL: ugt_11_v4i64:
11169; BITALG_NOVLX:       # %bb.0:
11170; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11171; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11172; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11173; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11174; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]
11175; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11176; BITALG_NOVLX-NEXT:    retq
11177;
11178; BITALG-LABEL: ugt_11_v4i64:
11179; BITALG:       # %bb.0:
11180; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11181; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11182; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11183; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11184; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11185; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11186; BITALG-NEXT:    retq
11187  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11188  %3 = icmp ugt <4 x i64> %2, <i64 11, i64 11, i64 11, i64 11>
11189  %4 = sext <4 x i1> %3 to <4 x i64>
11190  ret <4 x i64> %4
11191}
11192
11193define <4 x i64> @ult_12_v4i64(<4 x i64> %0) {
11194; AVX1-LABEL: ult_12_v4i64:
11195; AVX1:       # %bb.0:
11196; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11197; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11198; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11199; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11200; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11201; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11202; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11203; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11204; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11205; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11206; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11207; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11208; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11209; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11210; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11211; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11212; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11213; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11214; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [12,12]
11215; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
11216; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
11217; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11218; AVX1-NEXT:    retq
11219;
11220; AVX2-LABEL: ult_12_v4i64:
11221; AVX2:       # %bb.0:
11222; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11223; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11224; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11225; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11226; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11227; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11228; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11229; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11230; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11231; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11232; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]
11233; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11234; AVX2-NEXT:    retq
11235;
11236; AVX512VPOPCNTDQ-LABEL: ult_12_v4i64:
11237; AVX512VPOPCNTDQ:       # %bb.0:
11238; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11239; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11240; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]
11241; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11242; AVX512VPOPCNTDQ-NEXT:    retq
11243;
11244; AVX512VPOPCNTDQVL-LABEL: ult_12_v4i64:
11245; AVX512VPOPCNTDQVL:       # %bb.0:
11246; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11247; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11248; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11249; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11250; AVX512VPOPCNTDQVL-NEXT:    retq
11251;
11252; BITALG_NOVLX-LABEL: ult_12_v4i64:
11253; BITALG_NOVLX:       # %bb.0:
11254; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11255; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11256; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11257; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11258; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]
11259; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11260; BITALG_NOVLX-NEXT:    retq
11261;
11262; BITALG-LABEL: ult_12_v4i64:
11263; BITALG:       # %bb.0:
11264; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11265; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11266; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11267; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11268; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11269; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11270; BITALG-NEXT:    retq
11271  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11272  %3 = icmp ult <4 x i64> %2, <i64 12, i64 12, i64 12, i64 12>
11273  %4 = sext <4 x i1> %3 to <4 x i64>
11274  ret <4 x i64> %4
11275}
11276
11277define <4 x i64> @ugt_12_v4i64(<4 x i64> %0) {
11278; AVX1-LABEL: ugt_12_v4i64:
11279; AVX1:       # %bb.0:
11280; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11281; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11282; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11283; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11284; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11285; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11286; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11287; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11288; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11289; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11290; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11291; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11292; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11293; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11294; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11295; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11296; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11297; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11298; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [12,12]
11299; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
11300; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
11301; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11302; AVX1-NEXT:    retq
11303;
11304; AVX2-LABEL: ugt_12_v4i64:
11305; AVX2:       # %bb.0:
11306; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11307; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11308; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11309; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11310; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11311; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11312; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11313; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11314; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11315; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11316; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]
11317; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11318; AVX2-NEXT:    retq
11319;
11320; AVX512VPOPCNTDQ-LABEL: ugt_12_v4i64:
11321; AVX512VPOPCNTDQ:       # %bb.0:
11322; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11323; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11324; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]
11325; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11326; AVX512VPOPCNTDQ-NEXT:    retq
11327;
11328; AVX512VPOPCNTDQVL-LABEL: ugt_12_v4i64:
11329; AVX512VPOPCNTDQVL:       # %bb.0:
11330; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11331; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11332; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11333; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11334; AVX512VPOPCNTDQVL-NEXT:    retq
11335;
11336; BITALG_NOVLX-LABEL: ugt_12_v4i64:
11337; BITALG_NOVLX:       # %bb.0:
11338; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11339; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11340; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11341; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11342; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]
11343; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11344; BITALG_NOVLX-NEXT:    retq
11345;
11346; BITALG-LABEL: ugt_12_v4i64:
11347; BITALG:       # %bb.0:
11348; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11349; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11350; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11351; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11352; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11353; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11354; BITALG-NEXT:    retq
11355  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11356  %3 = icmp ugt <4 x i64> %2, <i64 12, i64 12, i64 12, i64 12>
11357  %4 = sext <4 x i1> %3 to <4 x i64>
11358  ret <4 x i64> %4
11359}
11360
11361define <4 x i64> @ult_13_v4i64(<4 x i64> %0) {
11362; AVX1-LABEL: ult_13_v4i64:
11363; AVX1:       # %bb.0:
11364; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11365; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11366; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11367; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11368; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11369; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11370; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11371; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11372; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11373; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11374; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11375; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11376; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11377; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11378; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11379; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11380; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11381; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11382; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [13,13]
11383; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
11384; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
11385; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11386; AVX1-NEXT:    retq
11387;
11388; AVX2-LABEL: ult_13_v4i64:
11389; AVX2:       # %bb.0:
11390; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11391; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11392; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11393; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11394; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11395; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11396; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11397; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11398; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11399; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11400; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]
11401; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11402; AVX2-NEXT:    retq
11403;
11404; AVX512VPOPCNTDQ-LABEL: ult_13_v4i64:
11405; AVX512VPOPCNTDQ:       # %bb.0:
11406; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11407; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11408; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]
11409; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11410; AVX512VPOPCNTDQ-NEXT:    retq
11411;
11412; AVX512VPOPCNTDQVL-LABEL: ult_13_v4i64:
11413; AVX512VPOPCNTDQVL:       # %bb.0:
11414; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11415; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11416; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11417; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11418; AVX512VPOPCNTDQVL-NEXT:    retq
11419;
11420; BITALG_NOVLX-LABEL: ult_13_v4i64:
11421; BITALG_NOVLX:       # %bb.0:
11422; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11423; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11424; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11425; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11426; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]
11427; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11428; BITALG_NOVLX-NEXT:    retq
11429;
11430; BITALG-LABEL: ult_13_v4i64:
11431; BITALG:       # %bb.0:
11432; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11433; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11434; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11435; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11436; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11437; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11438; BITALG-NEXT:    retq
11439  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11440  %3 = icmp ult <4 x i64> %2, <i64 13, i64 13, i64 13, i64 13>
11441  %4 = sext <4 x i1> %3 to <4 x i64>
11442  ret <4 x i64> %4
11443}
11444
11445define <4 x i64> @ugt_13_v4i64(<4 x i64> %0) {
11446; AVX1-LABEL: ugt_13_v4i64:
11447; AVX1:       # %bb.0:
11448; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11449; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11450; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11451; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11452; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11453; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11454; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11455; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11456; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11457; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11458; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11459; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11460; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11461; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11462; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11463; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11464; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11465; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11466; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [13,13]
11467; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
11468; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
11469; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11470; AVX1-NEXT:    retq
11471;
11472; AVX2-LABEL: ugt_13_v4i64:
11473; AVX2:       # %bb.0:
11474; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11475; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11476; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11477; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11478; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11479; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11480; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11481; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11482; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11483; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11484; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]
11485; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11486; AVX2-NEXT:    retq
11487;
11488; AVX512VPOPCNTDQ-LABEL: ugt_13_v4i64:
11489; AVX512VPOPCNTDQ:       # %bb.0:
11490; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11491; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11492; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]
11493; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11494; AVX512VPOPCNTDQ-NEXT:    retq
11495;
11496; AVX512VPOPCNTDQVL-LABEL: ugt_13_v4i64:
11497; AVX512VPOPCNTDQVL:       # %bb.0:
11498; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11499; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11500; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11501; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11502; AVX512VPOPCNTDQVL-NEXT:    retq
11503;
11504; BITALG_NOVLX-LABEL: ugt_13_v4i64:
11505; BITALG_NOVLX:       # %bb.0:
11506; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11507; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11508; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11509; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11510; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]
11511; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11512; BITALG_NOVLX-NEXT:    retq
11513;
11514; BITALG-LABEL: ugt_13_v4i64:
11515; BITALG:       # %bb.0:
11516; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11517; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11518; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11519; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11520; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11521; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11522; BITALG-NEXT:    retq
11523  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11524  %3 = icmp ugt <4 x i64> %2, <i64 13, i64 13, i64 13, i64 13>
11525  %4 = sext <4 x i1> %3 to <4 x i64>
11526  ret <4 x i64> %4
11527}
11528
11529define <4 x i64> @ult_14_v4i64(<4 x i64> %0) {
11530; AVX1-LABEL: ult_14_v4i64:
11531; AVX1:       # %bb.0:
11532; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11533; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11534; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11535; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11536; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11537; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11538; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11539; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11540; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11541; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11542; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11543; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11544; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11545; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11546; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11547; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11548; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11549; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11550; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [14,14]
11551; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
11552; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
11553; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11554; AVX1-NEXT:    retq
11555;
11556; AVX2-LABEL: ult_14_v4i64:
11557; AVX2:       # %bb.0:
11558; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11559; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11560; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11561; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11562; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11563; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11564; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11565; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11566; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11567; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11568; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]
11569; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11570; AVX2-NEXT:    retq
11571;
11572; AVX512VPOPCNTDQ-LABEL: ult_14_v4i64:
11573; AVX512VPOPCNTDQ:       # %bb.0:
11574; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11575; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11576; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]
11577; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11578; AVX512VPOPCNTDQ-NEXT:    retq
11579;
11580; AVX512VPOPCNTDQVL-LABEL: ult_14_v4i64:
11581; AVX512VPOPCNTDQVL:       # %bb.0:
11582; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11583; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11584; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11585; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11586; AVX512VPOPCNTDQVL-NEXT:    retq
11587;
11588; BITALG_NOVLX-LABEL: ult_14_v4i64:
11589; BITALG_NOVLX:       # %bb.0:
11590; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11591; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11592; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11593; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11594; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]
11595; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11596; BITALG_NOVLX-NEXT:    retq
11597;
11598; BITALG-LABEL: ult_14_v4i64:
11599; BITALG:       # %bb.0:
11600; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11601; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11602; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11603; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11604; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11605; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11606; BITALG-NEXT:    retq
11607  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11608  %3 = icmp ult <4 x i64> %2, <i64 14, i64 14, i64 14, i64 14>
11609  %4 = sext <4 x i1> %3 to <4 x i64>
11610  ret <4 x i64> %4
11611}
11612
11613define <4 x i64> @ugt_14_v4i64(<4 x i64> %0) {
11614; AVX1-LABEL: ugt_14_v4i64:
11615; AVX1:       # %bb.0:
11616; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11617; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11618; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11619; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11620; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11621; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11622; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11623; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11624; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11625; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11626; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11627; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11628; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11629; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11630; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11631; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11632; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11633; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11634; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [14,14]
11635; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
11636; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
11637; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11638; AVX1-NEXT:    retq
11639;
11640; AVX2-LABEL: ugt_14_v4i64:
11641; AVX2:       # %bb.0:
11642; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11643; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11644; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11645; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11646; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11647; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11648; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11649; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11650; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11651; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11652; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]
11653; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11654; AVX2-NEXT:    retq
11655;
11656; AVX512VPOPCNTDQ-LABEL: ugt_14_v4i64:
11657; AVX512VPOPCNTDQ:       # %bb.0:
11658; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11659; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11660; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]
11661; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11662; AVX512VPOPCNTDQ-NEXT:    retq
11663;
11664; AVX512VPOPCNTDQVL-LABEL: ugt_14_v4i64:
11665; AVX512VPOPCNTDQVL:       # %bb.0:
11666; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11667; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11668; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11669; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11670; AVX512VPOPCNTDQVL-NEXT:    retq
11671;
11672; BITALG_NOVLX-LABEL: ugt_14_v4i64:
11673; BITALG_NOVLX:       # %bb.0:
11674; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11675; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11676; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11677; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11678; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]
11679; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11680; BITALG_NOVLX-NEXT:    retq
11681;
11682; BITALG-LABEL: ugt_14_v4i64:
11683; BITALG:       # %bb.0:
11684; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11685; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11686; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11687; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11688; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11689; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11690; BITALG-NEXT:    retq
11691  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11692  %3 = icmp ugt <4 x i64> %2, <i64 14, i64 14, i64 14, i64 14>
11693  %4 = sext <4 x i1> %3 to <4 x i64>
11694  ret <4 x i64> %4
11695}
11696
11697define <4 x i64> @ult_15_v4i64(<4 x i64> %0) {
11698; AVX1-LABEL: ult_15_v4i64:
11699; AVX1:       # %bb.0:
11700; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11701; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11702; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11703; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11704; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11705; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11706; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11707; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11708; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11709; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11710; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11711; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11712; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11713; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11714; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11715; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11716; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11717; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11718; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15]
11719; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
11720; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
11721; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11722; AVX1-NEXT:    retq
11723;
11724; AVX2-LABEL: ult_15_v4i64:
11725; AVX2:       # %bb.0:
11726; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11727; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11728; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11729; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11730; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11731; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11732; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11733; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11734; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11735; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11736; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]
11737; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11738; AVX2-NEXT:    retq
11739;
11740; AVX512VPOPCNTDQ-LABEL: ult_15_v4i64:
11741; AVX512VPOPCNTDQ:       # %bb.0:
11742; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11743; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11744; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]
11745; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11746; AVX512VPOPCNTDQ-NEXT:    retq
11747;
11748; AVX512VPOPCNTDQVL-LABEL: ult_15_v4i64:
11749; AVX512VPOPCNTDQVL:       # %bb.0:
11750; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11751; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11752; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11753; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11754; AVX512VPOPCNTDQVL-NEXT:    retq
11755;
11756; BITALG_NOVLX-LABEL: ult_15_v4i64:
11757; BITALG_NOVLX:       # %bb.0:
11758; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11759; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11760; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11761; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11762; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]
11763; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11764; BITALG_NOVLX-NEXT:    retq
11765;
11766; BITALG-LABEL: ult_15_v4i64:
11767; BITALG:       # %bb.0:
11768; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11769; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11770; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11771; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11772; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11773; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11774; BITALG-NEXT:    retq
11775  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11776  %3 = icmp ult <4 x i64> %2, <i64 15, i64 15, i64 15, i64 15>
11777  %4 = sext <4 x i1> %3 to <4 x i64>
11778  ret <4 x i64> %4
11779}
11780
11781define <4 x i64> @ugt_15_v4i64(<4 x i64> %0) {
11782; AVX1-LABEL: ugt_15_v4i64:
11783; AVX1:       # %bb.0:
11784; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11785; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11786; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11787; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11788; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11789; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11790; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11791; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11792; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11793; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11794; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11795; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11796; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11797; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11798; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11799; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11800; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11801; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11802; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15]
11803; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
11804; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
11805; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11806; AVX1-NEXT:    retq
11807;
11808; AVX2-LABEL: ugt_15_v4i64:
11809; AVX2:       # %bb.0:
11810; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11811; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11812; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11813; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11814; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11815; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11816; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11817; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11818; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11819; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11820; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]
11821; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11822; AVX2-NEXT:    retq
11823;
11824; AVX512VPOPCNTDQ-LABEL: ugt_15_v4i64:
11825; AVX512VPOPCNTDQ:       # %bb.0:
11826; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11827; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11828; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]
11829; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11830; AVX512VPOPCNTDQ-NEXT:    retq
11831;
11832; AVX512VPOPCNTDQVL-LABEL: ugt_15_v4i64:
11833; AVX512VPOPCNTDQVL:       # %bb.0:
11834; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11835; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11836; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11837; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11838; AVX512VPOPCNTDQVL-NEXT:    retq
11839;
11840; BITALG_NOVLX-LABEL: ugt_15_v4i64:
11841; BITALG_NOVLX:       # %bb.0:
11842; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11843; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11844; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11845; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11846; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]
11847; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11848; BITALG_NOVLX-NEXT:    retq
11849;
11850; BITALG-LABEL: ugt_15_v4i64:
11851; BITALG:       # %bb.0:
11852; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11853; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11854; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11855; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11856; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11857; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11858; BITALG-NEXT:    retq
11859  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11860  %3 = icmp ugt <4 x i64> %2, <i64 15, i64 15, i64 15, i64 15>
11861  %4 = sext <4 x i1> %3 to <4 x i64>
11862  ret <4 x i64> %4
11863}
11864
11865define <4 x i64> @ult_16_v4i64(<4 x i64> %0) {
11866; AVX1-LABEL: ult_16_v4i64:
11867; AVX1:       # %bb.0:
11868; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11869; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11870; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11871; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11872; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11873; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11874; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11875; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11876; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11877; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11878; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11879; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11880; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11881; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11882; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11883; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11884; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11885; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11886; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [16,16]
11887; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
11888; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
11889; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11890; AVX1-NEXT:    retq
11891;
11892; AVX2-LABEL: ult_16_v4i64:
11893; AVX2:       # %bb.0:
11894; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11895; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11896; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11897; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11898; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11899; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11900; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11901; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11902; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11903; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11904; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]
11905; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11906; AVX2-NEXT:    retq
11907;
11908; AVX512VPOPCNTDQ-LABEL: ult_16_v4i64:
11909; AVX512VPOPCNTDQ:       # %bb.0:
11910; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11911; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11912; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]
11913; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11914; AVX512VPOPCNTDQ-NEXT:    retq
11915;
11916; AVX512VPOPCNTDQVL-LABEL: ult_16_v4i64:
11917; AVX512VPOPCNTDQVL:       # %bb.0:
11918; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
11919; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11920; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11921; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11922; AVX512VPOPCNTDQVL-NEXT:    retq
11923;
11924; BITALG_NOVLX-LABEL: ult_16_v4i64:
11925; BITALG_NOVLX:       # %bb.0:
11926; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11927; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11928; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11929; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11930; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]
11931; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
11932; BITALG_NOVLX-NEXT:    retq
11933;
11934; BITALG-LABEL: ult_16_v4i64:
11935; BITALG:       # %bb.0:
11936; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
11937; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11938; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11939; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
11940; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
11941; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
11942; BITALG-NEXT:    retq
11943  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
11944  %3 = icmp ult <4 x i64> %2, <i64 16, i64 16, i64 16, i64 16>
11945  %4 = sext <4 x i1> %3 to <4 x i64>
11946  ret <4 x i64> %4
11947}
11948
11949define <4 x i64> @ugt_16_v4i64(<4 x i64> %0) {
11950; AVX1-LABEL: ugt_16_v4i64:
11951; AVX1:       # %bb.0:
11952; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11953; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11954; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11955; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11956; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
11957; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
11958; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
11959; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
11960; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
11961; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
11962; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
11963; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
11964; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
11965; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11966; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11967; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11968; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
11969; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
11970; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [16,16]
11971; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
11972; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
11973; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11974; AVX1-NEXT:    retq
11975;
11976; AVX2-LABEL: ugt_16_v4i64:
11977; AVX2:       # %bb.0:
11978; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11979; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
11980; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11981; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
11982; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
11983; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
11984; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
11985; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
11986; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11987; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
11988; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]
11989; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11990; AVX2-NEXT:    retq
11991;
11992; AVX512VPOPCNTDQ-LABEL: ugt_16_v4i64:
11993; AVX512VPOPCNTDQ:       # %bb.0:
11994; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
11995; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
11996; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]
11997; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
11998; AVX512VPOPCNTDQ-NEXT:    retq
11999;
12000; AVX512VPOPCNTDQVL-LABEL: ugt_16_v4i64:
12001; AVX512VPOPCNTDQVL:       # %bb.0:
12002; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12003; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12004; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12005; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12006; AVX512VPOPCNTDQVL-NEXT:    retq
12007;
12008; BITALG_NOVLX-LABEL: ugt_16_v4i64:
12009; BITALG_NOVLX:       # %bb.0:
12010; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12011; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12012; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12013; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12014; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]
12015; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12016; BITALG_NOVLX-NEXT:    retq
12017;
12018; BITALG-LABEL: ugt_16_v4i64:
12019; BITALG:       # %bb.0:
12020; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12021; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12022; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12023; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12024; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12025; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12026; BITALG-NEXT:    retq
12027  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12028  %3 = icmp ugt <4 x i64> %2, <i64 16, i64 16, i64 16, i64 16>
12029  %4 = sext <4 x i1> %3 to <4 x i64>
12030  ret <4 x i64> %4
12031}
12032
12033define <4 x i64> @ult_17_v4i64(<4 x i64> %0) {
12034; AVX1-LABEL: ult_17_v4i64:
12035; AVX1:       # %bb.0:
12036; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12037; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12038; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12039; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12040; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12041; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12042; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12043; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12044; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12045; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12046; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12047; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12048; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12049; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12050; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12051; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12052; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12053; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12054; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [17,17]
12055; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
12056; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
12057; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12058; AVX1-NEXT:    retq
12059;
12060; AVX2-LABEL: ult_17_v4i64:
12061; AVX2:       # %bb.0:
12062; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12063; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12064; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12065; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12066; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12067; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12068; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12069; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12070; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12071; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12072; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]
12073; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12074; AVX2-NEXT:    retq
12075;
12076; AVX512VPOPCNTDQ-LABEL: ult_17_v4i64:
12077; AVX512VPOPCNTDQ:       # %bb.0:
12078; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12079; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12080; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]
12081; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12082; AVX512VPOPCNTDQ-NEXT:    retq
12083;
12084; AVX512VPOPCNTDQVL-LABEL: ult_17_v4i64:
12085; AVX512VPOPCNTDQVL:       # %bb.0:
12086; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12087; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12088; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12089; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12090; AVX512VPOPCNTDQVL-NEXT:    retq
12091;
12092; BITALG_NOVLX-LABEL: ult_17_v4i64:
12093; BITALG_NOVLX:       # %bb.0:
12094; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12095; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12096; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12097; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12098; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]
12099; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12100; BITALG_NOVLX-NEXT:    retq
12101;
12102; BITALG-LABEL: ult_17_v4i64:
12103; BITALG:       # %bb.0:
12104; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12105; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12106; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12107; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12108; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12109; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12110; BITALG-NEXT:    retq
12111  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12112  %3 = icmp ult <4 x i64> %2, <i64 17, i64 17, i64 17, i64 17>
12113  %4 = sext <4 x i1> %3 to <4 x i64>
12114  ret <4 x i64> %4
12115}
12116
12117define <4 x i64> @ugt_17_v4i64(<4 x i64> %0) {
12118; AVX1-LABEL: ugt_17_v4i64:
12119; AVX1:       # %bb.0:
12120; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12121; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12122; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12123; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12124; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12125; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12126; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12127; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12128; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12129; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12130; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12131; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12132; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12133; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12134; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12135; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12136; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12137; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12138; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [17,17]
12139; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
12140; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
12141; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12142; AVX1-NEXT:    retq
12143;
12144; AVX2-LABEL: ugt_17_v4i64:
12145; AVX2:       # %bb.0:
12146; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12147; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12148; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12149; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12150; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12151; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12152; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12153; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12154; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12155; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12156; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]
12157; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12158; AVX2-NEXT:    retq
12159;
12160; AVX512VPOPCNTDQ-LABEL: ugt_17_v4i64:
12161; AVX512VPOPCNTDQ:       # %bb.0:
12162; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12163; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12164; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]
12165; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12166; AVX512VPOPCNTDQ-NEXT:    retq
12167;
12168; AVX512VPOPCNTDQVL-LABEL: ugt_17_v4i64:
12169; AVX512VPOPCNTDQVL:       # %bb.0:
12170; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12171; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12172; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12173; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12174; AVX512VPOPCNTDQVL-NEXT:    retq
12175;
12176; BITALG_NOVLX-LABEL: ugt_17_v4i64:
12177; BITALG_NOVLX:       # %bb.0:
12178; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12179; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12180; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12181; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12182; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]
12183; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12184; BITALG_NOVLX-NEXT:    retq
12185;
12186; BITALG-LABEL: ugt_17_v4i64:
12187; BITALG:       # %bb.0:
12188; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12189; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12190; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12191; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12192; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12193; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12194; BITALG-NEXT:    retq
12195  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12196  %3 = icmp ugt <4 x i64> %2, <i64 17, i64 17, i64 17, i64 17>
12197  %4 = sext <4 x i1> %3 to <4 x i64>
12198  ret <4 x i64> %4
12199}
12200
12201define <4 x i64> @ult_18_v4i64(<4 x i64> %0) {
12202; AVX1-LABEL: ult_18_v4i64:
12203; AVX1:       # %bb.0:
12204; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12205; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12206; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12207; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12208; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12209; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12210; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12211; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12212; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12213; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12214; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12215; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12216; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12217; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12218; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12219; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12220; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12221; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12222; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [18,18]
12223; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
12224; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
12225; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12226; AVX1-NEXT:    retq
12227;
12228; AVX2-LABEL: ult_18_v4i64:
12229; AVX2:       # %bb.0:
12230; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12231; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12232; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12233; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12234; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12235; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12236; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12237; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12238; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12239; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12240; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]
12241; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12242; AVX2-NEXT:    retq
12243;
12244; AVX512VPOPCNTDQ-LABEL: ult_18_v4i64:
12245; AVX512VPOPCNTDQ:       # %bb.0:
12246; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12247; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12248; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]
12249; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12250; AVX512VPOPCNTDQ-NEXT:    retq
12251;
12252; AVX512VPOPCNTDQVL-LABEL: ult_18_v4i64:
12253; AVX512VPOPCNTDQVL:       # %bb.0:
12254; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12255; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12256; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12257; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12258; AVX512VPOPCNTDQVL-NEXT:    retq
12259;
12260; BITALG_NOVLX-LABEL: ult_18_v4i64:
12261; BITALG_NOVLX:       # %bb.0:
12262; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12263; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12264; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12265; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12266; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]
12267; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12268; BITALG_NOVLX-NEXT:    retq
12269;
12270; BITALG-LABEL: ult_18_v4i64:
12271; BITALG:       # %bb.0:
12272; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12273; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12274; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12275; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12276; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12277; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12278; BITALG-NEXT:    retq
12279  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12280  %3 = icmp ult <4 x i64> %2, <i64 18, i64 18, i64 18, i64 18>
12281  %4 = sext <4 x i1> %3 to <4 x i64>
12282  ret <4 x i64> %4
12283}
12284
12285define <4 x i64> @ugt_18_v4i64(<4 x i64> %0) {
12286; AVX1-LABEL: ugt_18_v4i64:
12287; AVX1:       # %bb.0:
12288; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12289; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12290; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12291; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12292; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12293; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12294; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12295; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12296; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12297; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12298; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12299; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12300; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12301; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12302; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12303; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12304; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12305; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12306; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [18,18]
12307; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
12308; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
12309; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12310; AVX1-NEXT:    retq
12311;
12312; AVX2-LABEL: ugt_18_v4i64:
12313; AVX2:       # %bb.0:
12314; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12315; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12316; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12317; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12318; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12319; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12320; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12321; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12322; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12323; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12324; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]
12325; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12326; AVX2-NEXT:    retq
12327;
12328; AVX512VPOPCNTDQ-LABEL: ugt_18_v4i64:
12329; AVX512VPOPCNTDQ:       # %bb.0:
12330; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12331; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12332; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]
12333; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12334; AVX512VPOPCNTDQ-NEXT:    retq
12335;
12336; AVX512VPOPCNTDQVL-LABEL: ugt_18_v4i64:
12337; AVX512VPOPCNTDQVL:       # %bb.0:
12338; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12339; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12340; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12341; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12342; AVX512VPOPCNTDQVL-NEXT:    retq
12343;
12344; BITALG_NOVLX-LABEL: ugt_18_v4i64:
12345; BITALG_NOVLX:       # %bb.0:
12346; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12347; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12348; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12349; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12350; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]
12351; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12352; BITALG_NOVLX-NEXT:    retq
12353;
12354; BITALG-LABEL: ugt_18_v4i64:
12355; BITALG:       # %bb.0:
12356; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12357; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12358; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12359; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12360; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12361; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12362; BITALG-NEXT:    retq
12363  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12364  %3 = icmp ugt <4 x i64> %2, <i64 18, i64 18, i64 18, i64 18>
12365  %4 = sext <4 x i1> %3 to <4 x i64>
12366  ret <4 x i64> %4
12367}
12368
12369define <4 x i64> @ult_19_v4i64(<4 x i64> %0) {
12370; AVX1-LABEL: ult_19_v4i64:
12371; AVX1:       # %bb.0:
12372; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12373; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12374; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12375; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12376; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12377; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12378; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12379; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12380; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12381; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12382; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12383; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12384; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12385; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12386; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12387; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12388; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12389; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12390; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [19,19]
12391; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
12392; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
12393; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12394; AVX1-NEXT:    retq
12395;
12396; AVX2-LABEL: ult_19_v4i64:
12397; AVX2:       # %bb.0:
12398; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12399; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12400; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12401; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12402; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12403; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12404; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12405; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12406; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12407; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12408; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]
12409; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12410; AVX2-NEXT:    retq
12411;
12412; AVX512VPOPCNTDQ-LABEL: ult_19_v4i64:
12413; AVX512VPOPCNTDQ:       # %bb.0:
12414; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12415; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12416; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]
12417; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12418; AVX512VPOPCNTDQ-NEXT:    retq
12419;
12420; AVX512VPOPCNTDQVL-LABEL: ult_19_v4i64:
12421; AVX512VPOPCNTDQVL:       # %bb.0:
12422; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12423; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12424; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12425; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12426; AVX512VPOPCNTDQVL-NEXT:    retq
12427;
12428; BITALG_NOVLX-LABEL: ult_19_v4i64:
12429; BITALG_NOVLX:       # %bb.0:
12430; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12431; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12432; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12433; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12434; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]
12435; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12436; BITALG_NOVLX-NEXT:    retq
12437;
12438; BITALG-LABEL: ult_19_v4i64:
12439; BITALG:       # %bb.0:
12440; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12441; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12442; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12443; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12444; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12445; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12446; BITALG-NEXT:    retq
12447  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12448  %3 = icmp ult <4 x i64> %2, <i64 19, i64 19, i64 19, i64 19>
12449  %4 = sext <4 x i1> %3 to <4 x i64>
12450  ret <4 x i64> %4
12451}
12452
12453define <4 x i64> @ugt_19_v4i64(<4 x i64> %0) {
12454; AVX1-LABEL: ugt_19_v4i64:
12455; AVX1:       # %bb.0:
12456; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12457; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12458; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12459; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12460; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12461; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12462; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12463; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12464; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12465; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12466; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12467; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12468; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12469; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12470; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12471; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12472; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12473; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12474; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [19,19]
12475; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
12476; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
12477; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12478; AVX1-NEXT:    retq
12479;
12480; AVX2-LABEL: ugt_19_v4i64:
12481; AVX2:       # %bb.0:
12482; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12483; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12484; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12485; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12486; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12487; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12488; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12489; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12490; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12491; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12492; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]
12493; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12494; AVX2-NEXT:    retq
12495;
12496; AVX512VPOPCNTDQ-LABEL: ugt_19_v4i64:
12497; AVX512VPOPCNTDQ:       # %bb.0:
12498; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12499; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12500; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]
12501; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12502; AVX512VPOPCNTDQ-NEXT:    retq
12503;
12504; AVX512VPOPCNTDQVL-LABEL: ugt_19_v4i64:
12505; AVX512VPOPCNTDQVL:       # %bb.0:
12506; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12507; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12508; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12509; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12510; AVX512VPOPCNTDQVL-NEXT:    retq
12511;
12512; BITALG_NOVLX-LABEL: ugt_19_v4i64:
12513; BITALG_NOVLX:       # %bb.0:
12514; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12515; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12516; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12517; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12518; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]
12519; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12520; BITALG_NOVLX-NEXT:    retq
12521;
12522; BITALG-LABEL: ugt_19_v4i64:
12523; BITALG:       # %bb.0:
12524; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12525; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12526; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12527; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12528; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12529; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12530; BITALG-NEXT:    retq
12531  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12532  %3 = icmp ugt <4 x i64> %2, <i64 19, i64 19, i64 19, i64 19>
12533  %4 = sext <4 x i1> %3 to <4 x i64>
12534  ret <4 x i64> %4
12535}
12536
12537define <4 x i64> @ult_20_v4i64(<4 x i64> %0) {
12538; AVX1-LABEL: ult_20_v4i64:
12539; AVX1:       # %bb.0:
12540; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12541; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12542; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12543; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12544; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12545; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12546; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12547; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12548; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12549; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12550; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12551; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12552; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12553; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12554; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12555; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12556; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12557; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12558; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [20,20]
12559; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
12560; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
12561; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12562; AVX1-NEXT:    retq
12563;
12564; AVX2-LABEL: ult_20_v4i64:
12565; AVX2:       # %bb.0:
12566; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12567; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12568; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12569; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12570; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12571; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12572; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12573; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12574; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12575; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12576; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]
12577; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12578; AVX2-NEXT:    retq
12579;
12580; AVX512VPOPCNTDQ-LABEL: ult_20_v4i64:
12581; AVX512VPOPCNTDQ:       # %bb.0:
12582; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12583; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12584; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]
12585; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12586; AVX512VPOPCNTDQ-NEXT:    retq
12587;
12588; AVX512VPOPCNTDQVL-LABEL: ult_20_v4i64:
12589; AVX512VPOPCNTDQVL:       # %bb.0:
12590; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12591; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12592; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12593; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12594; AVX512VPOPCNTDQVL-NEXT:    retq
12595;
12596; BITALG_NOVLX-LABEL: ult_20_v4i64:
12597; BITALG_NOVLX:       # %bb.0:
12598; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12599; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12600; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12601; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12602; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]
12603; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12604; BITALG_NOVLX-NEXT:    retq
12605;
12606; BITALG-LABEL: ult_20_v4i64:
12607; BITALG:       # %bb.0:
12608; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12609; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12610; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12611; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12612; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12613; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12614; BITALG-NEXT:    retq
12615  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12616  %3 = icmp ult <4 x i64> %2, <i64 20, i64 20, i64 20, i64 20>
12617  %4 = sext <4 x i1> %3 to <4 x i64>
12618  ret <4 x i64> %4
12619}
12620
12621define <4 x i64> @ugt_20_v4i64(<4 x i64> %0) {
12622; AVX1-LABEL: ugt_20_v4i64:
12623; AVX1:       # %bb.0:
12624; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12625; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12626; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12627; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12628; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12629; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12630; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12631; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12632; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12633; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12634; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12635; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12636; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12637; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12638; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12639; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12640; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12641; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12642; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [20,20]
12643; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
12644; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
12645; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12646; AVX1-NEXT:    retq
12647;
12648; AVX2-LABEL: ugt_20_v4i64:
12649; AVX2:       # %bb.0:
12650; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12651; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12652; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12653; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12654; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12655; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12656; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12657; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12658; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12659; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12660; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]
12661; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12662; AVX2-NEXT:    retq
12663;
12664; AVX512VPOPCNTDQ-LABEL: ugt_20_v4i64:
12665; AVX512VPOPCNTDQ:       # %bb.0:
12666; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12667; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12668; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]
12669; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12670; AVX512VPOPCNTDQ-NEXT:    retq
12671;
12672; AVX512VPOPCNTDQVL-LABEL: ugt_20_v4i64:
12673; AVX512VPOPCNTDQVL:       # %bb.0:
12674; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12675; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12676; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12677; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12678; AVX512VPOPCNTDQVL-NEXT:    retq
12679;
12680; BITALG_NOVLX-LABEL: ugt_20_v4i64:
12681; BITALG_NOVLX:       # %bb.0:
12682; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12683; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12684; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12685; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12686; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]
12687; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12688; BITALG_NOVLX-NEXT:    retq
12689;
12690; BITALG-LABEL: ugt_20_v4i64:
12691; BITALG:       # %bb.0:
12692; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12693; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12694; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12695; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12696; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12697; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12698; BITALG-NEXT:    retq
12699  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12700  %3 = icmp ugt <4 x i64> %2, <i64 20, i64 20, i64 20, i64 20>
12701  %4 = sext <4 x i1> %3 to <4 x i64>
12702  ret <4 x i64> %4
12703}
12704
12705define <4 x i64> @ult_21_v4i64(<4 x i64> %0) {
12706; AVX1-LABEL: ult_21_v4i64:
12707; AVX1:       # %bb.0:
12708; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12709; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12710; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12711; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12712; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12713; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12714; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12715; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12716; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12717; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12718; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12719; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12720; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12721; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12722; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12723; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12724; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12725; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12726; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [21,21]
12727; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
12728; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
12729; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12730; AVX1-NEXT:    retq
12731;
12732; AVX2-LABEL: ult_21_v4i64:
12733; AVX2:       # %bb.0:
12734; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12735; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12736; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12737; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12738; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12739; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12740; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12741; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12742; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12743; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12744; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]
12745; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12746; AVX2-NEXT:    retq
12747;
12748; AVX512VPOPCNTDQ-LABEL: ult_21_v4i64:
12749; AVX512VPOPCNTDQ:       # %bb.0:
12750; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12751; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12752; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]
12753; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12754; AVX512VPOPCNTDQ-NEXT:    retq
12755;
12756; AVX512VPOPCNTDQVL-LABEL: ult_21_v4i64:
12757; AVX512VPOPCNTDQVL:       # %bb.0:
12758; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12759; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12760; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12761; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12762; AVX512VPOPCNTDQVL-NEXT:    retq
12763;
12764; BITALG_NOVLX-LABEL: ult_21_v4i64:
12765; BITALG_NOVLX:       # %bb.0:
12766; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12767; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12768; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12769; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12770; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]
12771; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12772; BITALG_NOVLX-NEXT:    retq
12773;
12774; BITALG-LABEL: ult_21_v4i64:
12775; BITALG:       # %bb.0:
12776; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12777; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12778; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12779; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12780; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12781; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12782; BITALG-NEXT:    retq
12783  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12784  %3 = icmp ult <4 x i64> %2, <i64 21, i64 21, i64 21, i64 21>
12785  %4 = sext <4 x i1> %3 to <4 x i64>
12786  ret <4 x i64> %4
12787}
12788
12789define <4 x i64> @ugt_21_v4i64(<4 x i64> %0) {
12790; AVX1-LABEL: ugt_21_v4i64:
12791; AVX1:       # %bb.0:
12792; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12793; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12794; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12795; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12796; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12797; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12798; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12799; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12800; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12801; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12802; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12803; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12804; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12805; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12806; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12807; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12808; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12809; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12810; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [21,21]
12811; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
12812; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
12813; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12814; AVX1-NEXT:    retq
12815;
12816; AVX2-LABEL: ugt_21_v4i64:
12817; AVX2:       # %bb.0:
12818; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12819; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12820; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12821; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12822; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12823; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12824; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12825; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12826; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12827; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12828; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]
12829; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12830; AVX2-NEXT:    retq
12831;
12832; AVX512VPOPCNTDQ-LABEL: ugt_21_v4i64:
12833; AVX512VPOPCNTDQ:       # %bb.0:
12834; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12835; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12836; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]
12837; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12838; AVX512VPOPCNTDQ-NEXT:    retq
12839;
12840; AVX512VPOPCNTDQVL-LABEL: ugt_21_v4i64:
12841; AVX512VPOPCNTDQVL:       # %bb.0:
12842; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12843; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12844; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12845; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12846; AVX512VPOPCNTDQVL-NEXT:    retq
12847;
12848; BITALG_NOVLX-LABEL: ugt_21_v4i64:
12849; BITALG_NOVLX:       # %bb.0:
12850; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12851; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12852; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12853; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12854; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]
12855; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12856; BITALG_NOVLX-NEXT:    retq
12857;
12858; BITALG-LABEL: ugt_21_v4i64:
12859; BITALG:       # %bb.0:
12860; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12861; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12862; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12863; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12864; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12865; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12866; BITALG-NEXT:    retq
12867  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12868  %3 = icmp ugt <4 x i64> %2, <i64 21, i64 21, i64 21, i64 21>
12869  %4 = sext <4 x i1> %3 to <4 x i64>
12870  ret <4 x i64> %4
12871}
12872
12873define <4 x i64> @ult_22_v4i64(<4 x i64> %0) {
12874; AVX1-LABEL: ult_22_v4i64:
12875; AVX1:       # %bb.0:
12876; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12877; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12878; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12879; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12880; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12881; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12882; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12883; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12884; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12885; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12886; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12887; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12888; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12889; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12890; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12891; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12892; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12893; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12894; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [22,22]
12895; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
12896; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
12897; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12898; AVX1-NEXT:    retq
12899;
12900; AVX2-LABEL: ult_22_v4i64:
12901; AVX2:       # %bb.0:
12902; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12903; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12904; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12905; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12906; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12907; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12908; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12909; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12910; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12911; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12912; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]
12913; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12914; AVX2-NEXT:    retq
12915;
12916; AVX512VPOPCNTDQ-LABEL: ult_22_v4i64:
12917; AVX512VPOPCNTDQ:       # %bb.0:
12918; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12919; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
12920; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]
12921; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12922; AVX512VPOPCNTDQ-NEXT:    retq
12923;
12924; AVX512VPOPCNTDQVL-LABEL: ult_22_v4i64:
12925; AVX512VPOPCNTDQVL:       # %bb.0:
12926; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
12927; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12928; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12929; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12930; AVX512VPOPCNTDQVL-NEXT:    retq
12931;
12932; BITALG_NOVLX-LABEL: ult_22_v4i64:
12933; BITALG_NOVLX:       # %bb.0:
12934; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
12935; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12936; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12937; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12938; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]
12939; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
12940; BITALG_NOVLX-NEXT:    retq
12941;
12942; BITALG-LABEL: ult_22_v4i64:
12943; BITALG:       # %bb.0:
12944; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
12945; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12946; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12947; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
12948; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
12949; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
12950; BITALG-NEXT:    retq
12951  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
12952  %3 = icmp ult <4 x i64> %2, <i64 22, i64 22, i64 22, i64 22>
12953  %4 = sext <4 x i1> %3 to <4 x i64>
12954  ret <4 x i64> %4
12955}
12956
12957define <4 x i64> @ugt_22_v4i64(<4 x i64> %0) {
12958; AVX1-LABEL: ugt_22_v4i64:
12959; AVX1:       # %bb.0:
12960; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12961; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12962; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12963; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12964; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
12965; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
12966; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
12967; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
12968; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
12969; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
12970; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
12971; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
12972; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
12973; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12974; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12975; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12976; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
12977; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
12978; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [22,22]
12979; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
12980; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
12981; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12982; AVX1-NEXT:    retq
12983;
12984; AVX2-LABEL: ugt_22_v4i64:
12985; AVX2:       # %bb.0:
12986; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12987; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
12988; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12989; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
12990; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
12991; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
12992; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
12993; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
12994; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12995; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
12996; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]
12997; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
12998; AVX2-NEXT:    retq
12999;
13000; AVX512VPOPCNTDQ-LABEL: ugt_22_v4i64:
13001; AVX512VPOPCNTDQ:       # %bb.0:
13002; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13003; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13004; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]
13005; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13006; AVX512VPOPCNTDQ-NEXT:    retq
13007;
13008; AVX512VPOPCNTDQVL-LABEL: ugt_22_v4i64:
13009; AVX512VPOPCNTDQVL:       # %bb.0:
13010; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13011; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13012; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13013; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13014; AVX512VPOPCNTDQVL-NEXT:    retq
13015;
13016; BITALG_NOVLX-LABEL: ugt_22_v4i64:
13017; BITALG_NOVLX:       # %bb.0:
13018; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13019; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13020; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13021; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13022; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]
13023; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13024; BITALG_NOVLX-NEXT:    retq
13025;
13026; BITALG-LABEL: ugt_22_v4i64:
13027; BITALG:       # %bb.0:
13028; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13029; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13030; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13031; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13032; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13033; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13034; BITALG-NEXT:    retq
13035  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13036  %3 = icmp ugt <4 x i64> %2, <i64 22, i64 22, i64 22, i64 22>
13037  %4 = sext <4 x i1> %3 to <4 x i64>
13038  ret <4 x i64> %4
13039}
13040
13041define <4 x i64> @ult_23_v4i64(<4 x i64> %0) {
13042; AVX1-LABEL: ult_23_v4i64:
13043; AVX1:       # %bb.0:
13044; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13045; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13046; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13047; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13048; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13049; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13050; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13051; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13052; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13053; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13054; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13055; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13056; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13057; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13058; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13059; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13060; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13061; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13062; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [23,23]
13063; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
13064; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
13065; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13066; AVX1-NEXT:    retq
13067;
13068; AVX2-LABEL: ult_23_v4i64:
13069; AVX2:       # %bb.0:
13070; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13071; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13072; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13073; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13074; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13075; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13076; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13077; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13078; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13079; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13080; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]
13081; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13082; AVX2-NEXT:    retq
13083;
13084; AVX512VPOPCNTDQ-LABEL: ult_23_v4i64:
13085; AVX512VPOPCNTDQ:       # %bb.0:
13086; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13087; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13088; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]
13089; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13090; AVX512VPOPCNTDQ-NEXT:    retq
13091;
13092; AVX512VPOPCNTDQVL-LABEL: ult_23_v4i64:
13093; AVX512VPOPCNTDQVL:       # %bb.0:
13094; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13095; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13096; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13097; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13098; AVX512VPOPCNTDQVL-NEXT:    retq
13099;
13100; BITALG_NOVLX-LABEL: ult_23_v4i64:
13101; BITALG_NOVLX:       # %bb.0:
13102; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13103; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13104; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13105; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13106; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]
13107; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13108; BITALG_NOVLX-NEXT:    retq
13109;
13110; BITALG-LABEL: ult_23_v4i64:
13111; BITALG:       # %bb.0:
13112; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13113; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13114; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13115; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13116; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13117; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13118; BITALG-NEXT:    retq
13119  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13120  %3 = icmp ult <4 x i64> %2, <i64 23, i64 23, i64 23, i64 23>
13121  %4 = sext <4 x i1> %3 to <4 x i64>
13122  ret <4 x i64> %4
13123}
13124
13125define <4 x i64> @ugt_23_v4i64(<4 x i64> %0) {
13126; AVX1-LABEL: ugt_23_v4i64:
13127; AVX1:       # %bb.0:
13128; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13129; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13130; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13131; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13132; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13133; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13134; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13135; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13136; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13137; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13138; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13139; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13140; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13141; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13142; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13143; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13144; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13145; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13146; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [23,23]
13147; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
13148; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
13149; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13150; AVX1-NEXT:    retq
13151;
13152; AVX2-LABEL: ugt_23_v4i64:
13153; AVX2:       # %bb.0:
13154; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13155; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13156; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13157; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13158; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13159; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13160; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13161; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13162; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13163; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13164; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]
13165; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13166; AVX2-NEXT:    retq
13167;
13168; AVX512VPOPCNTDQ-LABEL: ugt_23_v4i64:
13169; AVX512VPOPCNTDQ:       # %bb.0:
13170; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13171; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13172; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]
13173; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13174; AVX512VPOPCNTDQ-NEXT:    retq
13175;
13176; AVX512VPOPCNTDQVL-LABEL: ugt_23_v4i64:
13177; AVX512VPOPCNTDQVL:       # %bb.0:
13178; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13179; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13180; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13181; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13182; AVX512VPOPCNTDQVL-NEXT:    retq
13183;
13184; BITALG_NOVLX-LABEL: ugt_23_v4i64:
13185; BITALG_NOVLX:       # %bb.0:
13186; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13187; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13188; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13189; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13190; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]
13191; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13192; BITALG_NOVLX-NEXT:    retq
13193;
13194; BITALG-LABEL: ugt_23_v4i64:
13195; BITALG:       # %bb.0:
13196; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13197; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13198; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13199; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13200; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13201; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13202; BITALG-NEXT:    retq
13203  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13204  %3 = icmp ugt <4 x i64> %2, <i64 23, i64 23, i64 23, i64 23>
13205  %4 = sext <4 x i1> %3 to <4 x i64>
13206  ret <4 x i64> %4
13207}
13208
13209define <4 x i64> @ult_24_v4i64(<4 x i64> %0) {
13210; AVX1-LABEL: ult_24_v4i64:
13211; AVX1:       # %bb.0:
13212; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13213; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13214; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13215; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13216; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13217; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13218; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13219; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13220; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13221; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13222; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13223; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13224; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13225; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13226; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13227; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13228; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13229; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13230; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [24,24]
13231; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
13232; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
13233; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13234; AVX1-NEXT:    retq
13235;
13236; AVX2-LABEL: ult_24_v4i64:
13237; AVX2:       # %bb.0:
13238; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13239; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13240; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13241; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13242; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13243; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13244; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13245; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13246; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13247; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13248; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]
13249; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13250; AVX2-NEXT:    retq
13251;
13252; AVX512VPOPCNTDQ-LABEL: ult_24_v4i64:
13253; AVX512VPOPCNTDQ:       # %bb.0:
13254; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13255; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13256; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]
13257; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13258; AVX512VPOPCNTDQ-NEXT:    retq
13259;
13260; AVX512VPOPCNTDQVL-LABEL: ult_24_v4i64:
13261; AVX512VPOPCNTDQVL:       # %bb.0:
13262; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13263; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13264; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13265; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13266; AVX512VPOPCNTDQVL-NEXT:    retq
13267;
13268; BITALG_NOVLX-LABEL: ult_24_v4i64:
13269; BITALG_NOVLX:       # %bb.0:
13270; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13271; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13272; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13273; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13274; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]
13275; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13276; BITALG_NOVLX-NEXT:    retq
13277;
13278; BITALG-LABEL: ult_24_v4i64:
13279; BITALG:       # %bb.0:
13280; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13281; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13282; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13283; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13284; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13285; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13286; BITALG-NEXT:    retq
13287  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13288  %3 = icmp ult <4 x i64> %2, <i64 24, i64 24, i64 24, i64 24>
13289  %4 = sext <4 x i1> %3 to <4 x i64>
13290  ret <4 x i64> %4
13291}
13292
13293define <4 x i64> @ugt_24_v4i64(<4 x i64> %0) {
13294; AVX1-LABEL: ugt_24_v4i64:
13295; AVX1:       # %bb.0:
13296; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13297; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13298; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13299; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13300; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13301; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13302; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13303; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13304; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13305; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13306; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13307; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13308; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13309; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13310; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13311; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13312; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13313; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13314; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [24,24]
13315; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
13316; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
13317; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13318; AVX1-NEXT:    retq
13319;
13320; AVX2-LABEL: ugt_24_v4i64:
13321; AVX2:       # %bb.0:
13322; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13323; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13324; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13325; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13326; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13327; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13328; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13329; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13330; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13331; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13332; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]
13333; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13334; AVX2-NEXT:    retq
13335;
13336; AVX512VPOPCNTDQ-LABEL: ugt_24_v4i64:
13337; AVX512VPOPCNTDQ:       # %bb.0:
13338; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13339; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13340; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]
13341; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13342; AVX512VPOPCNTDQ-NEXT:    retq
13343;
13344; AVX512VPOPCNTDQVL-LABEL: ugt_24_v4i64:
13345; AVX512VPOPCNTDQVL:       # %bb.0:
13346; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13347; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13348; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13349; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13350; AVX512VPOPCNTDQVL-NEXT:    retq
13351;
13352; BITALG_NOVLX-LABEL: ugt_24_v4i64:
13353; BITALG_NOVLX:       # %bb.0:
13354; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13355; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13356; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13357; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13358; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]
13359; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13360; BITALG_NOVLX-NEXT:    retq
13361;
13362; BITALG-LABEL: ugt_24_v4i64:
13363; BITALG:       # %bb.0:
13364; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13365; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13366; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13367; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13368; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13369; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13370; BITALG-NEXT:    retq
13371  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13372  %3 = icmp ugt <4 x i64> %2, <i64 24, i64 24, i64 24, i64 24>
13373  %4 = sext <4 x i1> %3 to <4 x i64>
13374  ret <4 x i64> %4
13375}
13376
13377define <4 x i64> @ult_25_v4i64(<4 x i64> %0) {
13378; AVX1-LABEL: ult_25_v4i64:
13379; AVX1:       # %bb.0:
13380; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13381; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13382; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13383; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13384; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13385; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13386; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13387; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13388; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13389; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13390; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13391; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13392; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13393; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13394; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13395; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13396; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13397; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13398; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [25,25]
13399; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
13400; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
13401; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13402; AVX1-NEXT:    retq
13403;
13404; AVX2-LABEL: ult_25_v4i64:
13405; AVX2:       # %bb.0:
13406; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13407; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13408; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13409; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13410; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13411; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13412; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13413; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13414; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13415; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13416; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]
13417; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13418; AVX2-NEXT:    retq
13419;
13420; AVX512VPOPCNTDQ-LABEL: ult_25_v4i64:
13421; AVX512VPOPCNTDQ:       # %bb.0:
13422; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13423; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13424; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]
13425; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13426; AVX512VPOPCNTDQ-NEXT:    retq
13427;
13428; AVX512VPOPCNTDQVL-LABEL: ult_25_v4i64:
13429; AVX512VPOPCNTDQVL:       # %bb.0:
13430; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13431; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13432; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13433; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13434; AVX512VPOPCNTDQVL-NEXT:    retq
13435;
13436; BITALG_NOVLX-LABEL: ult_25_v4i64:
13437; BITALG_NOVLX:       # %bb.0:
13438; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13439; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13440; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13441; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13442; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]
13443; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13444; BITALG_NOVLX-NEXT:    retq
13445;
13446; BITALG-LABEL: ult_25_v4i64:
13447; BITALG:       # %bb.0:
13448; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13449; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13450; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13451; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13452; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13453; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13454; BITALG-NEXT:    retq
13455  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13456  %3 = icmp ult <4 x i64> %2, <i64 25, i64 25, i64 25, i64 25>
13457  %4 = sext <4 x i1> %3 to <4 x i64>
13458  ret <4 x i64> %4
13459}
13460
13461define <4 x i64> @ugt_25_v4i64(<4 x i64> %0) {
13462; AVX1-LABEL: ugt_25_v4i64:
13463; AVX1:       # %bb.0:
13464; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13465; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13466; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13467; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13468; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13469; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13470; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13471; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13472; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13473; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13474; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13475; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13476; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13477; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13478; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13479; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13480; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13481; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13482; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [25,25]
13483; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
13484; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
13485; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13486; AVX1-NEXT:    retq
13487;
13488; AVX2-LABEL: ugt_25_v4i64:
13489; AVX2:       # %bb.0:
13490; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13491; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13492; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13493; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13494; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13495; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13496; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13497; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13498; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13499; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13500; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]
13501; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13502; AVX2-NEXT:    retq
13503;
13504; AVX512VPOPCNTDQ-LABEL: ugt_25_v4i64:
13505; AVX512VPOPCNTDQ:       # %bb.0:
13506; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13507; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13508; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]
13509; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13510; AVX512VPOPCNTDQ-NEXT:    retq
13511;
13512; AVX512VPOPCNTDQVL-LABEL: ugt_25_v4i64:
13513; AVX512VPOPCNTDQVL:       # %bb.0:
13514; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13515; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13516; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13517; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13518; AVX512VPOPCNTDQVL-NEXT:    retq
13519;
13520; BITALG_NOVLX-LABEL: ugt_25_v4i64:
13521; BITALG_NOVLX:       # %bb.0:
13522; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13523; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13524; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13525; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13526; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]
13527; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13528; BITALG_NOVLX-NEXT:    retq
13529;
13530; BITALG-LABEL: ugt_25_v4i64:
13531; BITALG:       # %bb.0:
13532; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13533; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13534; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13535; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13536; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13537; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13538; BITALG-NEXT:    retq
13539  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13540  %3 = icmp ugt <4 x i64> %2, <i64 25, i64 25, i64 25, i64 25>
13541  %4 = sext <4 x i1> %3 to <4 x i64>
13542  ret <4 x i64> %4
13543}
13544
13545define <4 x i64> @ult_26_v4i64(<4 x i64> %0) {
13546; AVX1-LABEL: ult_26_v4i64:
13547; AVX1:       # %bb.0:
13548; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13549; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13550; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13551; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13552; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13553; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13554; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13555; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13556; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13557; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13558; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13559; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13560; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13561; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13562; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13563; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13564; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13565; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13566; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [26,26]
13567; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
13568; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
13569; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13570; AVX1-NEXT:    retq
13571;
13572; AVX2-LABEL: ult_26_v4i64:
13573; AVX2:       # %bb.0:
13574; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13575; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13576; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13577; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13578; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13579; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13580; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13581; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13582; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13583; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13584; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]
13585; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13586; AVX2-NEXT:    retq
13587;
13588; AVX512VPOPCNTDQ-LABEL: ult_26_v4i64:
13589; AVX512VPOPCNTDQ:       # %bb.0:
13590; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13591; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13592; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]
13593; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13594; AVX512VPOPCNTDQ-NEXT:    retq
13595;
13596; AVX512VPOPCNTDQVL-LABEL: ult_26_v4i64:
13597; AVX512VPOPCNTDQVL:       # %bb.0:
13598; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13599; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13600; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13601; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13602; AVX512VPOPCNTDQVL-NEXT:    retq
13603;
13604; BITALG_NOVLX-LABEL: ult_26_v4i64:
13605; BITALG_NOVLX:       # %bb.0:
13606; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13607; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13608; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13609; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13610; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]
13611; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13612; BITALG_NOVLX-NEXT:    retq
13613;
13614; BITALG-LABEL: ult_26_v4i64:
13615; BITALG:       # %bb.0:
13616; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13617; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13618; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13619; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13620; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13621; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13622; BITALG-NEXT:    retq
13623  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13624  %3 = icmp ult <4 x i64> %2, <i64 26, i64 26, i64 26, i64 26>
13625  %4 = sext <4 x i1> %3 to <4 x i64>
13626  ret <4 x i64> %4
13627}
13628
13629define <4 x i64> @ugt_26_v4i64(<4 x i64> %0) {
13630; AVX1-LABEL: ugt_26_v4i64:
13631; AVX1:       # %bb.0:
13632; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13633; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13634; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13635; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13636; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13637; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13638; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13639; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13640; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13641; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13642; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13643; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13644; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13645; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13646; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13647; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13648; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13649; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13650; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [26,26]
13651; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
13652; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
13653; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13654; AVX1-NEXT:    retq
13655;
13656; AVX2-LABEL: ugt_26_v4i64:
13657; AVX2:       # %bb.0:
13658; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13659; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13660; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13661; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13662; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13663; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13664; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13665; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13666; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13667; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13668; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]
13669; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13670; AVX2-NEXT:    retq
13671;
13672; AVX512VPOPCNTDQ-LABEL: ugt_26_v4i64:
13673; AVX512VPOPCNTDQ:       # %bb.0:
13674; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13675; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13676; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]
13677; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13678; AVX512VPOPCNTDQ-NEXT:    retq
13679;
13680; AVX512VPOPCNTDQVL-LABEL: ugt_26_v4i64:
13681; AVX512VPOPCNTDQVL:       # %bb.0:
13682; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13683; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13684; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13685; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13686; AVX512VPOPCNTDQVL-NEXT:    retq
13687;
13688; BITALG_NOVLX-LABEL: ugt_26_v4i64:
13689; BITALG_NOVLX:       # %bb.0:
13690; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13691; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13692; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13693; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13694; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]
13695; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13696; BITALG_NOVLX-NEXT:    retq
13697;
13698; BITALG-LABEL: ugt_26_v4i64:
13699; BITALG:       # %bb.0:
13700; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13701; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13702; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13703; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13704; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13705; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13706; BITALG-NEXT:    retq
13707  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13708  %3 = icmp ugt <4 x i64> %2, <i64 26, i64 26, i64 26, i64 26>
13709  %4 = sext <4 x i1> %3 to <4 x i64>
13710  ret <4 x i64> %4
13711}
13712
13713define <4 x i64> @ult_27_v4i64(<4 x i64> %0) {
13714; AVX1-LABEL: ult_27_v4i64:
13715; AVX1:       # %bb.0:
13716; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13717; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13718; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13719; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13720; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13721; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13722; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13723; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13724; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13725; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13726; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13727; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13728; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13729; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13730; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13731; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13732; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13733; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13734; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [27,27]
13735; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
13736; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
13737; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13738; AVX1-NEXT:    retq
13739;
13740; AVX2-LABEL: ult_27_v4i64:
13741; AVX2:       # %bb.0:
13742; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13743; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13744; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13745; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13746; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13747; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13748; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13749; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13750; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13751; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13752; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]
13753; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13754; AVX2-NEXT:    retq
13755;
13756; AVX512VPOPCNTDQ-LABEL: ult_27_v4i64:
13757; AVX512VPOPCNTDQ:       # %bb.0:
13758; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13759; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13760; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]
13761; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13762; AVX512VPOPCNTDQ-NEXT:    retq
13763;
13764; AVX512VPOPCNTDQVL-LABEL: ult_27_v4i64:
13765; AVX512VPOPCNTDQVL:       # %bb.0:
13766; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13767; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13768; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13769; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13770; AVX512VPOPCNTDQVL-NEXT:    retq
13771;
13772; BITALG_NOVLX-LABEL: ult_27_v4i64:
13773; BITALG_NOVLX:       # %bb.0:
13774; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13775; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13776; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13777; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13778; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]
13779; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13780; BITALG_NOVLX-NEXT:    retq
13781;
13782; BITALG-LABEL: ult_27_v4i64:
13783; BITALG:       # %bb.0:
13784; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13785; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13786; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13787; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13788; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13789; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13790; BITALG-NEXT:    retq
13791  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13792  %3 = icmp ult <4 x i64> %2, <i64 27, i64 27, i64 27, i64 27>
13793  %4 = sext <4 x i1> %3 to <4 x i64>
13794  ret <4 x i64> %4
13795}
13796
13797define <4 x i64> @ugt_27_v4i64(<4 x i64> %0) {
13798; AVX1-LABEL: ugt_27_v4i64:
13799; AVX1:       # %bb.0:
13800; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13801; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13802; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13803; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13804; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13805; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13806; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13807; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13808; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13809; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13810; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13811; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13812; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13813; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13814; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13815; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13816; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13817; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13818; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [27,27]
13819; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
13820; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
13821; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13822; AVX1-NEXT:    retq
13823;
13824; AVX2-LABEL: ugt_27_v4i64:
13825; AVX2:       # %bb.0:
13826; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13827; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13828; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13829; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13830; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13831; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13832; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13833; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13834; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13835; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13836; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]
13837; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13838; AVX2-NEXT:    retq
13839;
13840; AVX512VPOPCNTDQ-LABEL: ugt_27_v4i64:
13841; AVX512VPOPCNTDQ:       # %bb.0:
13842; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13843; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13844; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]
13845; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13846; AVX512VPOPCNTDQ-NEXT:    retq
13847;
13848; AVX512VPOPCNTDQVL-LABEL: ugt_27_v4i64:
13849; AVX512VPOPCNTDQVL:       # %bb.0:
13850; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13851; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13852; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13853; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13854; AVX512VPOPCNTDQVL-NEXT:    retq
13855;
13856; BITALG_NOVLX-LABEL: ugt_27_v4i64:
13857; BITALG_NOVLX:       # %bb.0:
13858; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13859; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13860; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13861; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13862; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]
13863; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
13864; BITALG_NOVLX-NEXT:    retq
13865;
13866; BITALG-LABEL: ugt_27_v4i64:
13867; BITALG:       # %bb.0:
13868; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13869; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13870; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13871; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13872; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13873; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13874; BITALG-NEXT:    retq
13875  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13876  %3 = icmp ugt <4 x i64> %2, <i64 27, i64 27, i64 27, i64 27>
13877  %4 = sext <4 x i1> %3 to <4 x i64>
13878  ret <4 x i64> %4
13879}
13880
13881define <4 x i64> @ult_28_v4i64(<4 x i64> %0) {
13882; AVX1-LABEL: ult_28_v4i64:
13883; AVX1:       # %bb.0:
13884; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13885; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13886; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13887; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13888; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13889; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13890; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13891; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13892; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13893; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13894; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13895; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13896; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13897; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13898; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13899; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13900; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13901; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13902; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [28,28]
13903; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
13904; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
13905; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13906; AVX1-NEXT:    retq
13907;
13908; AVX2-LABEL: ult_28_v4i64:
13909; AVX2:       # %bb.0:
13910; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13911; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13912; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13913; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13914; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13915; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
13916; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
13917; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
13918; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13919; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13920; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]
13921; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13922; AVX2-NEXT:    retq
13923;
13924; AVX512VPOPCNTDQ-LABEL: ult_28_v4i64:
13925; AVX512VPOPCNTDQ:       # %bb.0:
13926; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13927; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
13928; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]
13929; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13930; AVX512VPOPCNTDQ-NEXT:    retq
13931;
13932; AVX512VPOPCNTDQVL-LABEL: ult_28_v4i64:
13933; AVX512VPOPCNTDQVL:       # %bb.0:
13934; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
13935; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13936; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13937; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13938; AVX512VPOPCNTDQVL-NEXT:    retq
13939;
13940; BITALG_NOVLX-LABEL: ult_28_v4i64:
13941; BITALG_NOVLX:       # %bb.0:
13942; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
13943; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13944; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13945; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13946; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]
13947; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
13948; BITALG_NOVLX-NEXT:    retq
13949;
13950; BITALG-LABEL: ult_28_v4i64:
13951; BITALG:       # %bb.0:
13952; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
13953; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13954; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
13955; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
13956; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
13957; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
13958; BITALG-NEXT:    retq
13959  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
13960  %3 = icmp ult <4 x i64> %2, <i64 28, i64 28, i64 28, i64 28>
13961  %4 = sext <4 x i1> %3 to <4 x i64>
13962  ret <4 x i64> %4
13963}
13964
13965define <4 x i64> @ugt_28_v4i64(<4 x i64> %0) {
13966; AVX1-LABEL: ugt_28_v4i64:
13967; AVX1:       # %bb.0:
13968; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13969; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13970; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13971; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13972; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
13973; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
13974; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
13975; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
13976; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
13977; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
13978; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
13979; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
13980; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
13981; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13982; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13983; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13984; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
13985; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
13986; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [28,28]
13987; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
13988; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
13989; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
13990; AVX1-NEXT:    retq
13991;
13992; AVX2-LABEL: ugt_28_v4i64:
13993; AVX2:       # %bb.0:
13994; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13995; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
13996; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13997; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
13998; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
13999; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14000; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14001; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14002; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14003; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14004; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]
14005; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14006; AVX2-NEXT:    retq
14007;
14008; AVX512VPOPCNTDQ-LABEL: ugt_28_v4i64:
14009; AVX512VPOPCNTDQ:       # %bb.0:
14010; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14011; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14012; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]
14013; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14014; AVX512VPOPCNTDQ-NEXT:    retq
14015;
14016; AVX512VPOPCNTDQVL-LABEL: ugt_28_v4i64:
14017; AVX512VPOPCNTDQVL:       # %bb.0:
14018; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14019; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14020; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14021; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14022; AVX512VPOPCNTDQVL-NEXT:    retq
14023;
14024; BITALG_NOVLX-LABEL: ugt_28_v4i64:
14025; BITALG_NOVLX:       # %bb.0:
14026; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14027; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14028; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14029; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14030; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]
14031; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14032; BITALG_NOVLX-NEXT:    retq
14033;
14034; BITALG-LABEL: ugt_28_v4i64:
14035; BITALG:       # %bb.0:
14036; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14037; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14038; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14039; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14040; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14041; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14042; BITALG-NEXT:    retq
14043  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14044  %3 = icmp ugt <4 x i64> %2, <i64 28, i64 28, i64 28, i64 28>
14045  %4 = sext <4 x i1> %3 to <4 x i64>
14046  ret <4 x i64> %4
14047}
14048
14049define <4 x i64> @ult_29_v4i64(<4 x i64> %0) {
14050; AVX1-LABEL: ult_29_v4i64:
14051; AVX1:       # %bb.0:
14052; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14053; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14054; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14055; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14056; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14057; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14058; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14059; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14060; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14061; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14062; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14063; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14064; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14065; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14066; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14067; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14068; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14069; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14070; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [29,29]
14071; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
14072; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
14073; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14074; AVX1-NEXT:    retq
14075;
14076; AVX2-LABEL: ult_29_v4i64:
14077; AVX2:       # %bb.0:
14078; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14079; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14080; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14081; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14082; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14083; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14084; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14085; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14086; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14087; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14088; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]
14089; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14090; AVX2-NEXT:    retq
14091;
14092; AVX512VPOPCNTDQ-LABEL: ult_29_v4i64:
14093; AVX512VPOPCNTDQ:       # %bb.0:
14094; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14095; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14096; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]
14097; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14098; AVX512VPOPCNTDQ-NEXT:    retq
14099;
14100; AVX512VPOPCNTDQVL-LABEL: ult_29_v4i64:
14101; AVX512VPOPCNTDQVL:       # %bb.0:
14102; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14103; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14104; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14105; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14106; AVX512VPOPCNTDQVL-NEXT:    retq
14107;
14108; BITALG_NOVLX-LABEL: ult_29_v4i64:
14109; BITALG_NOVLX:       # %bb.0:
14110; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14111; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14112; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14113; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14114; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]
14115; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14116; BITALG_NOVLX-NEXT:    retq
14117;
14118; BITALG-LABEL: ult_29_v4i64:
14119; BITALG:       # %bb.0:
14120; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14121; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14122; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14123; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14124; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14125; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14126; BITALG-NEXT:    retq
14127  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14128  %3 = icmp ult <4 x i64> %2, <i64 29, i64 29, i64 29, i64 29>
14129  %4 = sext <4 x i1> %3 to <4 x i64>
14130  ret <4 x i64> %4
14131}
14132
14133define <4 x i64> @ugt_29_v4i64(<4 x i64> %0) {
14134; AVX1-LABEL: ugt_29_v4i64:
14135; AVX1:       # %bb.0:
14136; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14137; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14138; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14139; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14140; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14141; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14142; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14143; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14144; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14145; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14146; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14147; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14148; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14149; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14150; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14151; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14152; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14153; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14154; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [29,29]
14155; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
14156; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
14157; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14158; AVX1-NEXT:    retq
14159;
14160; AVX2-LABEL: ugt_29_v4i64:
14161; AVX2:       # %bb.0:
14162; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14163; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14164; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14165; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14166; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14167; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14168; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14169; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14170; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14171; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14172; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]
14173; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14174; AVX2-NEXT:    retq
14175;
14176; AVX512VPOPCNTDQ-LABEL: ugt_29_v4i64:
14177; AVX512VPOPCNTDQ:       # %bb.0:
14178; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14179; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14180; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]
14181; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14182; AVX512VPOPCNTDQ-NEXT:    retq
14183;
14184; AVX512VPOPCNTDQVL-LABEL: ugt_29_v4i64:
14185; AVX512VPOPCNTDQVL:       # %bb.0:
14186; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14187; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14188; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14189; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14190; AVX512VPOPCNTDQVL-NEXT:    retq
14191;
14192; BITALG_NOVLX-LABEL: ugt_29_v4i64:
14193; BITALG_NOVLX:       # %bb.0:
14194; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14195; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14196; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14197; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14198; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]
14199; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14200; BITALG_NOVLX-NEXT:    retq
14201;
14202; BITALG-LABEL: ugt_29_v4i64:
14203; BITALG:       # %bb.0:
14204; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14205; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14206; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14207; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14208; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14209; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14210; BITALG-NEXT:    retq
14211  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14212  %3 = icmp ugt <4 x i64> %2, <i64 29, i64 29, i64 29, i64 29>
14213  %4 = sext <4 x i1> %3 to <4 x i64>
14214  ret <4 x i64> %4
14215}
14216
14217define <4 x i64> @ult_30_v4i64(<4 x i64> %0) {
14218; AVX1-LABEL: ult_30_v4i64:
14219; AVX1:       # %bb.0:
14220; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14221; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14222; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14223; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14224; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14225; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14226; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14227; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14228; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14229; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14230; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14231; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14232; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14233; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14234; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14235; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14236; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14237; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14238; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [30,30]
14239; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
14240; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
14241; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14242; AVX1-NEXT:    retq
14243;
14244; AVX2-LABEL: ult_30_v4i64:
14245; AVX2:       # %bb.0:
14246; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14247; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14248; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14249; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14250; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14251; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14252; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14253; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14254; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14255; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14256; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]
14257; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14258; AVX2-NEXT:    retq
14259;
14260; AVX512VPOPCNTDQ-LABEL: ult_30_v4i64:
14261; AVX512VPOPCNTDQ:       # %bb.0:
14262; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14263; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14264; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]
14265; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14266; AVX512VPOPCNTDQ-NEXT:    retq
14267;
14268; AVX512VPOPCNTDQVL-LABEL: ult_30_v4i64:
14269; AVX512VPOPCNTDQVL:       # %bb.0:
14270; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14271; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14272; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14273; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14274; AVX512VPOPCNTDQVL-NEXT:    retq
14275;
14276; BITALG_NOVLX-LABEL: ult_30_v4i64:
14277; BITALG_NOVLX:       # %bb.0:
14278; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14279; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14280; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14281; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14282; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]
14283; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14284; BITALG_NOVLX-NEXT:    retq
14285;
14286; BITALG-LABEL: ult_30_v4i64:
14287; BITALG:       # %bb.0:
14288; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14289; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14290; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14291; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14292; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14293; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14294; BITALG-NEXT:    retq
14295  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14296  %3 = icmp ult <4 x i64> %2, <i64 30, i64 30, i64 30, i64 30>
14297  %4 = sext <4 x i1> %3 to <4 x i64>
14298  ret <4 x i64> %4
14299}
14300
14301define <4 x i64> @ugt_30_v4i64(<4 x i64> %0) {
14302; AVX1-LABEL: ugt_30_v4i64:
14303; AVX1:       # %bb.0:
14304; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14305; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14306; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14307; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14308; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14309; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14310; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14311; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14312; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14313; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14314; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14315; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14316; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14317; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14318; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14319; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14320; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14321; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14322; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [30,30]
14323; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
14324; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
14325; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14326; AVX1-NEXT:    retq
14327;
14328; AVX2-LABEL: ugt_30_v4i64:
14329; AVX2:       # %bb.0:
14330; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14331; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14332; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14333; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14334; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14335; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14336; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14337; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14338; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14339; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14340; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]
14341; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14342; AVX2-NEXT:    retq
14343;
14344; AVX512VPOPCNTDQ-LABEL: ugt_30_v4i64:
14345; AVX512VPOPCNTDQ:       # %bb.0:
14346; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14347; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14348; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]
14349; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14350; AVX512VPOPCNTDQ-NEXT:    retq
14351;
14352; AVX512VPOPCNTDQVL-LABEL: ugt_30_v4i64:
14353; AVX512VPOPCNTDQVL:       # %bb.0:
14354; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14355; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14356; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14357; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14358; AVX512VPOPCNTDQVL-NEXT:    retq
14359;
14360; BITALG_NOVLX-LABEL: ugt_30_v4i64:
14361; BITALG_NOVLX:       # %bb.0:
14362; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14363; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14364; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14365; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14366; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]
14367; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14368; BITALG_NOVLX-NEXT:    retq
14369;
14370; BITALG-LABEL: ugt_30_v4i64:
14371; BITALG:       # %bb.0:
14372; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14373; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14374; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14375; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14376; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14377; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14378; BITALG-NEXT:    retq
14379  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14380  %3 = icmp ugt <4 x i64> %2, <i64 30, i64 30, i64 30, i64 30>
14381  %4 = sext <4 x i1> %3 to <4 x i64>
14382  ret <4 x i64> %4
14383}
14384
14385define <4 x i64> @ult_31_v4i64(<4 x i64> %0) {
14386; AVX1-LABEL: ult_31_v4i64:
14387; AVX1:       # %bb.0:
14388; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14389; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14390; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14391; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14392; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14393; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14394; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14395; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14396; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14397; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14398; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14399; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14400; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14401; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14402; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14403; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14404; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14405; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14406; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [31,31]
14407; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
14408; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
14409; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14410; AVX1-NEXT:    retq
14411;
14412; AVX2-LABEL: ult_31_v4i64:
14413; AVX2:       # %bb.0:
14414; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14415; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14416; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14417; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14418; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14419; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14420; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14421; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14422; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14423; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14424; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]
14425; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14426; AVX2-NEXT:    retq
14427;
14428; AVX512VPOPCNTDQ-LABEL: ult_31_v4i64:
14429; AVX512VPOPCNTDQ:       # %bb.0:
14430; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14431; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14432; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]
14433; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14434; AVX512VPOPCNTDQ-NEXT:    retq
14435;
14436; AVX512VPOPCNTDQVL-LABEL: ult_31_v4i64:
14437; AVX512VPOPCNTDQVL:       # %bb.0:
14438; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14439; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14440; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14441; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14442; AVX512VPOPCNTDQVL-NEXT:    retq
14443;
14444; BITALG_NOVLX-LABEL: ult_31_v4i64:
14445; BITALG_NOVLX:       # %bb.0:
14446; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14447; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14448; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14449; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14450; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]
14451; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14452; BITALG_NOVLX-NEXT:    retq
14453;
14454; BITALG-LABEL: ult_31_v4i64:
14455; BITALG:       # %bb.0:
14456; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14457; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14458; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14459; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14460; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14461; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14462; BITALG-NEXT:    retq
14463  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14464  %3 = icmp ult <4 x i64> %2, <i64 31, i64 31, i64 31, i64 31>
14465  %4 = sext <4 x i1> %3 to <4 x i64>
14466  ret <4 x i64> %4
14467}
14468
14469define <4 x i64> @ugt_31_v4i64(<4 x i64> %0) {
14470; AVX1-LABEL: ugt_31_v4i64:
14471; AVX1:       # %bb.0:
14472; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14473; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14474; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14475; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14476; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14477; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14478; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14479; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14480; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14481; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14482; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14483; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14484; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14485; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14486; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14487; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14488; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14489; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14490; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [31,31]
14491; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
14492; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
14493; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14494; AVX1-NEXT:    retq
14495;
14496; AVX2-LABEL: ugt_31_v4i64:
14497; AVX2:       # %bb.0:
14498; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14499; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14500; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14501; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14502; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14503; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14504; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14505; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14506; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14507; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14508; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]
14509; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14510; AVX2-NEXT:    retq
14511;
14512; AVX512VPOPCNTDQ-LABEL: ugt_31_v4i64:
14513; AVX512VPOPCNTDQ:       # %bb.0:
14514; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14515; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14516; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]
14517; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14518; AVX512VPOPCNTDQ-NEXT:    retq
14519;
14520; AVX512VPOPCNTDQVL-LABEL: ugt_31_v4i64:
14521; AVX512VPOPCNTDQVL:       # %bb.0:
14522; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14523; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14524; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14525; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14526; AVX512VPOPCNTDQVL-NEXT:    retq
14527;
14528; BITALG_NOVLX-LABEL: ugt_31_v4i64:
14529; BITALG_NOVLX:       # %bb.0:
14530; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14531; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14532; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14533; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14534; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]
14535; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14536; BITALG_NOVLX-NEXT:    retq
14537;
14538; BITALG-LABEL: ugt_31_v4i64:
14539; BITALG:       # %bb.0:
14540; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14541; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14542; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14543; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14544; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14545; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14546; BITALG-NEXT:    retq
14547  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14548  %3 = icmp ugt <4 x i64> %2, <i64 31, i64 31, i64 31, i64 31>
14549  %4 = sext <4 x i1> %3 to <4 x i64>
14550  ret <4 x i64> %4
14551}
14552
14553define <4 x i64> @ult_32_v4i64(<4 x i64> %0) {
14554; AVX1-LABEL: ult_32_v4i64:
14555; AVX1:       # %bb.0:
14556; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14557; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14558; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14559; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14560; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14561; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14562; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14563; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14564; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14565; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14566; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14567; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14568; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14569; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14570; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14571; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14572; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14573; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14574; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [32,32]
14575; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
14576; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
14577; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14578; AVX1-NEXT:    retq
14579;
14580; AVX2-LABEL: ult_32_v4i64:
14581; AVX2:       # %bb.0:
14582; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14583; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14584; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14585; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14586; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14587; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14588; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14589; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14590; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14591; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14592; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]
14593; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14594; AVX2-NEXT:    retq
14595;
14596; AVX512VPOPCNTDQ-LABEL: ult_32_v4i64:
14597; AVX512VPOPCNTDQ:       # %bb.0:
14598; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14599; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14600; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]
14601; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14602; AVX512VPOPCNTDQ-NEXT:    retq
14603;
14604; AVX512VPOPCNTDQVL-LABEL: ult_32_v4i64:
14605; AVX512VPOPCNTDQVL:       # %bb.0:
14606; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14607; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14608; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14609; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14610; AVX512VPOPCNTDQVL-NEXT:    retq
14611;
14612; BITALG_NOVLX-LABEL: ult_32_v4i64:
14613; BITALG_NOVLX:       # %bb.0:
14614; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14615; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14616; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14617; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14618; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]
14619; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14620; BITALG_NOVLX-NEXT:    retq
14621;
14622; BITALG-LABEL: ult_32_v4i64:
14623; BITALG:       # %bb.0:
14624; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14625; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14626; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14627; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14628; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14629; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14630; BITALG-NEXT:    retq
14631  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14632  %3 = icmp ult <4 x i64> %2, <i64 32, i64 32, i64 32, i64 32>
14633  %4 = sext <4 x i1> %3 to <4 x i64>
14634  ret <4 x i64> %4
14635}
14636
14637define <4 x i64> @ugt_32_v4i64(<4 x i64> %0) {
14638; AVX1-LABEL: ugt_32_v4i64:
14639; AVX1:       # %bb.0:
14640; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14641; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14642; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14643; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14644; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14645; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14646; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14647; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14648; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14649; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14650; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14651; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14652; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14653; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14654; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14655; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14656; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14657; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14658; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [32,32]
14659; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
14660; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
14661; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14662; AVX1-NEXT:    retq
14663;
14664; AVX2-LABEL: ugt_32_v4i64:
14665; AVX2:       # %bb.0:
14666; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14667; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14668; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14669; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14670; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14671; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14672; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14673; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14674; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14675; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14676; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]
14677; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14678; AVX2-NEXT:    retq
14679;
14680; AVX512VPOPCNTDQ-LABEL: ugt_32_v4i64:
14681; AVX512VPOPCNTDQ:       # %bb.0:
14682; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14683; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14684; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]
14685; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14686; AVX512VPOPCNTDQ-NEXT:    retq
14687;
14688; AVX512VPOPCNTDQVL-LABEL: ugt_32_v4i64:
14689; AVX512VPOPCNTDQVL:       # %bb.0:
14690; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14691; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14692; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14693; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14694; AVX512VPOPCNTDQVL-NEXT:    retq
14695;
14696; BITALG_NOVLX-LABEL: ugt_32_v4i64:
14697; BITALG_NOVLX:       # %bb.0:
14698; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14699; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14700; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14701; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14702; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]
14703; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14704; BITALG_NOVLX-NEXT:    retq
14705;
14706; BITALG-LABEL: ugt_32_v4i64:
14707; BITALG:       # %bb.0:
14708; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14709; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14710; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14711; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14712; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14713; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14714; BITALG-NEXT:    retq
14715  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14716  %3 = icmp ugt <4 x i64> %2, <i64 32, i64 32, i64 32, i64 32>
14717  %4 = sext <4 x i1> %3 to <4 x i64>
14718  ret <4 x i64> %4
14719}
14720
14721define <4 x i64> @ult_33_v4i64(<4 x i64> %0) {
14722; AVX1-LABEL: ult_33_v4i64:
14723; AVX1:       # %bb.0:
14724; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14725; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14726; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14727; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14728; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14729; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14730; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14731; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14732; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14733; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14734; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14735; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14736; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14737; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14738; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14739; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14740; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14741; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14742; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [33,33]
14743; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
14744; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
14745; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14746; AVX1-NEXT:    retq
14747;
14748; AVX2-LABEL: ult_33_v4i64:
14749; AVX2:       # %bb.0:
14750; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14751; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14752; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14753; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14754; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14755; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14756; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14757; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14758; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14759; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14760; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]
14761; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14762; AVX2-NEXT:    retq
14763;
14764; AVX512VPOPCNTDQ-LABEL: ult_33_v4i64:
14765; AVX512VPOPCNTDQ:       # %bb.0:
14766; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14767; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14768; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]
14769; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14770; AVX512VPOPCNTDQ-NEXT:    retq
14771;
14772; AVX512VPOPCNTDQVL-LABEL: ult_33_v4i64:
14773; AVX512VPOPCNTDQVL:       # %bb.0:
14774; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14775; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14776; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14777; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14778; AVX512VPOPCNTDQVL-NEXT:    retq
14779;
14780; BITALG_NOVLX-LABEL: ult_33_v4i64:
14781; BITALG_NOVLX:       # %bb.0:
14782; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14783; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14784; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14785; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14786; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]
14787; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14788; BITALG_NOVLX-NEXT:    retq
14789;
14790; BITALG-LABEL: ult_33_v4i64:
14791; BITALG:       # %bb.0:
14792; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14793; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14794; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14795; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14796; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14797; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14798; BITALG-NEXT:    retq
14799  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14800  %3 = icmp ult <4 x i64> %2, <i64 33, i64 33, i64 33, i64 33>
14801  %4 = sext <4 x i1> %3 to <4 x i64>
14802  ret <4 x i64> %4
14803}
14804
14805define <4 x i64> @ugt_33_v4i64(<4 x i64> %0) {
14806; AVX1-LABEL: ugt_33_v4i64:
14807; AVX1:       # %bb.0:
14808; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14809; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14810; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14811; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14812; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14813; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14814; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14815; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14816; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14817; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14818; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14819; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14820; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14821; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14822; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14823; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14824; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14825; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14826; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [33,33]
14827; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
14828; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
14829; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14830; AVX1-NEXT:    retq
14831;
14832; AVX2-LABEL: ugt_33_v4i64:
14833; AVX2:       # %bb.0:
14834; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14835; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14836; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14837; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14838; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14839; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14840; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14841; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14842; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14843; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14844; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]
14845; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14846; AVX2-NEXT:    retq
14847;
14848; AVX512VPOPCNTDQ-LABEL: ugt_33_v4i64:
14849; AVX512VPOPCNTDQ:       # %bb.0:
14850; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14851; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14852; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]
14853; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14854; AVX512VPOPCNTDQ-NEXT:    retq
14855;
14856; AVX512VPOPCNTDQVL-LABEL: ugt_33_v4i64:
14857; AVX512VPOPCNTDQVL:       # %bb.0:
14858; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14859; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14860; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14861; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14862; AVX512VPOPCNTDQVL-NEXT:    retq
14863;
14864; BITALG_NOVLX-LABEL: ugt_33_v4i64:
14865; BITALG_NOVLX:       # %bb.0:
14866; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14867; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14868; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14869; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14870; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]
14871; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
14872; BITALG_NOVLX-NEXT:    retq
14873;
14874; BITALG-LABEL: ugt_33_v4i64:
14875; BITALG:       # %bb.0:
14876; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14877; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14878; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14879; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14880; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14881; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14882; BITALG-NEXT:    retq
14883  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14884  %3 = icmp ugt <4 x i64> %2, <i64 33, i64 33, i64 33, i64 33>
14885  %4 = sext <4 x i1> %3 to <4 x i64>
14886  ret <4 x i64> %4
14887}
14888
14889define <4 x i64> @ult_34_v4i64(<4 x i64> %0) {
14890; AVX1-LABEL: ult_34_v4i64:
14891; AVX1:       # %bb.0:
14892; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14893; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14894; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14895; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14896; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14897; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14898; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14899; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14900; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14901; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14902; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14903; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14904; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14905; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14906; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14907; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14908; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14909; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14910; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [34,34]
14911; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
14912; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
14913; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14914; AVX1-NEXT:    retq
14915;
14916; AVX2-LABEL: ult_34_v4i64:
14917; AVX2:       # %bb.0:
14918; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14919; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
14920; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14921; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
14922; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
14923; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
14924; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
14925; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
14926; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14927; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14928; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]
14929; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14930; AVX2-NEXT:    retq
14931;
14932; AVX512VPOPCNTDQ-LABEL: ult_34_v4i64:
14933; AVX512VPOPCNTDQ:       # %bb.0:
14934; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14935; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
14936; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]
14937; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14938; AVX512VPOPCNTDQ-NEXT:    retq
14939;
14940; AVX512VPOPCNTDQVL-LABEL: ult_34_v4i64:
14941; AVX512VPOPCNTDQVL:       # %bb.0:
14942; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
14943; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14944; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14945; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14946; AVX512VPOPCNTDQVL-NEXT:    retq
14947;
14948; BITALG_NOVLX-LABEL: ult_34_v4i64:
14949; BITALG_NOVLX:       # %bb.0:
14950; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
14951; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14952; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14953; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14954; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]
14955; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
14956; BITALG_NOVLX-NEXT:    retq
14957;
14958; BITALG-LABEL: ult_34_v4i64:
14959; BITALG:       # %bb.0:
14960; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
14961; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14962; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
14963; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
14964; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
14965; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
14966; BITALG-NEXT:    retq
14967  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
14968  %3 = icmp ult <4 x i64> %2, <i64 34, i64 34, i64 34, i64 34>
14969  %4 = sext <4 x i1> %3 to <4 x i64>
14970  ret <4 x i64> %4
14971}
14972
14973define <4 x i64> @ugt_34_v4i64(<4 x i64> %0) {
14974; AVX1-LABEL: ugt_34_v4i64:
14975; AVX1:       # %bb.0:
14976; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14977; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14978; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14979; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14980; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
14981; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
14982; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
14983; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
14984; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
14985; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
14986; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
14987; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
14988; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
14989; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14990; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14991; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14992; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
14993; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
14994; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [34,34]
14995; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
14996; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
14997; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
14998; AVX1-NEXT:    retq
14999;
15000; AVX2-LABEL: ugt_34_v4i64:
15001; AVX2:       # %bb.0:
15002; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15003; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15004; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15005; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15006; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15007; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15008; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15009; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15010; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15011; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15012; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]
15013; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15014; AVX2-NEXT:    retq
15015;
15016; AVX512VPOPCNTDQ-LABEL: ugt_34_v4i64:
15017; AVX512VPOPCNTDQ:       # %bb.0:
15018; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15019; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15020; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]
15021; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15022; AVX512VPOPCNTDQ-NEXT:    retq
15023;
15024; AVX512VPOPCNTDQVL-LABEL: ugt_34_v4i64:
15025; AVX512VPOPCNTDQVL:       # %bb.0:
15026; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15027; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15028; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15029; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15030; AVX512VPOPCNTDQVL-NEXT:    retq
15031;
15032; BITALG_NOVLX-LABEL: ugt_34_v4i64:
15033; BITALG_NOVLX:       # %bb.0:
15034; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15035; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15036; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15037; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15038; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]
15039; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15040; BITALG_NOVLX-NEXT:    retq
15041;
15042; BITALG-LABEL: ugt_34_v4i64:
15043; BITALG:       # %bb.0:
15044; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15045; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15046; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15047; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15048; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15049; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15050; BITALG-NEXT:    retq
15051  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15052  %3 = icmp ugt <4 x i64> %2, <i64 34, i64 34, i64 34, i64 34>
15053  %4 = sext <4 x i1> %3 to <4 x i64>
15054  ret <4 x i64> %4
15055}
15056
15057define <4 x i64> @ult_35_v4i64(<4 x i64> %0) {
15058; AVX1-LABEL: ult_35_v4i64:
15059; AVX1:       # %bb.0:
15060; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15061; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15062; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15063; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15064; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15065; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15066; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15067; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15068; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15069; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15070; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15071; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15072; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15073; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15074; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15075; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15076; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15077; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15078; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [35,35]
15079; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
15080; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
15081; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15082; AVX1-NEXT:    retq
15083;
15084; AVX2-LABEL: ult_35_v4i64:
15085; AVX2:       # %bb.0:
15086; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15087; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15088; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15089; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15090; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15091; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15092; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15093; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15094; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15095; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15096; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]
15097; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15098; AVX2-NEXT:    retq
15099;
15100; AVX512VPOPCNTDQ-LABEL: ult_35_v4i64:
15101; AVX512VPOPCNTDQ:       # %bb.0:
15102; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15103; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15104; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]
15105; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15106; AVX512VPOPCNTDQ-NEXT:    retq
15107;
15108; AVX512VPOPCNTDQVL-LABEL: ult_35_v4i64:
15109; AVX512VPOPCNTDQVL:       # %bb.0:
15110; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15111; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15112; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15113; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15114; AVX512VPOPCNTDQVL-NEXT:    retq
15115;
15116; BITALG_NOVLX-LABEL: ult_35_v4i64:
15117; BITALG_NOVLX:       # %bb.0:
15118; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15119; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15120; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15121; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15122; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]
15123; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15124; BITALG_NOVLX-NEXT:    retq
15125;
15126; BITALG-LABEL: ult_35_v4i64:
15127; BITALG:       # %bb.0:
15128; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15129; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15130; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15131; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15132; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15133; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15134; BITALG-NEXT:    retq
15135  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15136  %3 = icmp ult <4 x i64> %2, <i64 35, i64 35, i64 35, i64 35>
15137  %4 = sext <4 x i1> %3 to <4 x i64>
15138  ret <4 x i64> %4
15139}
15140
15141define <4 x i64> @ugt_35_v4i64(<4 x i64> %0) {
15142; AVX1-LABEL: ugt_35_v4i64:
15143; AVX1:       # %bb.0:
15144; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15145; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15146; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15147; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15148; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15149; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15150; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15151; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15152; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15153; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15154; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15155; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15156; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15157; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15158; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15159; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15160; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15161; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15162; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [35,35]
15163; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
15164; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
15165; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15166; AVX1-NEXT:    retq
15167;
15168; AVX2-LABEL: ugt_35_v4i64:
15169; AVX2:       # %bb.0:
15170; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15171; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15172; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15173; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15174; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15175; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15176; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15177; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15178; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15179; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15180; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]
15181; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15182; AVX2-NEXT:    retq
15183;
15184; AVX512VPOPCNTDQ-LABEL: ugt_35_v4i64:
15185; AVX512VPOPCNTDQ:       # %bb.0:
15186; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15187; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15188; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]
15189; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15190; AVX512VPOPCNTDQ-NEXT:    retq
15191;
15192; AVX512VPOPCNTDQVL-LABEL: ugt_35_v4i64:
15193; AVX512VPOPCNTDQVL:       # %bb.0:
15194; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15195; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15196; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15197; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15198; AVX512VPOPCNTDQVL-NEXT:    retq
15199;
15200; BITALG_NOVLX-LABEL: ugt_35_v4i64:
15201; BITALG_NOVLX:       # %bb.0:
15202; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15203; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15204; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15205; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15206; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]
15207; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15208; BITALG_NOVLX-NEXT:    retq
15209;
15210; BITALG-LABEL: ugt_35_v4i64:
15211; BITALG:       # %bb.0:
15212; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15213; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15214; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15215; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15216; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15217; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15218; BITALG-NEXT:    retq
15219  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15220  %3 = icmp ugt <4 x i64> %2, <i64 35, i64 35, i64 35, i64 35>
15221  %4 = sext <4 x i1> %3 to <4 x i64>
15222  ret <4 x i64> %4
15223}
15224
15225define <4 x i64> @ult_36_v4i64(<4 x i64> %0) {
15226; AVX1-LABEL: ult_36_v4i64:
15227; AVX1:       # %bb.0:
15228; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15229; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15230; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15231; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15232; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15233; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15234; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15235; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15236; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15237; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15238; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15239; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15240; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15241; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15242; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15243; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15244; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15245; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15246; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [36,36]
15247; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
15248; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
15249; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15250; AVX1-NEXT:    retq
15251;
15252; AVX2-LABEL: ult_36_v4i64:
15253; AVX2:       # %bb.0:
15254; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15255; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15256; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15257; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15258; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15259; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15260; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15261; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15262; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15263; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15264; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]
15265; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15266; AVX2-NEXT:    retq
15267;
15268; AVX512VPOPCNTDQ-LABEL: ult_36_v4i64:
15269; AVX512VPOPCNTDQ:       # %bb.0:
15270; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15271; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15272; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]
15273; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15274; AVX512VPOPCNTDQ-NEXT:    retq
15275;
15276; AVX512VPOPCNTDQVL-LABEL: ult_36_v4i64:
15277; AVX512VPOPCNTDQVL:       # %bb.0:
15278; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15279; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15280; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15281; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15282; AVX512VPOPCNTDQVL-NEXT:    retq
15283;
15284; BITALG_NOVLX-LABEL: ult_36_v4i64:
15285; BITALG_NOVLX:       # %bb.0:
15286; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15287; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15288; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15289; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15290; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]
15291; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15292; BITALG_NOVLX-NEXT:    retq
15293;
15294; BITALG-LABEL: ult_36_v4i64:
15295; BITALG:       # %bb.0:
15296; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15297; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15298; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15299; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15300; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15301; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15302; BITALG-NEXT:    retq
15303  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15304  %3 = icmp ult <4 x i64> %2, <i64 36, i64 36, i64 36, i64 36>
15305  %4 = sext <4 x i1> %3 to <4 x i64>
15306  ret <4 x i64> %4
15307}
15308
15309define <4 x i64> @ugt_36_v4i64(<4 x i64> %0) {
15310; AVX1-LABEL: ugt_36_v4i64:
15311; AVX1:       # %bb.0:
15312; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15313; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15314; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15315; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15316; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15317; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15318; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15319; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15320; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15321; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15322; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15323; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15324; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15325; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15326; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15327; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15328; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15329; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15330; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [36,36]
15331; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
15332; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
15333; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15334; AVX1-NEXT:    retq
15335;
15336; AVX2-LABEL: ugt_36_v4i64:
15337; AVX2:       # %bb.0:
15338; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15339; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15340; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15341; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15342; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15343; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15344; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15345; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15346; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15347; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15348; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]
15349; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15350; AVX2-NEXT:    retq
15351;
15352; AVX512VPOPCNTDQ-LABEL: ugt_36_v4i64:
15353; AVX512VPOPCNTDQ:       # %bb.0:
15354; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15355; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15356; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]
15357; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15358; AVX512VPOPCNTDQ-NEXT:    retq
15359;
15360; AVX512VPOPCNTDQVL-LABEL: ugt_36_v4i64:
15361; AVX512VPOPCNTDQVL:       # %bb.0:
15362; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15363; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15364; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15365; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15366; AVX512VPOPCNTDQVL-NEXT:    retq
15367;
15368; BITALG_NOVLX-LABEL: ugt_36_v4i64:
15369; BITALG_NOVLX:       # %bb.0:
15370; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15371; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15372; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15373; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15374; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]
15375; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15376; BITALG_NOVLX-NEXT:    retq
15377;
15378; BITALG-LABEL: ugt_36_v4i64:
15379; BITALG:       # %bb.0:
15380; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15381; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15382; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15383; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15384; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15385; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15386; BITALG-NEXT:    retq
15387  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15388  %3 = icmp ugt <4 x i64> %2, <i64 36, i64 36, i64 36, i64 36>
15389  %4 = sext <4 x i1> %3 to <4 x i64>
15390  ret <4 x i64> %4
15391}
15392
15393define <4 x i64> @ult_37_v4i64(<4 x i64> %0) {
15394; AVX1-LABEL: ult_37_v4i64:
15395; AVX1:       # %bb.0:
15396; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15397; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15398; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15399; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15400; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15401; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15402; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15403; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15404; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15405; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15406; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15407; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15408; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15409; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15410; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15411; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15412; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15413; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15414; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [37,37]
15415; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
15416; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
15417; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15418; AVX1-NEXT:    retq
15419;
15420; AVX2-LABEL: ult_37_v4i64:
15421; AVX2:       # %bb.0:
15422; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15423; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15424; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15425; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15426; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15427; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15428; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15429; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15430; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15431; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15432; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]
15433; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15434; AVX2-NEXT:    retq
15435;
15436; AVX512VPOPCNTDQ-LABEL: ult_37_v4i64:
15437; AVX512VPOPCNTDQ:       # %bb.0:
15438; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15439; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15440; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]
15441; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15442; AVX512VPOPCNTDQ-NEXT:    retq
15443;
15444; AVX512VPOPCNTDQVL-LABEL: ult_37_v4i64:
15445; AVX512VPOPCNTDQVL:       # %bb.0:
15446; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15447; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15448; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15449; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15450; AVX512VPOPCNTDQVL-NEXT:    retq
15451;
15452; BITALG_NOVLX-LABEL: ult_37_v4i64:
15453; BITALG_NOVLX:       # %bb.0:
15454; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15455; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15456; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15457; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15458; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]
15459; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15460; BITALG_NOVLX-NEXT:    retq
15461;
15462; BITALG-LABEL: ult_37_v4i64:
15463; BITALG:       # %bb.0:
15464; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15465; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15466; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15467; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15468; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15469; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15470; BITALG-NEXT:    retq
15471  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15472  %3 = icmp ult <4 x i64> %2, <i64 37, i64 37, i64 37, i64 37>
15473  %4 = sext <4 x i1> %3 to <4 x i64>
15474  ret <4 x i64> %4
15475}
15476
15477define <4 x i64> @ugt_37_v4i64(<4 x i64> %0) {
15478; AVX1-LABEL: ugt_37_v4i64:
15479; AVX1:       # %bb.0:
15480; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15481; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15482; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15483; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15484; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15485; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15486; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15487; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15488; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15489; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15490; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15491; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15492; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15493; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15494; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15495; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15496; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15497; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15498; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [37,37]
15499; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
15500; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
15501; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15502; AVX1-NEXT:    retq
15503;
15504; AVX2-LABEL: ugt_37_v4i64:
15505; AVX2:       # %bb.0:
15506; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15507; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15508; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15509; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15510; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15511; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15512; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15513; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15514; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15515; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15516; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]
15517; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15518; AVX2-NEXT:    retq
15519;
15520; AVX512VPOPCNTDQ-LABEL: ugt_37_v4i64:
15521; AVX512VPOPCNTDQ:       # %bb.0:
15522; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15523; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15524; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]
15525; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15526; AVX512VPOPCNTDQ-NEXT:    retq
15527;
15528; AVX512VPOPCNTDQVL-LABEL: ugt_37_v4i64:
15529; AVX512VPOPCNTDQVL:       # %bb.0:
15530; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15531; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15532; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15533; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15534; AVX512VPOPCNTDQVL-NEXT:    retq
15535;
15536; BITALG_NOVLX-LABEL: ugt_37_v4i64:
15537; BITALG_NOVLX:       # %bb.0:
15538; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15539; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15540; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15541; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15542; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]
15543; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15544; BITALG_NOVLX-NEXT:    retq
15545;
15546; BITALG-LABEL: ugt_37_v4i64:
15547; BITALG:       # %bb.0:
15548; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15549; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15550; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15551; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15552; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15553; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15554; BITALG-NEXT:    retq
15555  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15556  %3 = icmp ugt <4 x i64> %2, <i64 37, i64 37, i64 37, i64 37>
15557  %4 = sext <4 x i1> %3 to <4 x i64>
15558  ret <4 x i64> %4
15559}
15560
15561define <4 x i64> @ult_38_v4i64(<4 x i64> %0) {
15562; AVX1-LABEL: ult_38_v4i64:
15563; AVX1:       # %bb.0:
15564; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15565; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15566; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15567; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15568; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15569; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15570; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15571; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15572; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15573; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15574; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15575; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15576; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15577; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15578; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15579; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15580; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15581; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15582; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [38,38]
15583; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
15584; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
15585; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15586; AVX1-NEXT:    retq
15587;
15588; AVX2-LABEL: ult_38_v4i64:
15589; AVX2:       # %bb.0:
15590; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15591; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15592; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15593; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15594; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15595; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15596; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15597; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15598; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15599; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15600; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]
15601; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15602; AVX2-NEXT:    retq
15603;
15604; AVX512VPOPCNTDQ-LABEL: ult_38_v4i64:
15605; AVX512VPOPCNTDQ:       # %bb.0:
15606; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15607; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15608; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]
15609; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15610; AVX512VPOPCNTDQ-NEXT:    retq
15611;
15612; AVX512VPOPCNTDQVL-LABEL: ult_38_v4i64:
15613; AVX512VPOPCNTDQVL:       # %bb.0:
15614; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15615; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15616; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15617; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15618; AVX512VPOPCNTDQVL-NEXT:    retq
15619;
15620; BITALG_NOVLX-LABEL: ult_38_v4i64:
15621; BITALG_NOVLX:       # %bb.0:
15622; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15623; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15624; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15625; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15626; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]
15627; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15628; BITALG_NOVLX-NEXT:    retq
15629;
15630; BITALG-LABEL: ult_38_v4i64:
15631; BITALG:       # %bb.0:
15632; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15633; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15634; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15635; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15636; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15637; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15638; BITALG-NEXT:    retq
15639  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15640  %3 = icmp ult <4 x i64> %2, <i64 38, i64 38, i64 38, i64 38>
15641  %4 = sext <4 x i1> %3 to <4 x i64>
15642  ret <4 x i64> %4
15643}
15644
15645define <4 x i64> @ugt_38_v4i64(<4 x i64> %0) {
15646; AVX1-LABEL: ugt_38_v4i64:
15647; AVX1:       # %bb.0:
15648; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15649; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15650; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15651; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15652; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15653; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15654; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15655; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15656; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15657; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15658; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15659; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15660; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15661; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15662; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15663; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15664; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15665; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15666; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [38,38]
15667; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
15668; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
15669; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15670; AVX1-NEXT:    retq
15671;
15672; AVX2-LABEL: ugt_38_v4i64:
15673; AVX2:       # %bb.0:
15674; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15675; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15676; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15677; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15678; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15679; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15680; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15681; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15682; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15683; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15684; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]
15685; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15686; AVX2-NEXT:    retq
15687;
15688; AVX512VPOPCNTDQ-LABEL: ugt_38_v4i64:
15689; AVX512VPOPCNTDQ:       # %bb.0:
15690; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15691; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15692; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]
15693; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15694; AVX512VPOPCNTDQ-NEXT:    retq
15695;
15696; AVX512VPOPCNTDQVL-LABEL: ugt_38_v4i64:
15697; AVX512VPOPCNTDQVL:       # %bb.0:
15698; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15699; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15700; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15701; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15702; AVX512VPOPCNTDQVL-NEXT:    retq
15703;
15704; BITALG_NOVLX-LABEL: ugt_38_v4i64:
15705; BITALG_NOVLX:       # %bb.0:
15706; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15707; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15708; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15709; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15710; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]
15711; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15712; BITALG_NOVLX-NEXT:    retq
15713;
15714; BITALG-LABEL: ugt_38_v4i64:
15715; BITALG:       # %bb.0:
15716; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15717; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15718; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15719; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15720; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15721; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15722; BITALG-NEXT:    retq
15723  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15724  %3 = icmp ugt <4 x i64> %2, <i64 38, i64 38, i64 38, i64 38>
15725  %4 = sext <4 x i1> %3 to <4 x i64>
15726  ret <4 x i64> %4
15727}
15728
15729define <4 x i64> @ult_39_v4i64(<4 x i64> %0) {
15730; AVX1-LABEL: ult_39_v4i64:
15731; AVX1:       # %bb.0:
15732; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15733; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15734; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15735; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15736; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15737; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15738; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15739; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15740; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15741; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15742; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15743; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15744; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15745; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15746; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15747; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15748; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15749; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15750; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [39,39]
15751; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
15752; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
15753; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15754; AVX1-NEXT:    retq
15755;
15756; AVX2-LABEL: ult_39_v4i64:
15757; AVX2:       # %bb.0:
15758; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15759; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15760; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15761; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15762; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15763; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15764; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15765; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15766; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15767; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15768; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]
15769; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15770; AVX2-NEXT:    retq
15771;
15772; AVX512VPOPCNTDQ-LABEL: ult_39_v4i64:
15773; AVX512VPOPCNTDQ:       # %bb.0:
15774; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15775; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15776; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]
15777; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15778; AVX512VPOPCNTDQ-NEXT:    retq
15779;
15780; AVX512VPOPCNTDQVL-LABEL: ult_39_v4i64:
15781; AVX512VPOPCNTDQVL:       # %bb.0:
15782; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15783; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15784; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15785; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15786; AVX512VPOPCNTDQVL-NEXT:    retq
15787;
15788; BITALG_NOVLX-LABEL: ult_39_v4i64:
15789; BITALG_NOVLX:       # %bb.0:
15790; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15791; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15792; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15793; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15794; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]
15795; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15796; BITALG_NOVLX-NEXT:    retq
15797;
15798; BITALG-LABEL: ult_39_v4i64:
15799; BITALG:       # %bb.0:
15800; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15801; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15802; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15803; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15804; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15805; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15806; BITALG-NEXT:    retq
15807  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15808  %3 = icmp ult <4 x i64> %2, <i64 39, i64 39, i64 39, i64 39>
15809  %4 = sext <4 x i1> %3 to <4 x i64>
15810  ret <4 x i64> %4
15811}
15812
15813define <4 x i64> @ugt_39_v4i64(<4 x i64> %0) {
15814; AVX1-LABEL: ugt_39_v4i64:
15815; AVX1:       # %bb.0:
15816; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15817; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15818; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15819; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15820; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15821; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15822; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15823; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15824; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15825; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15826; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15827; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15828; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15829; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15830; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15831; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15832; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15833; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15834; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [39,39]
15835; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
15836; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
15837; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15838; AVX1-NEXT:    retq
15839;
15840; AVX2-LABEL: ugt_39_v4i64:
15841; AVX2:       # %bb.0:
15842; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15843; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15844; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15845; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15846; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15847; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15848; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15849; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15850; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15851; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15852; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]
15853; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15854; AVX2-NEXT:    retq
15855;
15856; AVX512VPOPCNTDQ-LABEL: ugt_39_v4i64:
15857; AVX512VPOPCNTDQ:       # %bb.0:
15858; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15859; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15860; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]
15861; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15862; AVX512VPOPCNTDQ-NEXT:    retq
15863;
15864; AVX512VPOPCNTDQVL-LABEL: ugt_39_v4i64:
15865; AVX512VPOPCNTDQVL:       # %bb.0:
15866; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15867; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15868; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15869; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15870; AVX512VPOPCNTDQVL-NEXT:    retq
15871;
15872; BITALG_NOVLX-LABEL: ugt_39_v4i64:
15873; BITALG_NOVLX:       # %bb.0:
15874; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15875; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15876; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15877; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15878; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]
15879; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
15880; BITALG_NOVLX-NEXT:    retq
15881;
15882; BITALG-LABEL: ugt_39_v4i64:
15883; BITALG:       # %bb.0:
15884; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15885; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15886; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15887; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15888; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15889; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15890; BITALG-NEXT:    retq
15891  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15892  %3 = icmp ugt <4 x i64> %2, <i64 39, i64 39, i64 39, i64 39>
15893  %4 = sext <4 x i1> %3 to <4 x i64>
15894  ret <4 x i64> %4
15895}
15896
15897define <4 x i64> @ult_40_v4i64(<4 x i64> %0) {
15898; AVX1-LABEL: ult_40_v4i64:
15899; AVX1:       # %bb.0:
15900; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15901; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15902; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15903; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15904; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15905; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15906; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15907; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15908; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15909; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15910; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15911; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15912; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15913; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15914; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15915; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15916; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
15917; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
15918; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [40,40]
15919; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
15920; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
15921; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
15922; AVX1-NEXT:    retq
15923;
15924; AVX2-LABEL: ult_40_v4i64:
15925; AVX2:       # %bb.0:
15926; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15927; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
15928; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15929; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
15930; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
15931; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
15932; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
15933; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
15934; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15935; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15936; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]
15937; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15938; AVX2-NEXT:    retq
15939;
15940; AVX512VPOPCNTDQ-LABEL: ult_40_v4i64:
15941; AVX512VPOPCNTDQ:       # %bb.0:
15942; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15943; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
15944; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]
15945; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15946; AVX512VPOPCNTDQ-NEXT:    retq
15947;
15948; AVX512VPOPCNTDQVL-LABEL: ult_40_v4i64:
15949; AVX512VPOPCNTDQVL:       # %bb.0:
15950; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
15951; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15952; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15953; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15954; AVX512VPOPCNTDQVL-NEXT:    retq
15955;
15956; BITALG_NOVLX-LABEL: ult_40_v4i64:
15957; BITALG_NOVLX:       # %bb.0:
15958; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
15959; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15960; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15961; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15962; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]
15963; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
15964; BITALG_NOVLX-NEXT:    retq
15965;
15966; BITALG-LABEL: ult_40_v4i64:
15967; BITALG:       # %bb.0:
15968; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
15969; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15970; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
15971; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
15972; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
15973; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
15974; BITALG-NEXT:    retq
15975  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
15976  %3 = icmp ult <4 x i64> %2, <i64 40, i64 40, i64 40, i64 40>
15977  %4 = sext <4 x i1> %3 to <4 x i64>
15978  ret <4 x i64> %4
15979}
15980
15981define <4 x i64> @ugt_40_v4i64(<4 x i64> %0) {
15982; AVX1-LABEL: ugt_40_v4i64:
15983; AVX1:       # %bb.0:
15984; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15985; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15986; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15987; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15988; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
15989; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
15990; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
15991; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
15992; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
15993; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
15994; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
15995; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
15996; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
15997; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15998; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15999; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16000; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16001; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16002; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [40,40]
16003; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
16004; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
16005; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16006; AVX1-NEXT:    retq
16007;
16008; AVX2-LABEL: ugt_40_v4i64:
16009; AVX2:       # %bb.0:
16010; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16011; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16012; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16013; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16014; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16015; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16016; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16017; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16018; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16019; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16020; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]
16021; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16022; AVX2-NEXT:    retq
16023;
16024; AVX512VPOPCNTDQ-LABEL: ugt_40_v4i64:
16025; AVX512VPOPCNTDQ:       # %bb.0:
16026; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16027; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16028; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]
16029; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16030; AVX512VPOPCNTDQ-NEXT:    retq
16031;
16032; AVX512VPOPCNTDQVL-LABEL: ugt_40_v4i64:
16033; AVX512VPOPCNTDQVL:       # %bb.0:
16034; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16035; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16036; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16037; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16038; AVX512VPOPCNTDQVL-NEXT:    retq
16039;
16040; BITALG_NOVLX-LABEL: ugt_40_v4i64:
16041; BITALG_NOVLX:       # %bb.0:
16042; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16043; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16044; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16045; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16046; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]
16047; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16048; BITALG_NOVLX-NEXT:    retq
16049;
16050; BITALG-LABEL: ugt_40_v4i64:
16051; BITALG:       # %bb.0:
16052; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16053; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16054; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16055; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16056; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16057; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16058; BITALG-NEXT:    retq
16059  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16060  %3 = icmp ugt <4 x i64> %2, <i64 40, i64 40, i64 40, i64 40>
16061  %4 = sext <4 x i1> %3 to <4 x i64>
16062  ret <4 x i64> %4
16063}
16064
16065define <4 x i64> @ult_41_v4i64(<4 x i64> %0) {
16066; AVX1-LABEL: ult_41_v4i64:
16067; AVX1:       # %bb.0:
16068; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16069; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16070; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16071; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16072; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16073; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16074; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16075; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16076; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16077; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16078; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16079; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16080; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16081; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16082; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16083; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16084; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16085; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16086; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [41,41]
16087; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
16088; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
16089; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16090; AVX1-NEXT:    retq
16091;
16092; AVX2-LABEL: ult_41_v4i64:
16093; AVX2:       # %bb.0:
16094; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16095; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16096; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16097; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16098; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16099; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16100; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16101; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16102; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16103; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16104; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]
16105; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16106; AVX2-NEXT:    retq
16107;
16108; AVX512VPOPCNTDQ-LABEL: ult_41_v4i64:
16109; AVX512VPOPCNTDQ:       # %bb.0:
16110; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16111; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16112; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]
16113; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16114; AVX512VPOPCNTDQ-NEXT:    retq
16115;
16116; AVX512VPOPCNTDQVL-LABEL: ult_41_v4i64:
16117; AVX512VPOPCNTDQVL:       # %bb.0:
16118; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16119; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16120; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16121; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16122; AVX512VPOPCNTDQVL-NEXT:    retq
16123;
16124; BITALG_NOVLX-LABEL: ult_41_v4i64:
16125; BITALG_NOVLX:       # %bb.0:
16126; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16127; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16128; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16129; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16130; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]
16131; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16132; BITALG_NOVLX-NEXT:    retq
16133;
16134; BITALG-LABEL: ult_41_v4i64:
16135; BITALG:       # %bb.0:
16136; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16137; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16138; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16139; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16140; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16141; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16142; BITALG-NEXT:    retq
16143  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16144  %3 = icmp ult <4 x i64> %2, <i64 41, i64 41, i64 41, i64 41>
16145  %4 = sext <4 x i1> %3 to <4 x i64>
16146  ret <4 x i64> %4
16147}
16148
16149define <4 x i64> @ugt_41_v4i64(<4 x i64> %0) {
16150; AVX1-LABEL: ugt_41_v4i64:
16151; AVX1:       # %bb.0:
16152; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16153; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16154; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16155; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16156; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16157; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16158; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16159; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16160; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16161; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16162; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16163; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16164; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16165; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16166; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16167; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16168; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16169; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16170; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [41,41]
16171; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
16172; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
16173; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16174; AVX1-NEXT:    retq
16175;
16176; AVX2-LABEL: ugt_41_v4i64:
16177; AVX2:       # %bb.0:
16178; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16179; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16180; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16181; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16182; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16183; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16184; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16185; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16186; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16187; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16188; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]
16189; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16190; AVX2-NEXT:    retq
16191;
16192; AVX512VPOPCNTDQ-LABEL: ugt_41_v4i64:
16193; AVX512VPOPCNTDQ:       # %bb.0:
16194; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16195; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16196; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]
16197; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16198; AVX512VPOPCNTDQ-NEXT:    retq
16199;
16200; AVX512VPOPCNTDQVL-LABEL: ugt_41_v4i64:
16201; AVX512VPOPCNTDQVL:       # %bb.0:
16202; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16203; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16204; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16205; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16206; AVX512VPOPCNTDQVL-NEXT:    retq
16207;
16208; BITALG_NOVLX-LABEL: ugt_41_v4i64:
16209; BITALG_NOVLX:       # %bb.0:
16210; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16211; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16212; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16213; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16214; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]
16215; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16216; BITALG_NOVLX-NEXT:    retq
16217;
16218; BITALG-LABEL: ugt_41_v4i64:
16219; BITALG:       # %bb.0:
16220; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16221; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16222; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16223; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16224; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16225; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16226; BITALG-NEXT:    retq
16227  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16228  %3 = icmp ugt <4 x i64> %2, <i64 41, i64 41, i64 41, i64 41>
16229  %4 = sext <4 x i1> %3 to <4 x i64>
16230  ret <4 x i64> %4
16231}
16232
16233define <4 x i64> @ult_42_v4i64(<4 x i64> %0) {
16234; AVX1-LABEL: ult_42_v4i64:
16235; AVX1:       # %bb.0:
16236; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16237; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16238; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16239; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16240; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16241; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16242; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16243; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16244; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16245; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16246; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16247; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16248; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16249; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16250; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16251; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16252; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16253; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16254; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [42,42]
16255; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
16256; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
16257; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16258; AVX1-NEXT:    retq
16259;
16260; AVX2-LABEL: ult_42_v4i64:
16261; AVX2:       # %bb.0:
16262; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16263; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16264; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16265; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16266; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16267; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16268; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16269; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16270; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16271; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16272; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]
16273; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16274; AVX2-NEXT:    retq
16275;
16276; AVX512VPOPCNTDQ-LABEL: ult_42_v4i64:
16277; AVX512VPOPCNTDQ:       # %bb.0:
16278; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16279; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16280; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]
16281; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16282; AVX512VPOPCNTDQ-NEXT:    retq
16283;
16284; AVX512VPOPCNTDQVL-LABEL: ult_42_v4i64:
16285; AVX512VPOPCNTDQVL:       # %bb.0:
16286; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16287; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16288; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16289; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16290; AVX512VPOPCNTDQVL-NEXT:    retq
16291;
16292; BITALG_NOVLX-LABEL: ult_42_v4i64:
16293; BITALG_NOVLX:       # %bb.0:
16294; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16295; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16296; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16297; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16298; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]
16299; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16300; BITALG_NOVLX-NEXT:    retq
16301;
16302; BITALG-LABEL: ult_42_v4i64:
16303; BITALG:       # %bb.0:
16304; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16305; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16306; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16307; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16308; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16309; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16310; BITALG-NEXT:    retq
16311  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16312  %3 = icmp ult <4 x i64> %2, <i64 42, i64 42, i64 42, i64 42>
16313  %4 = sext <4 x i1> %3 to <4 x i64>
16314  ret <4 x i64> %4
16315}
16316
16317define <4 x i64> @ugt_42_v4i64(<4 x i64> %0) {
16318; AVX1-LABEL: ugt_42_v4i64:
16319; AVX1:       # %bb.0:
16320; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16321; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16322; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16323; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16324; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16325; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16326; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16327; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16328; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16329; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16330; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16331; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16332; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16333; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16334; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16335; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16336; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16337; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16338; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [42,42]
16339; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
16340; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
16341; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16342; AVX1-NEXT:    retq
16343;
16344; AVX2-LABEL: ugt_42_v4i64:
16345; AVX2:       # %bb.0:
16346; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16347; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16348; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16349; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16350; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16351; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16352; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16353; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16354; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16355; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16356; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]
16357; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16358; AVX2-NEXT:    retq
16359;
16360; AVX512VPOPCNTDQ-LABEL: ugt_42_v4i64:
16361; AVX512VPOPCNTDQ:       # %bb.0:
16362; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16363; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16364; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]
16365; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16366; AVX512VPOPCNTDQ-NEXT:    retq
16367;
16368; AVX512VPOPCNTDQVL-LABEL: ugt_42_v4i64:
16369; AVX512VPOPCNTDQVL:       # %bb.0:
16370; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16371; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16372; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16373; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16374; AVX512VPOPCNTDQVL-NEXT:    retq
16375;
16376; BITALG_NOVLX-LABEL: ugt_42_v4i64:
16377; BITALG_NOVLX:       # %bb.0:
16378; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16379; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16380; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16381; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16382; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]
16383; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16384; BITALG_NOVLX-NEXT:    retq
16385;
16386; BITALG-LABEL: ugt_42_v4i64:
16387; BITALG:       # %bb.0:
16388; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16389; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16390; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16391; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16392; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16393; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16394; BITALG-NEXT:    retq
16395  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16396  %3 = icmp ugt <4 x i64> %2, <i64 42, i64 42, i64 42, i64 42>
16397  %4 = sext <4 x i1> %3 to <4 x i64>
16398  ret <4 x i64> %4
16399}
16400
16401define <4 x i64> @ult_43_v4i64(<4 x i64> %0) {
16402; AVX1-LABEL: ult_43_v4i64:
16403; AVX1:       # %bb.0:
16404; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16405; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16406; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16407; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16408; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16409; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16410; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16411; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16412; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16413; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16414; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16415; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16416; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16417; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16418; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16419; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16420; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16421; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16422; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [43,43]
16423; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
16424; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
16425; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16426; AVX1-NEXT:    retq
16427;
16428; AVX2-LABEL: ult_43_v4i64:
16429; AVX2:       # %bb.0:
16430; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16431; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16432; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16433; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16434; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16435; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16436; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16437; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16438; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16439; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16440; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]
16441; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16442; AVX2-NEXT:    retq
16443;
16444; AVX512VPOPCNTDQ-LABEL: ult_43_v4i64:
16445; AVX512VPOPCNTDQ:       # %bb.0:
16446; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16447; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16448; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]
16449; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16450; AVX512VPOPCNTDQ-NEXT:    retq
16451;
16452; AVX512VPOPCNTDQVL-LABEL: ult_43_v4i64:
16453; AVX512VPOPCNTDQVL:       # %bb.0:
16454; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16455; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16456; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16457; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16458; AVX512VPOPCNTDQVL-NEXT:    retq
16459;
16460; BITALG_NOVLX-LABEL: ult_43_v4i64:
16461; BITALG_NOVLX:       # %bb.0:
16462; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16463; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16464; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16465; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16466; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]
16467; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16468; BITALG_NOVLX-NEXT:    retq
16469;
16470; BITALG-LABEL: ult_43_v4i64:
16471; BITALG:       # %bb.0:
16472; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16473; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16474; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16475; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16476; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16477; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16478; BITALG-NEXT:    retq
16479  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16480  %3 = icmp ult <4 x i64> %2, <i64 43, i64 43, i64 43, i64 43>
16481  %4 = sext <4 x i1> %3 to <4 x i64>
16482  ret <4 x i64> %4
16483}
16484
16485define <4 x i64> @ugt_43_v4i64(<4 x i64> %0) {
16486; AVX1-LABEL: ugt_43_v4i64:
16487; AVX1:       # %bb.0:
16488; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16489; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16490; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16491; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16492; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16493; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16494; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16495; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16496; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16497; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16498; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16499; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16500; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16501; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16502; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16503; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16504; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16505; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16506; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [43,43]
16507; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
16508; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
16509; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16510; AVX1-NEXT:    retq
16511;
16512; AVX2-LABEL: ugt_43_v4i64:
16513; AVX2:       # %bb.0:
16514; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16515; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16516; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16517; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16518; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16519; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16520; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16521; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16522; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16523; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16524; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]
16525; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16526; AVX2-NEXT:    retq
16527;
16528; AVX512VPOPCNTDQ-LABEL: ugt_43_v4i64:
16529; AVX512VPOPCNTDQ:       # %bb.0:
16530; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16531; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16532; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]
16533; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16534; AVX512VPOPCNTDQ-NEXT:    retq
16535;
16536; AVX512VPOPCNTDQVL-LABEL: ugt_43_v4i64:
16537; AVX512VPOPCNTDQVL:       # %bb.0:
16538; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16539; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16540; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16541; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16542; AVX512VPOPCNTDQVL-NEXT:    retq
16543;
16544; BITALG_NOVLX-LABEL: ugt_43_v4i64:
16545; BITALG_NOVLX:       # %bb.0:
16546; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16547; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16548; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16549; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16550; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]
16551; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16552; BITALG_NOVLX-NEXT:    retq
16553;
16554; BITALG-LABEL: ugt_43_v4i64:
16555; BITALG:       # %bb.0:
16556; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16557; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16558; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16559; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16560; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16561; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16562; BITALG-NEXT:    retq
16563  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16564  %3 = icmp ugt <4 x i64> %2, <i64 43, i64 43, i64 43, i64 43>
16565  %4 = sext <4 x i1> %3 to <4 x i64>
16566  ret <4 x i64> %4
16567}
16568
16569define <4 x i64> @ult_44_v4i64(<4 x i64> %0) {
16570; AVX1-LABEL: ult_44_v4i64:
16571; AVX1:       # %bb.0:
16572; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16573; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16574; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16575; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16576; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16577; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16578; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16579; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16580; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16581; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16582; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16583; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16584; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16585; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16586; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16587; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16588; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16589; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16590; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [44,44]
16591; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
16592; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
16593; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16594; AVX1-NEXT:    retq
16595;
16596; AVX2-LABEL: ult_44_v4i64:
16597; AVX2:       # %bb.0:
16598; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16599; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16600; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16601; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16602; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16603; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16604; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16605; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16606; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16607; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16608; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]
16609; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16610; AVX2-NEXT:    retq
16611;
16612; AVX512VPOPCNTDQ-LABEL: ult_44_v4i64:
16613; AVX512VPOPCNTDQ:       # %bb.0:
16614; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16615; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16616; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]
16617; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16618; AVX512VPOPCNTDQ-NEXT:    retq
16619;
16620; AVX512VPOPCNTDQVL-LABEL: ult_44_v4i64:
16621; AVX512VPOPCNTDQVL:       # %bb.0:
16622; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16623; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16624; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16625; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16626; AVX512VPOPCNTDQVL-NEXT:    retq
16627;
16628; BITALG_NOVLX-LABEL: ult_44_v4i64:
16629; BITALG_NOVLX:       # %bb.0:
16630; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16631; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16632; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16633; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16634; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]
16635; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16636; BITALG_NOVLX-NEXT:    retq
16637;
16638; BITALG-LABEL: ult_44_v4i64:
16639; BITALG:       # %bb.0:
16640; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16641; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16642; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16643; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16644; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16645; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16646; BITALG-NEXT:    retq
16647  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16648  %3 = icmp ult <4 x i64> %2, <i64 44, i64 44, i64 44, i64 44>
16649  %4 = sext <4 x i1> %3 to <4 x i64>
16650  ret <4 x i64> %4
16651}
16652
16653define <4 x i64> @ugt_44_v4i64(<4 x i64> %0) {
16654; AVX1-LABEL: ugt_44_v4i64:
16655; AVX1:       # %bb.0:
16656; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16657; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16658; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16659; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16660; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16661; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16662; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16663; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16664; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16665; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16666; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16667; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16668; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16669; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16670; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16671; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16672; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16673; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16674; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [44,44]
16675; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
16676; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
16677; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16678; AVX1-NEXT:    retq
16679;
16680; AVX2-LABEL: ugt_44_v4i64:
16681; AVX2:       # %bb.0:
16682; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16683; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16684; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16685; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16686; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16687; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16688; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16689; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16690; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16691; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16692; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]
16693; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16694; AVX2-NEXT:    retq
16695;
16696; AVX512VPOPCNTDQ-LABEL: ugt_44_v4i64:
16697; AVX512VPOPCNTDQ:       # %bb.0:
16698; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16699; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16700; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]
16701; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16702; AVX512VPOPCNTDQ-NEXT:    retq
16703;
16704; AVX512VPOPCNTDQVL-LABEL: ugt_44_v4i64:
16705; AVX512VPOPCNTDQVL:       # %bb.0:
16706; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16707; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16708; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16709; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16710; AVX512VPOPCNTDQVL-NEXT:    retq
16711;
16712; BITALG_NOVLX-LABEL: ugt_44_v4i64:
16713; BITALG_NOVLX:       # %bb.0:
16714; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16715; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16716; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16717; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16718; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]
16719; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16720; BITALG_NOVLX-NEXT:    retq
16721;
16722; BITALG-LABEL: ugt_44_v4i64:
16723; BITALG:       # %bb.0:
16724; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16725; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16726; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16727; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16728; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16729; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16730; BITALG-NEXT:    retq
16731  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16732  %3 = icmp ugt <4 x i64> %2, <i64 44, i64 44, i64 44, i64 44>
16733  %4 = sext <4 x i1> %3 to <4 x i64>
16734  ret <4 x i64> %4
16735}
16736
16737define <4 x i64> @ult_45_v4i64(<4 x i64> %0) {
16738; AVX1-LABEL: ult_45_v4i64:
16739; AVX1:       # %bb.0:
16740; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16741; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16742; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16743; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16744; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16745; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16746; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16747; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16748; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16749; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16750; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16751; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16752; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16753; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16754; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16755; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16756; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16757; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16758; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [45,45]
16759; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
16760; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
16761; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16762; AVX1-NEXT:    retq
16763;
16764; AVX2-LABEL: ult_45_v4i64:
16765; AVX2:       # %bb.0:
16766; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16767; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16768; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16769; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16770; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16771; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16772; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16773; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16774; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16775; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16776; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]
16777; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16778; AVX2-NEXT:    retq
16779;
16780; AVX512VPOPCNTDQ-LABEL: ult_45_v4i64:
16781; AVX512VPOPCNTDQ:       # %bb.0:
16782; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16783; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16784; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]
16785; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16786; AVX512VPOPCNTDQ-NEXT:    retq
16787;
16788; AVX512VPOPCNTDQVL-LABEL: ult_45_v4i64:
16789; AVX512VPOPCNTDQVL:       # %bb.0:
16790; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16791; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16792; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16793; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16794; AVX512VPOPCNTDQVL-NEXT:    retq
16795;
16796; BITALG_NOVLX-LABEL: ult_45_v4i64:
16797; BITALG_NOVLX:       # %bb.0:
16798; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16799; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16800; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16801; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16802; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]
16803; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16804; BITALG_NOVLX-NEXT:    retq
16805;
16806; BITALG-LABEL: ult_45_v4i64:
16807; BITALG:       # %bb.0:
16808; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16809; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16810; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16811; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16812; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16813; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16814; BITALG-NEXT:    retq
16815  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16816  %3 = icmp ult <4 x i64> %2, <i64 45, i64 45, i64 45, i64 45>
16817  %4 = sext <4 x i1> %3 to <4 x i64>
16818  ret <4 x i64> %4
16819}
16820
16821define <4 x i64> @ugt_45_v4i64(<4 x i64> %0) {
16822; AVX1-LABEL: ugt_45_v4i64:
16823; AVX1:       # %bb.0:
16824; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16825; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16826; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16827; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16828; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16829; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16830; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16831; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16832; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16833; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16834; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16835; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16836; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16837; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16838; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16839; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16840; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16841; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16842; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [45,45]
16843; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
16844; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
16845; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16846; AVX1-NEXT:    retq
16847;
16848; AVX2-LABEL: ugt_45_v4i64:
16849; AVX2:       # %bb.0:
16850; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16851; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16852; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16853; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16854; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16855; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16856; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16857; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16858; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16859; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16860; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]
16861; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16862; AVX2-NEXT:    retq
16863;
16864; AVX512VPOPCNTDQ-LABEL: ugt_45_v4i64:
16865; AVX512VPOPCNTDQ:       # %bb.0:
16866; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16867; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16868; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]
16869; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16870; AVX512VPOPCNTDQ-NEXT:    retq
16871;
16872; AVX512VPOPCNTDQVL-LABEL: ugt_45_v4i64:
16873; AVX512VPOPCNTDQVL:       # %bb.0:
16874; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16875; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16876; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16877; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16878; AVX512VPOPCNTDQVL-NEXT:    retq
16879;
16880; BITALG_NOVLX-LABEL: ugt_45_v4i64:
16881; BITALG_NOVLX:       # %bb.0:
16882; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16883; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16884; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16885; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16886; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]
16887; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
16888; BITALG_NOVLX-NEXT:    retq
16889;
16890; BITALG-LABEL: ugt_45_v4i64:
16891; BITALG:       # %bb.0:
16892; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16893; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16894; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16895; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16896; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16897; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16898; BITALG-NEXT:    retq
16899  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16900  %3 = icmp ugt <4 x i64> %2, <i64 45, i64 45, i64 45, i64 45>
16901  %4 = sext <4 x i1> %3 to <4 x i64>
16902  ret <4 x i64> %4
16903}
16904
16905define <4 x i64> @ult_46_v4i64(<4 x i64> %0) {
16906; AVX1-LABEL: ult_46_v4i64:
16907; AVX1:       # %bb.0:
16908; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16909; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16910; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16911; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16912; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16913; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16914; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16915; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
16916; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
16917; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
16918; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
16919; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
16920; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
16921; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16922; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16923; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16924; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
16925; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
16926; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [46,46]
16927; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
16928; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
16929; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
16930; AVX1-NEXT:    retq
16931;
16932; AVX2-LABEL: ult_46_v4i64:
16933; AVX2:       # %bb.0:
16934; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16935; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
16936; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16937; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
16938; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
16939; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
16940; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
16941; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
16942; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16943; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16944; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]
16945; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16946; AVX2-NEXT:    retq
16947;
16948; AVX512VPOPCNTDQ-LABEL: ult_46_v4i64:
16949; AVX512VPOPCNTDQ:       # %bb.0:
16950; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16951; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16952; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]
16953; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16954; AVX512VPOPCNTDQ-NEXT:    retq
16955;
16956; AVX512VPOPCNTDQVL-LABEL: ult_46_v4i64:
16957; AVX512VPOPCNTDQVL:       # %bb.0:
16958; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
16959; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16960; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16961; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16962; AVX512VPOPCNTDQVL-NEXT:    retq
16963;
16964; BITALG_NOVLX-LABEL: ult_46_v4i64:
16965; BITALG_NOVLX:       # %bb.0:
16966; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16967; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16968; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16969; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16970; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]
16971; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
16972; BITALG_NOVLX-NEXT:    retq
16973;
16974; BITALG-LABEL: ult_46_v4i64:
16975; BITALG:       # %bb.0:
16976; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
16977; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16978; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
16979; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
16980; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
16981; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
16982; BITALG-NEXT:    retq
16983  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
16984  %3 = icmp ult <4 x i64> %2, <i64 46, i64 46, i64 46, i64 46>
16985  %4 = sext <4 x i1> %3 to <4 x i64>
16986  ret <4 x i64> %4
16987}
16988
16989define <4 x i64> @ugt_46_v4i64(<4 x i64> %0) {
16990; AVX1-LABEL: ugt_46_v4i64:
16991; AVX1:       # %bb.0:
16992; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16993; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16994; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16995; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16996; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
16997; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
16998; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
16999; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17000; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17001; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17002; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17003; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17004; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17005; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17006; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17007; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17008; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17009; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17010; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [46,46]
17011; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17012; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
17013; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17014; AVX1-NEXT:    retq
17015;
17016; AVX2-LABEL: ugt_46_v4i64:
17017; AVX2:       # %bb.0:
17018; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17019; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17020; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17021; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17022; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17023; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17024; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17025; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17026; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17027; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17028; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]
17029; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17030; AVX2-NEXT:    retq
17031;
17032; AVX512VPOPCNTDQ-LABEL: ugt_46_v4i64:
17033; AVX512VPOPCNTDQ:       # %bb.0:
17034; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17035; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17036; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]
17037; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17038; AVX512VPOPCNTDQ-NEXT:    retq
17039;
17040; AVX512VPOPCNTDQVL-LABEL: ugt_46_v4i64:
17041; AVX512VPOPCNTDQVL:       # %bb.0:
17042; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17043; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17044; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17045; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17046; AVX512VPOPCNTDQVL-NEXT:    retq
17047;
17048; BITALG_NOVLX-LABEL: ugt_46_v4i64:
17049; BITALG_NOVLX:       # %bb.0:
17050; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17051; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17052; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17053; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17054; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]
17055; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17056; BITALG_NOVLX-NEXT:    retq
17057;
17058; BITALG-LABEL: ugt_46_v4i64:
17059; BITALG:       # %bb.0:
17060; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17061; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17062; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17063; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17064; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17065; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17066; BITALG-NEXT:    retq
17067  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17068  %3 = icmp ugt <4 x i64> %2, <i64 46, i64 46, i64 46, i64 46>
17069  %4 = sext <4 x i1> %3 to <4 x i64>
17070  ret <4 x i64> %4
17071}
17072
17073define <4 x i64> @ult_47_v4i64(<4 x i64> %0) {
17074; AVX1-LABEL: ult_47_v4i64:
17075; AVX1:       # %bb.0:
17076; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17077; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17078; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17079; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17080; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17081; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17082; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17083; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17084; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17085; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17086; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17087; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17088; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17089; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17090; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17091; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17092; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17093; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17094; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [47,47]
17095; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17096; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
17097; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17098; AVX1-NEXT:    retq
17099;
17100; AVX2-LABEL: ult_47_v4i64:
17101; AVX2:       # %bb.0:
17102; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17103; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17104; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17105; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17106; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17107; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17108; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17109; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17110; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17111; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17112; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]
17113; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17114; AVX2-NEXT:    retq
17115;
17116; AVX512VPOPCNTDQ-LABEL: ult_47_v4i64:
17117; AVX512VPOPCNTDQ:       # %bb.0:
17118; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17119; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17120; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]
17121; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17122; AVX512VPOPCNTDQ-NEXT:    retq
17123;
17124; AVX512VPOPCNTDQVL-LABEL: ult_47_v4i64:
17125; AVX512VPOPCNTDQVL:       # %bb.0:
17126; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17127; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17128; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17129; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17130; AVX512VPOPCNTDQVL-NEXT:    retq
17131;
17132; BITALG_NOVLX-LABEL: ult_47_v4i64:
17133; BITALG_NOVLX:       # %bb.0:
17134; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17135; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17136; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17137; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17138; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]
17139; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17140; BITALG_NOVLX-NEXT:    retq
17141;
17142; BITALG-LABEL: ult_47_v4i64:
17143; BITALG:       # %bb.0:
17144; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17145; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17146; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17147; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17148; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17149; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17150; BITALG-NEXT:    retq
17151  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17152  %3 = icmp ult <4 x i64> %2, <i64 47, i64 47, i64 47, i64 47>
17153  %4 = sext <4 x i1> %3 to <4 x i64>
17154  ret <4 x i64> %4
17155}
17156
17157define <4 x i64> @ugt_47_v4i64(<4 x i64> %0) {
17158; AVX1-LABEL: ugt_47_v4i64:
17159; AVX1:       # %bb.0:
17160; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17161; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17162; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17163; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17164; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17165; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17166; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17167; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17168; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17169; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17170; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17171; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17172; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17173; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17174; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17175; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17176; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17177; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17178; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [47,47]
17179; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17180; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
17181; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17182; AVX1-NEXT:    retq
17183;
17184; AVX2-LABEL: ugt_47_v4i64:
17185; AVX2:       # %bb.0:
17186; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17187; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17188; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17189; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17190; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17191; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17192; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17193; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17194; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17195; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17196; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]
17197; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17198; AVX2-NEXT:    retq
17199;
17200; AVX512VPOPCNTDQ-LABEL: ugt_47_v4i64:
17201; AVX512VPOPCNTDQ:       # %bb.0:
17202; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17203; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17204; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]
17205; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17206; AVX512VPOPCNTDQ-NEXT:    retq
17207;
17208; AVX512VPOPCNTDQVL-LABEL: ugt_47_v4i64:
17209; AVX512VPOPCNTDQVL:       # %bb.0:
17210; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17211; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17212; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17213; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17214; AVX512VPOPCNTDQVL-NEXT:    retq
17215;
17216; BITALG_NOVLX-LABEL: ugt_47_v4i64:
17217; BITALG_NOVLX:       # %bb.0:
17218; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17219; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17220; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17221; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17222; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]
17223; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17224; BITALG_NOVLX-NEXT:    retq
17225;
17226; BITALG-LABEL: ugt_47_v4i64:
17227; BITALG:       # %bb.0:
17228; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17229; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17230; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17231; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17232; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17233; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17234; BITALG-NEXT:    retq
17235  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17236  %3 = icmp ugt <4 x i64> %2, <i64 47, i64 47, i64 47, i64 47>
17237  %4 = sext <4 x i1> %3 to <4 x i64>
17238  ret <4 x i64> %4
17239}
17240
17241define <4 x i64> @ult_48_v4i64(<4 x i64> %0) {
17242; AVX1-LABEL: ult_48_v4i64:
17243; AVX1:       # %bb.0:
17244; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17245; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17246; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17247; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17248; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17249; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17250; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17251; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17252; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17253; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17254; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17255; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17256; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17257; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17258; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17259; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17260; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17261; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17262; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [48,48]
17263; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17264; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
17265; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17266; AVX1-NEXT:    retq
17267;
17268; AVX2-LABEL: ult_48_v4i64:
17269; AVX2:       # %bb.0:
17270; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17271; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17272; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17273; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17274; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17275; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17276; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17277; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17278; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17279; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17280; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]
17281; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17282; AVX2-NEXT:    retq
17283;
17284; AVX512VPOPCNTDQ-LABEL: ult_48_v4i64:
17285; AVX512VPOPCNTDQ:       # %bb.0:
17286; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17287; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17288; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]
17289; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17290; AVX512VPOPCNTDQ-NEXT:    retq
17291;
17292; AVX512VPOPCNTDQVL-LABEL: ult_48_v4i64:
17293; AVX512VPOPCNTDQVL:       # %bb.0:
17294; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17295; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17296; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17297; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17298; AVX512VPOPCNTDQVL-NEXT:    retq
17299;
17300; BITALG_NOVLX-LABEL: ult_48_v4i64:
17301; BITALG_NOVLX:       # %bb.0:
17302; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17303; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17304; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17305; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17306; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]
17307; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17308; BITALG_NOVLX-NEXT:    retq
17309;
17310; BITALG-LABEL: ult_48_v4i64:
17311; BITALG:       # %bb.0:
17312; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17313; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17314; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17315; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17316; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17317; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17318; BITALG-NEXT:    retq
17319  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17320  %3 = icmp ult <4 x i64> %2, <i64 48, i64 48, i64 48, i64 48>
17321  %4 = sext <4 x i1> %3 to <4 x i64>
17322  ret <4 x i64> %4
17323}
17324
17325define <4 x i64> @ugt_48_v4i64(<4 x i64> %0) {
17326; AVX1-LABEL: ugt_48_v4i64:
17327; AVX1:       # %bb.0:
17328; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17329; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17330; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17331; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17332; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17333; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17334; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17335; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17336; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17337; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17338; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17339; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17340; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17341; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17342; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17343; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17344; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17345; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17346; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [48,48]
17347; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17348; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
17349; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17350; AVX1-NEXT:    retq
17351;
17352; AVX2-LABEL: ugt_48_v4i64:
17353; AVX2:       # %bb.0:
17354; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17355; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17356; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17357; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17358; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17359; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17360; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17361; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17362; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17363; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17364; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]
17365; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17366; AVX2-NEXT:    retq
17367;
17368; AVX512VPOPCNTDQ-LABEL: ugt_48_v4i64:
17369; AVX512VPOPCNTDQ:       # %bb.0:
17370; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17371; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17372; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]
17373; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17374; AVX512VPOPCNTDQ-NEXT:    retq
17375;
17376; AVX512VPOPCNTDQVL-LABEL: ugt_48_v4i64:
17377; AVX512VPOPCNTDQVL:       # %bb.0:
17378; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17379; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17380; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17381; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17382; AVX512VPOPCNTDQVL-NEXT:    retq
17383;
17384; BITALG_NOVLX-LABEL: ugt_48_v4i64:
17385; BITALG_NOVLX:       # %bb.0:
17386; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17387; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17388; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17389; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17390; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]
17391; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17392; BITALG_NOVLX-NEXT:    retq
17393;
17394; BITALG-LABEL: ugt_48_v4i64:
17395; BITALG:       # %bb.0:
17396; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17397; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17398; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17399; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17400; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17401; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17402; BITALG-NEXT:    retq
17403  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17404  %3 = icmp ugt <4 x i64> %2, <i64 48, i64 48, i64 48, i64 48>
17405  %4 = sext <4 x i1> %3 to <4 x i64>
17406  ret <4 x i64> %4
17407}
17408
17409define <4 x i64> @ult_49_v4i64(<4 x i64> %0) {
17410; AVX1-LABEL: ult_49_v4i64:
17411; AVX1:       # %bb.0:
17412; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17413; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17414; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17415; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17416; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17417; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17418; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17419; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17420; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17421; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17422; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17423; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17424; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17425; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17426; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17427; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17428; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17429; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17430; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [49,49]
17431; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17432; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
17433; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17434; AVX1-NEXT:    retq
17435;
17436; AVX2-LABEL: ult_49_v4i64:
17437; AVX2:       # %bb.0:
17438; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17439; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17440; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17441; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17442; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17443; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17444; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17445; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17446; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17447; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17448; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]
17449; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17450; AVX2-NEXT:    retq
17451;
17452; AVX512VPOPCNTDQ-LABEL: ult_49_v4i64:
17453; AVX512VPOPCNTDQ:       # %bb.0:
17454; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17455; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17456; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]
17457; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17458; AVX512VPOPCNTDQ-NEXT:    retq
17459;
17460; AVX512VPOPCNTDQVL-LABEL: ult_49_v4i64:
17461; AVX512VPOPCNTDQVL:       # %bb.0:
17462; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17463; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17464; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17465; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17466; AVX512VPOPCNTDQVL-NEXT:    retq
17467;
17468; BITALG_NOVLX-LABEL: ult_49_v4i64:
17469; BITALG_NOVLX:       # %bb.0:
17470; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17471; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17472; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17473; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17474; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]
17475; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17476; BITALG_NOVLX-NEXT:    retq
17477;
17478; BITALG-LABEL: ult_49_v4i64:
17479; BITALG:       # %bb.0:
17480; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17481; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17482; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17483; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17484; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17485; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17486; BITALG-NEXT:    retq
17487  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17488  %3 = icmp ult <4 x i64> %2, <i64 49, i64 49, i64 49, i64 49>
17489  %4 = sext <4 x i1> %3 to <4 x i64>
17490  ret <4 x i64> %4
17491}
17492
17493define <4 x i64> @ugt_49_v4i64(<4 x i64> %0) {
17494; AVX1-LABEL: ugt_49_v4i64:
17495; AVX1:       # %bb.0:
17496; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17497; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17498; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17499; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17500; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17501; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17502; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17503; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17504; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17505; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17506; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17507; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17508; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17509; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17510; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17511; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17512; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17513; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17514; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [49,49]
17515; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17516; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
17517; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17518; AVX1-NEXT:    retq
17519;
17520; AVX2-LABEL: ugt_49_v4i64:
17521; AVX2:       # %bb.0:
17522; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17523; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17524; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17525; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17526; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17527; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17528; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17529; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17530; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17531; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17532; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]
17533; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17534; AVX2-NEXT:    retq
17535;
17536; AVX512VPOPCNTDQ-LABEL: ugt_49_v4i64:
17537; AVX512VPOPCNTDQ:       # %bb.0:
17538; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17539; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17540; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]
17541; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17542; AVX512VPOPCNTDQ-NEXT:    retq
17543;
17544; AVX512VPOPCNTDQVL-LABEL: ugt_49_v4i64:
17545; AVX512VPOPCNTDQVL:       # %bb.0:
17546; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17547; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17548; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17549; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17550; AVX512VPOPCNTDQVL-NEXT:    retq
17551;
17552; BITALG_NOVLX-LABEL: ugt_49_v4i64:
17553; BITALG_NOVLX:       # %bb.0:
17554; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17555; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17556; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17557; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17558; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]
17559; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17560; BITALG_NOVLX-NEXT:    retq
17561;
17562; BITALG-LABEL: ugt_49_v4i64:
17563; BITALG:       # %bb.0:
17564; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17565; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17566; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17567; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17568; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17569; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17570; BITALG-NEXT:    retq
17571  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17572  %3 = icmp ugt <4 x i64> %2, <i64 49, i64 49, i64 49, i64 49>
17573  %4 = sext <4 x i1> %3 to <4 x i64>
17574  ret <4 x i64> %4
17575}
17576
17577define <4 x i64> @ult_50_v4i64(<4 x i64> %0) {
17578; AVX1-LABEL: ult_50_v4i64:
17579; AVX1:       # %bb.0:
17580; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17581; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17582; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17583; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17584; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17585; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17586; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17587; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17588; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17589; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17590; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17591; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17592; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17593; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17594; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17595; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17596; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17597; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17598; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [50,50]
17599; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17600; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
17601; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17602; AVX1-NEXT:    retq
17603;
17604; AVX2-LABEL: ult_50_v4i64:
17605; AVX2:       # %bb.0:
17606; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17607; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17608; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17609; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17610; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17611; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17612; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17613; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17614; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17615; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17616; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]
17617; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17618; AVX2-NEXT:    retq
17619;
17620; AVX512VPOPCNTDQ-LABEL: ult_50_v4i64:
17621; AVX512VPOPCNTDQ:       # %bb.0:
17622; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17623; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17624; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]
17625; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17626; AVX512VPOPCNTDQ-NEXT:    retq
17627;
17628; AVX512VPOPCNTDQVL-LABEL: ult_50_v4i64:
17629; AVX512VPOPCNTDQVL:       # %bb.0:
17630; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17631; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17632; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17633; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17634; AVX512VPOPCNTDQVL-NEXT:    retq
17635;
17636; BITALG_NOVLX-LABEL: ult_50_v4i64:
17637; BITALG_NOVLX:       # %bb.0:
17638; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17639; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17640; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17641; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17642; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]
17643; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17644; BITALG_NOVLX-NEXT:    retq
17645;
17646; BITALG-LABEL: ult_50_v4i64:
17647; BITALG:       # %bb.0:
17648; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17649; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17650; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17651; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17652; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17653; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17654; BITALG-NEXT:    retq
17655  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17656  %3 = icmp ult <4 x i64> %2, <i64 50, i64 50, i64 50, i64 50>
17657  %4 = sext <4 x i1> %3 to <4 x i64>
17658  ret <4 x i64> %4
17659}
17660
17661define <4 x i64> @ugt_50_v4i64(<4 x i64> %0) {
17662; AVX1-LABEL: ugt_50_v4i64:
17663; AVX1:       # %bb.0:
17664; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17665; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17666; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17667; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17668; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17669; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17670; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17671; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17672; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17673; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17674; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17675; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17676; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17677; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17678; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17679; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17680; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17681; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17682; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [50,50]
17683; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17684; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
17685; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17686; AVX1-NEXT:    retq
17687;
17688; AVX2-LABEL: ugt_50_v4i64:
17689; AVX2:       # %bb.0:
17690; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17691; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17692; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17693; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17694; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17695; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17696; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17697; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17698; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17699; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17700; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]
17701; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17702; AVX2-NEXT:    retq
17703;
17704; AVX512VPOPCNTDQ-LABEL: ugt_50_v4i64:
17705; AVX512VPOPCNTDQ:       # %bb.0:
17706; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17707; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17708; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]
17709; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17710; AVX512VPOPCNTDQ-NEXT:    retq
17711;
17712; AVX512VPOPCNTDQVL-LABEL: ugt_50_v4i64:
17713; AVX512VPOPCNTDQVL:       # %bb.0:
17714; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17715; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17716; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17717; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17718; AVX512VPOPCNTDQVL-NEXT:    retq
17719;
17720; BITALG_NOVLX-LABEL: ugt_50_v4i64:
17721; BITALG_NOVLX:       # %bb.0:
17722; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17723; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17724; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17725; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17726; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]
17727; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17728; BITALG_NOVLX-NEXT:    retq
17729;
17730; BITALG-LABEL: ugt_50_v4i64:
17731; BITALG:       # %bb.0:
17732; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17733; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17734; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17735; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17736; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17737; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17738; BITALG-NEXT:    retq
17739  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17740  %3 = icmp ugt <4 x i64> %2, <i64 50, i64 50, i64 50, i64 50>
17741  %4 = sext <4 x i1> %3 to <4 x i64>
17742  ret <4 x i64> %4
17743}
17744
17745define <4 x i64> @ult_51_v4i64(<4 x i64> %0) {
17746; AVX1-LABEL: ult_51_v4i64:
17747; AVX1:       # %bb.0:
17748; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17749; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17750; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17751; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17752; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17753; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17754; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17755; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17756; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17757; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17758; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17759; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17760; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17761; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17762; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17763; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17764; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17765; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17766; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [51,51]
17767; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17768; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
17769; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17770; AVX1-NEXT:    retq
17771;
17772; AVX2-LABEL: ult_51_v4i64:
17773; AVX2:       # %bb.0:
17774; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17775; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17776; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17777; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17778; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17779; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17780; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17781; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17782; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17783; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17784; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]
17785; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17786; AVX2-NEXT:    retq
17787;
17788; AVX512VPOPCNTDQ-LABEL: ult_51_v4i64:
17789; AVX512VPOPCNTDQ:       # %bb.0:
17790; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17791; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17792; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]
17793; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17794; AVX512VPOPCNTDQ-NEXT:    retq
17795;
17796; AVX512VPOPCNTDQVL-LABEL: ult_51_v4i64:
17797; AVX512VPOPCNTDQVL:       # %bb.0:
17798; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17799; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17800; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17801; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17802; AVX512VPOPCNTDQVL-NEXT:    retq
17803;
17804; BITALG_NOVLX-LABEL: ult_51_v4i64:
17805; BITALG_NOVLX:       # %bb.0:
17806; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17807; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17808; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17809; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17810; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]
17811; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17812; BITALG_NOVLX-NEXT:    retq
17813;
17814; BITALG-LABEL: ult_51_v4i64:
17815; BITALG:       # %bb.0:
17816; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17817; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17818; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17819; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17820; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17821; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17822; BITALG-NEXT:    retq
17823  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17824  %3 = icmp ult <4 x i64> %2, <i64 51, i64 51, i64 51, i64 51>
17825  %4 = sext <4 x i1> %3 to <4 x i64>
17826  ret <4 x i64> %4
17827}
17828
17829define <4 x i64> @ugt_51_v4i64(<4 x i64> %0) {
17830; AVX1-LABEL: ugt_51_v4i64:
17831; AVX1:       # %bb.0:
17832; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17833; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17834; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17835; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17836; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17837; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17838; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17839; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17840; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17841; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17842; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17843; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17844; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17845; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17846; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17847; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17848; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17849; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17850; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [51,51]
17851; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17852; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
17853; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17854; AVX1-NEXT:    retq
17855;
17856; AVX2-LABEL: ugt_51_v4i64:
17857; AVX2:       # %bb.0:
17858; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17859; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17860; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17861; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17862; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17863; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17864; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17865; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17866; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17867; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17868; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]
17869; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17870; AVX2-NEXT:    retq
17871;
17872; AVX512VPOPCNTDQ-LABEL: ugt_51_v4i64:
17873; AVX512VPOPCNTDQ:       # %bb.0:
17874; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17875; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17876; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]
17877; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17878; AVX512VPOPCNTDQ-NEXT:    retq
17879;
17880; AVX512VPOPCNTDQVL-LABEL: ugt_51_v4i64:
17881; AVX512VPOPCNTDQVL:       # %bb.0:
17882; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17883; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17884; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17885; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17886; AVX512VPOPCNTDQVL-NEXT:    retq
17887;
17888; BITALG_NOVLX-LABEL: ugt_51_v4i64:
17889; BITALG_NOVLX:       # %bb.0:
17890; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17891; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17892; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17893; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17894; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]
17895; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
17896; BITALG_NOVLX-NEXT:    retq
17897;
17898; BITALG-LABEL: ugt_51_v4i64:
17899; BITALG:       # %bb.0:
17900; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17901; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17902; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17903; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17904; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17905; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17906; BITALG-NEXT:    retq
17907  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17908  %3 = icmp ugt <4 x i64> %2, <i64 51, i64 51, i64 51, i64 51>
17909  %4 = sext <4 x i1> %3 to <4 x i64>
17910  ret <4 x i64> %4
17911}
17912
17913define <4 x i64> @ult_52_v4i64(<4 x i64> %0) {
17914; AVX1-LABEL: ult_52_v4i64:
17915; AVX1:       # %bb.0:
17916; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17917; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17918; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17919; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17920; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
17921; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
17922; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
17923; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
17924; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
17925; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
17926; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
17927; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
17928; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
17929; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17930; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17931; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17932; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
17933; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
17934; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [52,52]
17935; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17936; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
17937; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
17938; AVX1-NEXT:    retq
17939;
17940; AVX2-LABEL: ult_52_v4i64:
17941; AVX2:       # %bb.0:
17942; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17943; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
17944; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17945; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
17946; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
17947; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
17948; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
17949; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
17950; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17951; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17952; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]
17953; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17954; AVX2-NEXT:    retq
17955;
17956; AVX512VPOPCNTDQ-LABEL: ult_52_v4i64:
17957; AVX512VPOPCNTDQ:       # %bb.0:
17958; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17959; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17960; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]
17961; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17962; AVX512VPOPCNTDQ-NEXT:    retq
17963;
17964; AVX512VPOPCNTDQVL-LABEL: ult_52_v4i64:
17965; AVX512VPOPCNTDQVL:       # %bb.0:
17966; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
17967; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17968; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17969; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17970; AVX512VPOPCNTDQVL-NEXT:    retq
17971;
17972; BITALG_NOVLX-LABEL: ult_52_v4i64:
17973; BITALG_NOVLX:       # %bb.0:
17974; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
17975; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17976; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17977; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17978; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]
17979; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
17980; BITALG_NOVLX-NEXT:    retq
17981;
17982; BITALG-LABEL: ult_52_v4i64:
17983; BITALG:       # %bb.0:
17984; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
17985; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17986; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
17987; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
17988; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
17989; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
17990; BITALG-NEXT:    retq
17991  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
17992  %3 = icmp ult <4 x i64> %2, <i64 52, i64 52, i64 52, i64 52>
17993  %4 = sext <4 x i1> %3 to <4 x i64>
17994  ret <4 x i64> %4
17995}
17996
17997define <4 x i64> @ugt_52_v4i64(<4 x i64> %0) {
17998; AVX1-LABEL: ugt_52_v4i64:
17999; AVX1:       # %bb.0:
18000; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18001; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18002; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18003; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18004; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18005; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18006; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18007; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18008; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18009; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18010; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18011; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18012; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18013; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18014; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18015; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18016; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18017; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18018; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [52,52]
18019; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18020; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
18021; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18022; AVX1-NEXT:    retq
18023;
18024; AVX2-LABEL: ugt_52_v4i64:
18025; AVX2:       # %bb.0:
18026; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18027; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18028; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18029; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18030; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18031; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18032; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18033; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18034; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18035; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18036; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]
18037; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18038; AVX2-NEXT:    retq
18039;
18040; AVX512VPOPCNTDQ-LABEL: ugt_52_v4i64:
18041; AVX512VPOPCNTDQ:       # %bb.0:
18042; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18043; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18044; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]
18045; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18046; AVX512VPOPCNTDQ-NEXT:    retq
18047;
18048; AVX512VPOPCNTDQVL-LABEL: ugt_52_v4i64:
18049; AVX512VPOPCNTDQVL:       # %bb.0:
18050; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18051; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18052; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18053; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18054; AVX512VPOPCNTDQVL-NEXT:    retq
18055;
18056; BITALG_NOVLX-LABEL: ugt_52_v4i64:
18057; BITALG_NOVLX:       # %bb.0:
18058; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18059; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18060; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18061; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18062; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]
18063; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18064; BITALG_NOVLX-NEXT:    retq
18065;
18066; BITALG-LABEL: ugt_52_v4i64:
18067; BITALG:       # %bb.0:
18068; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18069; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18070; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18071; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18072; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18073; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18074; BITALG-NEXT:    retq
18075  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18076  %3 = icmp ugt <4 x i64> %2, <i64 52, i64 52, i64 52, i64 52>
18077  %4 = sext <4 x i1> %3 to <4 x i64>
18078  ret <4 x i64> %4
18079}
18080
18081define <4 x i64> @ult_53_v4i64(<4 x i64> %0) {
18082; AVX1-LABEL: ult_53_v4i64:
18083; AVX1:       # %bb.0:
18084; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18085; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18086; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18087; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18088; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18089; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18090; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18091; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18092; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18093; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18094; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18095; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18096; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18097; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18098; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18099; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18100; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18101; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18102; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [53,53]
18103; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18104; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
18105; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18106; AVX1-NEXT:    retq
18107;
18108; AVX2-LABEL: ult_53_v4i64:
18109; AVX2:       # %bb.0:
18110; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18111; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18112; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18113; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18114; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18115; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18116; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18117; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18118; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18119; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18120; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]
18121; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18122; AVX2-NEXT:    retq
18123;
18124; AVX512VPOPCNTDQ-LABEL: ult_53_v4i64:
18125; AVX512VPOPCNTDQ:       # %bb.0:
18126; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18127; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18128; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]
18129; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18130; AVX512VPOPCNTDQ-NEXT:    retq
18131;
18132; AVX512VPOPCNTDQVL-LABEL: ult_53_v4i64:
18133; AVX512VPOPCNTDQVL:       # %bb.0:
18134; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18135; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18136; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18137; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18138; AVX512VPOPCNTDQVL-NEXT:    retq
18139;
18140; BITALG_NOVLX-LABEL: ult_53_v4i64:
18141; BITALG_NOVLX:       # %bb.0:
18142; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18143; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18144; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18145; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18146; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]
18147; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18148; BITALG_NOVLX-NEXT:    retq
18149;
18150; BITALG-LABEL: ult_53_v4i64:
18151; BITALG:       # %bb.0:
18152; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18153; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18154; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18155; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18156; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18157; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18158; BITALG-NEXT:    retq
18159  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18160  %3 = icmp ult <4 x i64> %2, <i64 53, i64 53, i64 53, i64 53>
18161  %4 = sext <4 x i1> %3 to <4 x i64>
18162  ret <4 x i64> %4
18163}
18164
18165define <4 x i64> @ugt_53_v4i64(<4 x i64> %0) {
18166; AVX1-LABEL: ugt_53_v4i64:
18167; AVX1:       # %bb.0:
18168; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18169; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18170; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18171; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18172; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18173; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18174; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18175; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18176; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18177; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18178; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18179; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18180; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18181; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18182; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18183; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18184; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18185; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18186; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [53,53]
18187; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18188; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
18189; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18190; AVX1-NEXT:    retq
18191;
18192; AVX2-LABEL: ugt_53_v4i64:
18193; AVX2:       # %bb.0:
18194; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18195; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18196; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18197; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18198; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18199; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18200; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18201; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18202; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18203; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18204; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]
18205; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18206; AVX2-NEXT:    retq
18207;
18208; AVX512VPOPCNTDQ-LABEL: ugt_53_v4i64:
18209; AVX512VPOPCNTDQ:       # %bb.0:
18210; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18211; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18212; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]
18213; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18214; AVX512VPOPCNTDQ-NEXT:    retq
18215;
18216; AVX512VPOPCNTDQVL-LABEL: ugt_53_v4i64:
18217; AVX512VPOPCNTDQVL:       # %bb.0:
18218; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18219; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18220; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18221; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18222; AVX512VPOPCNTDQVL-NEXT:    retq
18223;
18224; BITALG_NOVLX-LABEL: ugt_53_v4i64:
18225; BITALG_NOVLX:       # %bb.0:
18226; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18227; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18228; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18229; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18230; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]
18231; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18232; BITALG_NOVLX-NEXT:    retq
18233;
18234; BITALG-LABEL: ugt_53_v4i64:
18235; BITALG:       # %bb.0:
18236; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18237; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18238; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18239; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18240; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18241; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18242; BITALG-NEXT:    retq
18243  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18244  %3 = icmp ugt <4 x i64> %2, <i64 53, i64 53, i64 53, i64 53>
18245  %4 = sext <4 x i1> %3 to <4 x i64>
18246  ret <4 x i64> %4
18247}
18248
18249define <4 x i64> @ult_54_v4i64(<4 x i64> %0) {
18250; AVX1-LABEL: ult_54_v4i64:
18251; AVX1:       # %bb.0:
18252; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18253; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18254; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18255; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18256; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18257; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18258; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18259; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18260; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18261; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18262; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18263; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18264; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18265; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18266; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18267; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18268; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18269; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18270; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [54,54]
18271; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18272; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
18273; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18274; AVX1-NEXT:    retq
18275;
18276; AVX2-LABEL: ult_54_v4i64:
18277; AVX2:       # %bb.0:
18278; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18279; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18280; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18281; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18282; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18283; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18284; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18285; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18286; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18287; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18288; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]
18289; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18290; AVX2-NEXT:    retq
18291;
18292; AVX512VPOPCNTDQ-LABEL: ult_54_v4i64:
18293; AVX512VPOPCNTDQ:       # %bb.0:
18294; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18295; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18296; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]
18297; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18298; AVX512VPOPCNTDQ-NEXT:    retq
18299;
18300; AVX512VPOPCNTDQVL-LABEL: ult_54_v4i64:
18301; AVX512VPOPCNTDQVL:       # %bb.0:
18302; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18303; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18304; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18305; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18306; AVX512VPOPCNTDQVL-NEXT:    retq
18307;
18308; BITALG_NOVLX-LABEL: ult_54_v4i64:
18309; BITALG_NOVLX:       # %bb.0:
18310; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18311; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18312; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18313; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18314; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]
18315; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18316; BITALG_NOVLX-NEXT:    retq
18317;
18318; BITALG-LABEL: ult_54_v4i64:
18319; BITALG:       # %bb.0:
18320; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18321; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18322; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18323; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18324; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18325; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18326; BITALG-NEXT:    retq
18327  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18328  %3 = icmp ult <4 x i64> %2, <i64 54, i64 54, i64 54, i64 54>
18329  %4 = sext <4 x i1> %3 to <4 x i64>
18330  ret <4 x i64> %4
18331}
18332
18333define <4 x i64> @ugt_54_v4i64(<4 x i64> %0) {
18334; AVX1-LABEL: ugt_54_v4i64:
18335; AVX1:       # %bb.0:
18336; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18337; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18338; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18339; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18340; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18341; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18342; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18343; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18344; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18345; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18346; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18347; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18348; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18349; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18350; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18351; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18352; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18353; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18354; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [54,54]
18355; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18356; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
18357; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18358; AVX1-NEXT:    retq
18359;
18360; AVX2-LABEL: ugt_54_v4i64:
18361; AVX2:       # %bb.0:
18362; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18363; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18364; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18365; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18366; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18367; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18368; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18369; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18370; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18371; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18372; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]
18373; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18374; AVX2-NEXT:    retq
18375;
18376; AVX512VPOPCNTDQ-LABEL: ugt_54_v4i64:
18377; AVX512VPOPCNTDQ:       # %bb.0:
18378; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18379; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18380; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]
18381; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18382; AVX512VPOPCNTDQ-NEXT:    retq
18383;
18384; AVX512VPOPCNTDQVL-LABEL: ugt_54_v4i64:
18385; AVX512VPOPCNTDQVL:       # %bb.0:
18386; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18387; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18388; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18389; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18390; AVX512VPOPCNTDQVL-NEXT:    retq
18391;
18392; BITALG_NOVLX-LABEL: ugt_54_v4i64:
18393; BITALG_NOVLX:       # %bb.0:
18394; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18395; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18396; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18397; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18398; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]
18399; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18400; BITALG_NOVLX-NEXT:    retq
18401;
18402; BITALG-LABEL: ugt_54_v4i64:
18403; BITALG:       # %bb.0:
18404; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18405; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18406; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18407; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18408; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18409; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18410; BITALG-NEXT:    retq
18411  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18412  %3 = icmp ugt <4 x i64> %2, <i64 54, i64 54, i64 54, i64 54>
18413  %4 = sext <4 x i1> %3 to <4 x i64>
18414  ret <4 x i64> %4
18415}
18416
18417define <4 x i64> @ult_55_v4i64(<4 x i64> %0) {
18418; AVX1-LABEL: ult_55_v4i64:
18419; AVX1:       # %bb.0:
18420; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18421; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18422; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18423; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18424; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18425; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18426; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18427; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18428; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18429; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18430; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18431; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18432; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18433; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18434; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18435; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18436; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18437; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18438; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [55,55]
18439; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18440; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
18441; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18442; AVX1-NEXT:    retq
18443;
18444; AVX2-LABEL: ult_55_v4i64:
18445; AVX2:       # %bb.0:
18446; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18447; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18448; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18449; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18450; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18451; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18452; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18453; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18454; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18455; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18456; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]
18457; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18458; AVX2-NEXT:    retq
18459;
18460; AVX512VPOPCNTDQ-LABEL: ult_55_v4i64:
18461; AVX512VPOPCNTDQ:       # %bb.0:
18462; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18463; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18464; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]
18465; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18466; AVX512VPOPCNTDQ-NEXT:    retq
18467;
18468; AVX512VPOPCNTDQVL-LABEL: ult_55_v4i64:
18469; AVX512VPOPCNTDQVL:       # %bb.0:
18470; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18471; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18472; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18473; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18474; AVX512VPOPCNTDQVL-NEXT:    retq
18475;
18476; BITALG_NOVLX-LABEL: ult_55_v4i64:
18477; BITALG_NOVLX:       # %bb.0:
18478; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18479; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18480; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18481; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18482; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]
18483; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18484; BITALG_NOVLX-NEXT:    retq
18485;
18486; BITALG-LABEL: ult_55_v4i64:
18487; BITALG:       # %bb.0:
18488; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18489; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18490; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18491; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18492; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18493; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18494; BITALG-NEXT:    retq
18495  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18496  %3 = icmp ult <4 x i64> %2, <i64 55, i64 55, i64 55, i64 55>
18497  %4 = sext <4 x i1> %3 to <4 x i64>
18498  ret <4 x i64> %4
18499}
18500
18501define <4 x i64> @ugt_55_v4i64(<4 x i64> %0) {
18502; AVX1-LABEL: ugt_55_v4i64:
18503; AVX1:       # %bb.0:
18504; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18505; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18506; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18507; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18508; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18509; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18510; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18511; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18512; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18513; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18514; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18515; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18516; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18517; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18518; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18519; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18520; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18521; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18522; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [55,55]
18523; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18524; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
18525; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18526; AVX1-NEXT:    retq
18527;
18528; AVX2-LABEL: ugt_55_v4i64:
18529; AVX2:       # %bb.0:
18530; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18531; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18532; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18533; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18534; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18535; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18536; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18537; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18538; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18539; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18540; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]
18541; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18542; AVX2-NEXT:    retq
18543;
18544; AVX512VPOPCNTDQ-LABEL: ugt_55_v4i64:
18545; AVX512VPOPCNTDQ:       # %bb.0:
18546; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18547; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18548; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]
18549; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18550; AVX512VPOPCNTDQ-NEXT:    retq
18551;
18552; AVX512VPOPCNTDQVL-LABEL: ugt_55_v4i64:
18553; AVX512VPOPCNTDQVL:       # %bb.0:
18554; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18555; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18556; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18557; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18558; AVX512VPOPCNTDQVL-NEXT:    retq
18559;
18560; BITALG_NOVLX-LABEL: ugt_55_v4i64:
18561; BITALG_NOVLX:       # %bb.0:
18562; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18563; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18564; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18565; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18566; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]
18567; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18568; BITALG_NOVLX-NEXT:    retq
18569;
18570; BITALG-LABEL: ugt_55_v4i64:
18571; BITALG:       # %bb.0:
18572; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18573; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18574; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18575; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18576; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18577; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18578; BITALG-NEXT:    retq
18579  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18580  %3 = icmp ugt <4 x i64> %2, <i64 55, i64 55, i64 55, i64 55>
18581  %4 = sext <4 x i1> %3 to <4 x i64>
18582  ret <4 x i64> %4
18583}
18584
18585define <4 x i64> @ult_56_v4i64(<4 x i64> %0) {
18586; AVX1-LABEL: ult_56_v4i64:
18587; AVX1:       # %bb.0:
18588; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18589; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18590; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18591; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18592; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18593; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18594; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18595; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18596; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18597; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18598; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18599; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18600; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18601; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18602; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18603; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18604; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18605; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18606; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [56,56]
18607; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18608; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
18609; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18610; AVX1-NEXT:    retq
18611;
18612; AVX2-LABEL: ult_56_v4i64:
18613; AVX2:       # %bb.0:
18614; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18615; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18616; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18617; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18618; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18619; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18620; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18621; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18622; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18623; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18624; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]
18625; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18626; AVX2-NEXT:    retq
18627;
18628; AVX512VPOPCNTDQ-LABEL: ult_56_v4i64:
18629; AVX512VPOPCNTDQ:       # %bb.0:
18630; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18631; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18632; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]
18633; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18634; AVX512VPOPCNTDQ-NEXT:    retq
18635;
18636; AVX512VPOPCNTDQVL-LABEL: ult_56_v4i64:
18637; AVX512VPOPCNTDQVL:       # %bb.0:
18638; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18639; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18640; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18641; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18642; AVX512VPOPCNTDQVL-NEXT:    retq
18643;
18644; BITALG_NOVLX-LABEL: ult_56_v4i64:
18645; BITALG_NOVLX:       # %bb.0:
18646; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18647; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18648; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18649; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18650; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]
18651; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18652; BITALG_NOVLX-NEXT:    retq
18653;
18654; BITALG-LABEL: ult_56_v4i64:
18655; BITALG:       # %bb.0:
18656; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18657; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18658; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18659; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18660; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18661; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18662; BITALG-NEXT:    retq
18663  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18664  %3 = icmp ult <4 x i64> %2, <i64 56, i64 56, i64 56, i64 56>
18665  %4 = sext <4 x i1> %3 to <4 x i64>
18666  ret <4 x i64> %4
18667}
18668
18669define <4 x i64> @ugt_56_v4i64(<4 x i64> %0) {
18670; AVX1-LABEL: ugt_56_v4i64:
18671; AVX1:       # %bb.0:
18672; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18673; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18674; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18675; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18676; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18677; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18678; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18679; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18680; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18681; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18682; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18683; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18684; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18685; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18686; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18687; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18688; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18689; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18690; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [56,56]
18691; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18692; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
18693; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18694; AVX1-NEXT:    retq
18695;
18696; AVX2-LABEL: ugt_56_v4i64:
18697; AVX2:       # %bb.0:
18698; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18699; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18700; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18701; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18702; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18703; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18704; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18705; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18706; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18707; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18708; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]
18709; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18710; AVX2-NEXT:    retq
18711;
18712; AVX512VPOPCNTDQ-LABEL: ugt_56_v4i64:
18713; AVX512VPOPCNTDQ:       # %bb.0:
18714; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18715; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18716; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]
18717; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18718; AVX512VPOPCNTDQ-NEXT:    retq
18719;
18720; AVX512VPOPCNTDQVL-LABEL: ugt_56_v4i64:
18721; AVX512VPOPCNTDQVL:       # %bb.0:
18722; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18723; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18724; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18725; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18726; AVX512VPOPCNTDQVL-NEXT:    retq
18727;
18728; BITALG_NOVLX-LABEL: ugt_56_v4i64:
18729; BITALG_NOVLX:       # %bb.0:
18730; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18731; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18732; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18733; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18734; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]
18735; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18736; BITALG_NOVLX-NEXT:    retq
18737;
18738; BITALG-LABEL: ugt_56_v4i64:
18739; BITALG:       # %bb.0:
18740; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18741; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18742; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18743; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18744; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18745; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18746; BITALG-NEXT:    retq
18747  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18748  %3 = icmp ugt <4 x i64> %2, <i64 56, i64 56, i64 56, i64 56>
18749  %4 = sext <4 x i1> %3 to <4 x i64>
18750  ret <4 x i64> %4
18751}
18752
18753define <4 x i64> @ult_57_v4i64(<4 x i64> %0) {
18754; AVX1-LABEL: ult_57_v4i64:
18755; AVX1:       # %bb.0:
18756; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18757; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18758; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18759; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18760; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18761; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18762; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18763; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18764; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18765; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18766; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18767; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18768; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18769; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18770; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18771; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18772; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18773; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18774; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [57,57]
18775; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18776; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
18777; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18778; AVX1-NEXT:    retq
18779;
18780; AVX2-LABEL: ult_57_v4i64:
18781; AVX2:       # %bb.0:
18782; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18783; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18784; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18785; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18786; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18787; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18788; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18789; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18790; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18791; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18792; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]
18793; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18794; AVX2-NEXT:    retq
18795;
18796; AVX512VPOPCNTDQ-LABEL: ult_57_v4i64:
18797; AVX512VPOPCNTDQ:       # %bb.0:
18798; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18799; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18800; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]
18801; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18802; AVX512VPOPCNTDQ-NEXT:    retq
18803;
18804; AVX512VPOPCNTDQVL-LABEL: ult_57_v4i64:
18805; AVX512VPOPCNTDQVL:       # %bb.0:
18806; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18807; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18808; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18809; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18810; AVX512VPOPCNTDQVL-NEXT:    retq
18811;
18812; BITALG_NOVLX-LABEL: ult_57_v4i64:
18813; BITALG_NOVLX:       # %bb.0:
18814; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18815; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18816; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18817; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18818; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]
18819; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18820; BITALG_NOVLX-NEXT:    retq
18821;
18822; BITALG-LABEL: ult_57_v4i64:
18823; BITALG:       # %bb.0:
18824; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18825; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18826; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18827; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18828; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18829; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18830; BITALG-NEXT:    retq
18831  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18832  %3 = icmp ult <4 x i64> %2, <i64 57, i64 57, i64 57, i64 57>
18833  %4 = sext <4 x i1> %3 to <4 x i64>
18834  ret <4 x i64> %4
18835}
18836
18837define <4 x i64> @ugt_57_v4i64(<4 x i64> %0) {
18838; AVX1-LABEL: ugt_57_v4i64:
18839; AVX1:       # %bb.0:
18840; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18841; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18842; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18843; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18844; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18845; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18846; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18847; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18848; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18849; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18850; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18851; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18852; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18853; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18854; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18855; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18856; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18857; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18858; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [57,57]
18859; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18860; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
18861; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18862; AVX1-NEXT:    retq
18863;
18864; AVX2-LABEL: ugt_57_v4i64:
18865; AVX2:       # %bb.0:
18866; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18867; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18868; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18869; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18870; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18871; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18872; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18873; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18874; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18875; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18876; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]
18877; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18878; AVX2-NEXT:    retq
18879;
18880; AVX512VPOPCNTDQ-LABEL: ugt_57_v4i64:
18881; AVX512VPOPCNTDQ:       # %bb.0:
18882; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18883; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18884; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]
18885; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18886; AVX512VPOPCNTDQ-NEXT:    retq
18887;
18888; AVX512VPOPCNTDQVL-LABEL: ugt_57_v4i64:
18889; AVX512VPOPCNTDQVL:       # %bb.0:
18890; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18891; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18892; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18893; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18894; AVX512VPOPCNTDQVL-NEXT:    retq
18895;
18896; BITALG_NOVLX-LABEL: ugt_57_v4i64:
18897; BITALG_NOVLX:       # %bb.0:
18898; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18899; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18900; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18901; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18902; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]
18903; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
18904; BITALG_NOVLX-NEXT:    retq
18905;
18906; BITALG-LABEL: ugt_57_v4i64:
18907; BITALG:       # %bb.0:
18908; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18909; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18910; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18911; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18912; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18913; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18914; BITALG-NEXT:    retq
18915  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
18916  %3 = icmp ugt <4 x i64> %2, <i64 57, i64 57, i64 57, i64 57>
18917  %4 = sext <4 x i1> %3 to <4 x i64>
18918  ret <4 x i64> %4
18919}
18920
18921define <4 x i64> @ult_58_v4i64(<4 x i64> %0) {
18922; AVX1-LABEL: ult_58_v4i64:
18923; AVX1:       # %bb.0:
18924; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18925; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18926; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18927; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18928; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
18929; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
18930; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
18931; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
18932; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
18933; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
18934; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
18935; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
18936; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
18937; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18938; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18939; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18940; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
18941; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
18942; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [58,58]
18943; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18944; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
18945; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
18946; AVX1-NEXT:    retq
18947;
18948; AVX2-LABEL: ult_58_v4i64:
18949; AVX2:       # %bb.0:
18950; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18951; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
18952; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18953; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
18954; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
18955; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
18956; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
18957; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
18958; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18959; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18960; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]
18961; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18962; AVX2-NEXT:    retq
18963;
18964; AVX512VPOPCNTDQ-LABEL: ult_58_v4i64:
18965; AVX512VPOPCNTDQ:       # %bb.0:
18966; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18967; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18968; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]
18969; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18970; AVX512VPOPCNTDQ-NEXT:    retq
18971;
18972; AVX512VPOPCNTDQVL-LABEL: ult_58_v4i64:
18973; AVX512VPOPCNTDQVL:       # %bb.0:
18974; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
18975; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18976; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18977; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18978; AVX512VPOPCNTDQVL-NEXT:    retq
18979;
18980; BITALG_NOVLX-LABEL: ult_58_v4i64:
18981; BITALG_NOVLX:       # %bb.0:
18982; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
18983; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18984; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18985; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18986; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]
18987; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
18988; BITALG_NOVLX-NEXT:    retq
18989;
18990; BITALG-LABEL: ult_58_v4i64:
18991; BITALG:       # %bb.0:
18992; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
18993; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18994; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
18995; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
18996; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
18997; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
18998; BITALG-NEXT:    retq
18999  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19000  %3 = icmp ult <4 x i64> %2, <i64 58, i64 58, i64 58, i64 58>
19001  %4 = sext <4 x i1> %3 to <4 x i64>
19002  ret <4 x i64> %4
19003}
19004
19005define <4 x i64> @ugt_58_v4i64(<4 x i64> %0) {
19006; AVX1-LABEL: ugt_58_v4i64:
19007; AVX1:       # %bb.0:
19008; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19009; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19010; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19011; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19012; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
19013; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
19014; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
19015; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
19016; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
19017; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
19018; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
19019; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
19020; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
19021; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19022; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19023; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19024; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
19025; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
19026; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [58,58]
19027; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19028; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
19029; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
19030; AVX1-NEXT:    retq
19031;
19032; AVX2-LABEL: ugt_58_v4i64:
19033; AVX2:       # %bb.0:
19034; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19035; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
19036; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19037; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
19038; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
19039; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
19040; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
19041; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
19042; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19043; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19044; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]
19045; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19046; AVX2-NEXT:    retq
19047;
19048; AVX512VPOPCNTDQ-LABEL: ugt_58_v4i64:
19049; AVX512VPOPCNTDQ:       # %bb.0:
19050; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19051; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19052; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]
19053; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19054; AVX512VPOPCNTDQ-NEXT:    retq
19055;
19056; AVX512VPOPCNTDQVL-LABEL: ugt_58_v4i64:
19057; AVX512VPOPCNTDQVL:       # %bb.0:
19058; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
19059; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19060; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19061; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19062; AVX512VPOPCNTDQVL-NEXT:    retq
19063;
19064; BITALG_NOVLX-LABEL: ugt_58_v4i64:
19065; BITALG_NOVLX:       # %bb.0:
19066; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19067; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19068; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19069; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19070; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]
19071; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19072; BITALG_NOVLX-NEXT:    retq
19073;
19074; BITALG-LABEL: ugt_58_v4i64:
19075; BITALG:       # %bb.0:
19076; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
19077; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19078; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19079; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19080; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19081; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19082; BITALG-NEXT:    retq
19083  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19084  %3 = icmp ugt <4 x i64> %2, <i64 58, i64 58, i64 58, i64 58>
19085  %4 = sext <4 x i1> %3 to <4 x i64>
19086  ret <4 x i64> %4
19087}
19088
19089define <4 x i64> @ult_59_v4i64(<4 x i64> %0) {
19090; AVX1-LABEL: ult_59_v4i64:
19091; AVX1:       # %bb.0:
19092; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19093; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19094; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19095; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19096; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
19097; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
19098; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
19099; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
19100; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
19101; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
19102; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
19103; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
19104; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
19105; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19106; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19107; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19108; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
19109; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
19110; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [59,59]
19111; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19112; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
19113; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
19114; AVX1-NEXT:    retq
19115;
19116; AVX2-LABEL: ult_59_v4i64:
19117; AVX2:       # %bb.0:
19118; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19119; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
19120; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19121; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
19122; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
19123; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
19124; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
19125; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
19126; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19127; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19128; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]
19129; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19130; AVX2-NEXT:    retq
19131;
19132; AVX512VPOPCNTDQ-LABEL: ult_59_v4i64:
19133; AVX512VPOPCNTDQ:       # %bb.0:
19134; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19135; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19136; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]
19137; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19138; AVX512VPOPCNTDQ-NEXT:    retq
19139;
19140; AVX512VPOPCNTDQVL-LABEL: ult_59_v4i64:
19141; AVX512VPOPCNTDQVL:       # %bb.0:
19142; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
19143; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19144; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19145; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19146; AVX512VPOPCNTDQVL-NEXT:    retq
19147;
19148; BITALG_NOVLX-LABEL: ult_59_v4i64:
19149; BITALG_NOVLX:       # %bb.0:
19150; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19151; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19152; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19153; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19154; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]
19155; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19156; BITALG_NOVLX-NEXT:    retq
19157;
19158; BITALG-LABEL: ult_59_v4i64:
19159; BITALG:       # %bb.0:
19160; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
19161; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19162; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19163; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19164; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19165; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19166; BITALG-NEXT:    retq
19167  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19168  %3 = icmp ult <4 x i64> %2, <i64 59, i64 59, i64 59, i64 59>
19169  %4 = sext <4 x i1> %3 to <4 x i64>
19170  ret <4 x i64> %4
19171}
19172
19173define <4 x i64> @ugt_59_v4i64(<4 x i64> %0) {
19174; AVX1-LABEL: ugt_59_v4i64:
19175; AVX1:       # %bb.0:
19176; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19177; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19178; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19179; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19180; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
19181; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
19182; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
19183; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
19184; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
19185; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
19186; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
19187; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
19188; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
19189; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19190; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19191; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19192; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
19193; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
19194; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [59,59]
19195; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19196; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
19197; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
19198; AVX1-NEXT:    retq
19199;
19200; AVX2-LABEL: ugt_59_v4i64:
19201; AVX2:       # %bb.0:
19202; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19203; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
19204; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19205; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
19206; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
19207; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
19208; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
19209; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
19210; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19211; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19212; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]
19213; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19214; AVX2-NEXT:    retq
19215;
19216; AVX512VPOPCNTDQ-LABEL: ugt_59_v4i64:
19217; AVX512VPOPCNTDQ:       # %bb.0:
19218; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19219; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19220; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]
19221; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19222; AVX512VPOPCNTDQ-NEXT:    retq
19223;
19224; AVX512VPOPCNTDQVL-LABEL: ugt_59_v4i64:
19225; AVX512VPOPCNTDQVL:       # %bb.0:
19226; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
19227; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19228; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19229; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19230; AVX512VPOPCNTDQVL-NEXT:    retq
19231;
19232; BITALG_NOVLX-LABEL: ugt_59_v4i64:
19233; BITALG_NOVLX:       # %bb.0:
19234; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19235; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19236; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19237; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19238; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]
19239; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19240; BITALG_NOVLX-NEXT:    retq
19241;
19242; BITALG-LABEL: ugt_59_v4i64:
19243; BITALG:       # %bb.0:
19244; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
19245; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19246; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19247; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19248; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19249; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19250; BITALG-NEXT:    retq
19251  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19252  %3 = icmp ugt <4 x i64> %2, <i64 59, i64 59, i64 59, i64 59>
19253  %4 = sext <4 x i1> %3 to <4 x i64>
19254  ret <4 x i64> %4
19255}
19256
19257define <4 x i64> @ult_60_v4i64(<4 x i64> %0) {
19258; AVX1-LABEL: ult_60_v4i64:
19259; AVX1:       # %bb.0:
19260; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19261; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19262; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19263; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19264; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
19265; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
19266; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
19267; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
19268; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
19269; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
19270; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
19271; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
19272; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
19273; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19274; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19275; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19276; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
19277; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
19278; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [60,60]
19279; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19280; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
19281; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
19282; AVX1-NEXT:    retq
19283;
19284; AVX2-LABEL: ult_60_v4i64:
19285; AVX2:       # %bb.0:
19286; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19287; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
19288; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19289; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
19290; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
19291; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
19292; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
19293; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
19294; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19295; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19296; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]
19297; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19298; AVX2-NEXT:    retq
19299;
19300; AVX512VPOPCNTDQ-LABEL: ult_60_v4i64:
19301; AVX512VPOPCNTDQ:       # %bb.0:
19302; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19303; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19304; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]
19305; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19306; AVX512VPOPCNTDQ-NEXT:    retq
19307;
19308; AVX512VPOPCNTDQVL-LABEL: ult_60_v4i64:
19309; AVX512VPOPCNTDQVL:       # %bb.0:
19310; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
19311; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19312; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19313; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19314; AVX512VPOPCNTDQVL-NEXT:    retq
19315;
19316; BITALG_NOVLX-LABEL: ult_60_v4i64:
19317; BITALG_NOVLX:       # %bb.0:
19318; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19319; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19320; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19321; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19322; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]
19323; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19324; BITALG_NOVLX-NEXT:    retq
19325;
19326; BITALG-LABEL: ult_60_v4i64:
19327; BITALG:       # %bb.0:
19328; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
19329; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19330; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19331; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19332; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19333; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19334; BITALG-NEXT:    retq
19335  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19336  %3 = icmp ult <4 x i64> %2, <i64 60, i64 60, i64 60, i64 60>
19337  %4 = sext <4 x i1> %3 to <4 x i64>
19338  ret <4 x i64> %4
19339}
19340
19341define <4 x i64> @ugt_60_v4i64(<4 x i64> %0) {
19342; AVX1-LABEL: ugt_60_v4i64:
19343; AVX1:       # %bb.0:
19344; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19345; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19346; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19347; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19348; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
19349; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
19350; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
19351; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
19352; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
19353; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
19354; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
19355; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
19356; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
19357; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19358; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19359; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19360; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
19361; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
19362; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [60,60]
19363; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19364; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
19365; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
19366; AVX1-NEXT:    retq
19367;
19368; AVX2-LABEL: ugt_60_v4i64:
19369; AVX2:       # %bb.0:
19370; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19371; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
19372; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19373; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
19374; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
19375; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
19376; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
19377; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
19378; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19379; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19380; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]
19381; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19382; AVX2-NEXT:    retq
19383;
19384; AVX512VPOPCNTDQ-LABEL: ugt_60_v4i64:
19385; AVX512VPOPCNTDQ:       # %bb.0:
19386; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19387; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19388; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]
19389; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19390; AVX512VPOPCNTDQ-NEXT:    retq
19391;
19392; AVX512VPOPCNTDQVL-LABEL: ugt_60_v4i64:
19393; AVX512VPOPCNTDQVL:       # %bb.0:
19394; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
19395; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19396; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19397; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19398; AVX512VPOPCNTDQVL-NEXT:    retq
19399;
19400; BITALG_NOVLX-LABEL: ugt_60_v4i64:
19401; BITALG_NOVLX:       # %bb.0:
19402; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19403; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19404; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19405; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19406; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]
19407; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19408; BITALG_NOVLX-NEXT:    retq
19409;
19410; BITALG-LABEL: ugt_60_v4i64:
19411; BITALG:       # %bb.0:
19412; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
19413; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19414; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19415; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19416; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19417; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19418; BITALG-NEXT:    retq
19419  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19420  %3 = icmp ugt <4 x i64> %2, <i64 60, i64 60, i64 60, i64 60>
19421  %4 = sext <4 x i1> %3 to <4 x i64>
19422  ret <4 x i64> %4
19423}
19424
19425define <4 x i64> @ult_61_v4i64(<4 x i64> %0) {
19426; AVX1-LABEL: ult_61_v4i64:
19427; AVX1:       # %bb.0:
19428; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19429; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19430; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19431; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19432; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
19433; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
19434; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
19435; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
19436; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
19437; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
19438; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
19439; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
19440; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
19441; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19442; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19443; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19444; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
19445; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
19446; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [61,61]
19447; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19448; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
19449; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
19450; AVX1-NEXT:    retq
19451;
19452; AVX2-LABEL: ult_61_v4i64:
19453; AVX2:       # %bb.0:
19454; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19455; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
19456; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19457; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
19458; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
19459; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
19460; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
19461; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
19462; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19463; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19464; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]
19465; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19466; AVX2-NEXT:    retq
19467;
19468; AVX512VPOPCNTDQ-LABEL: ult_61_v4i64:
19469; AVX512VPOPCNTDQ:       # %bb.0:
19470; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19471; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19472; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]
19473; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19474; AVX512VPOPCNTDQ-NEXT:    retq
19475;
19476; AVX512VPOPCNTDQVL-LABEL: ult_61_v4i64:
19477; AVX512VPOPCNTDQVL:       # %bb.0:
19478; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
19479; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19480; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19481; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19482; AVX512VPOPCNTDQVL-NEXT:    retq
19483;
19484; BITALG_NOVLX-LABEL: ult_61_v4i64:
19485; BITALG_NOVLX:       # %bb.0:
19486; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19487; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19488; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19489; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19490; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]
19491; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19492; BITALG_NOVLX-NEXT:    retq
19493;
19494; BITALG-LABEL: ult_61_v4i64:
19495; BITALG:       # %bb.0:
19496; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
19497; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19498; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19499; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19500; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19501; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19502; BITALG-NEXT:    retq
19503  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19504  %3 = icmp ult <4 x i64> %2, <i64 61, i64 61, i64 61, i64 61>
19505  %4 = sext <4 x i1> %3 to <4 x i64>
19506  ret <4 x i64> %4
19507}
19508
19509define <4 x i64> @ugt_61_v4i64(<4 x i64> %0) {
19510; AVX1-LABEL: ugt_61_v4i64:
19511; AVX1:       # %bb.0:
19512; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19513; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19514; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19515; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19516; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
19517; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
19518; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
19519; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
19520; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
19521; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
19522; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
19523; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
19524; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
19525; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19526; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19527; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19528; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
19529; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
19530; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [61,61]
19531; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19532; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
19533; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
19534; AVX1-NEXT:    retq
19535;
19536; AVX2-LABEL: ugt_61_v4i64:
19537; AVX2:       # %bb.0:
19538; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19539; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
19540; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19541; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
19542; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
19543; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
19544; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
19545; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
19546; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19547; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19548; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]
19549; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19550; AVX2-NEXT:    retq
19551;
19552; AVX512VPOPCNTDQ-LABEL: ugt_61_v4i64:
19553; AVX512VPOPCNTDQ:       # %bb.0:
19554; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19555; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19556; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]
19557; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19558; AVX512VPOPCNTDQ-NEXT:    retq
19559;
19560; AVX512VPOPCNTDQVL-LABEL: ugt_61_v4i64:
19561; AVX512VPOPCNTDQVL:       # %bb.0:
19562; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
19563; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19564; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19565; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19566; AVX512VPOPCNTDQVL-NEXT:    retq
19567;
19568; BITALG_NOVLX-LABEL: ugt_61_v4i64:
19569; BITALG_NOVLX:       # %bb.0:
19570; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19571; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19572; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19573; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19574; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]
19575; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19576; BITALG_NOVLX-NEXT:    retq
19577;
19578; BITALG-LABEL: ugt_61_v4i64:
19579; BITALG:       # %bb.0:
19580; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
19581; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19582; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19583; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19584; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19585; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19586; BITALG-NEXT:    retq
19587  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19588  %3 = icmp ugt <4 x i64> %2, <i64 61, i64 61, i64 61, i64 61>
19589  %4 = sext <4 x i1> %3 to <4 x i64>
19590  ret <4 x i64> %4
19591}
19592
19593define <4 x i64> @ult_62_v4i64(<4 x i64> %0) {
19594; AVX1-LABEL: ult_62_v4i64:
19595; AVX1:       # %bb.0:
19596; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19597; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19598; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19599; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19600; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
19601; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
19602; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
19603; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
19604; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
19605; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
19606; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
19607; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
19608; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
19609; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19610; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19611; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19612; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
19613; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
19614; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [62,62]
19615; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19616; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
19617; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
19618; AVX1-NEXT:    retq
19619;
19620; AVX2-LABEL: ult_62_v4i64:
19621; AVX2:       # %bb.0:
19622; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19623; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
19624; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19625; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
19626; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
19627; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
19628; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
19629; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
19630; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19631; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19632; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]
19633; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19634; AVX2-NEXT:    retq
19635;
19636; AVX512VPOPCNTDQ-LABEL: ult_62_v4i64:
19637; AVX512VPOPCNTDQ:       # %bb.0:
19638; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19639; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19640; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]
19641; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19642; AVX512VPOPCNTDQ-NEXT:    retq
19643;
19644; AVX512VPOPCNTDQVL-LABEL: ult_62_v4i64:
19645; AVX512VPOPCNTDQVL:       # %bb.0:
19646; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
19647; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19648; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19649; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19650; AVX512VPOPCNTDQVL-NEXT:    retq
19651;
19652; BITALG_NOVLX-LABEL: ult_62_v4i64:
19653; BITALG_NOVLX:       # %bb.0:
19654; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19655; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19656; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19657; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19658; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]
19659; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19660; BITALG_NOVLX-NEXT:    retq
19661;
19662; BITALG-LABEL: ult_62_v4i64:
19663; BITALG:       # %bb.0:
19664; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
19665; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19666; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19667; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19668; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19669; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19670; BITALG-NEXT:    retq
19671  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19672  %3 = icmp ult <4 x i64> %2, <i64 62, i64 62, i64 62, i64 62>
19673  %4 = sext <4 x i1> %3 to <4 x i64>
19674  ret <4 x i64> %4
19675}
19676
19677define <4 x i64> @ugt_62_v4i64(<4 x i64> %0) {
19678; AVX1-LABEL: ugt_62_v4i64:
19679; AVX1:       # %bb.0:
19680; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19681; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19682; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19683; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19684; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
19685; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
19686; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
19687; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
19688; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
19689; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
19690; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
19691; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
19692; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
19693; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19694; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19695; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19696; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
19697; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
19698; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [62,62]
19699; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19700; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1
19701; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
19702; AVX1-NEXT:    retq
19703;
19704; AVX2-LABEL: ugt_62_v4i64:
19705; AVX2:       # %bb.0:
19706; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19707; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
19708; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19709; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
19710; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
19711; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
19712; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
19713; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
19714; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19715; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19716; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]
19717; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19718; AVX2-NEXT:    retq
19719;
19720; AVX512VPOPCNTDQ-LABEL: ugt_62_v4i64:
19721; AVX512VPOPCNTDQ:       # %bb.0:
19722; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19723; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19724; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]
19725; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19726; AVX512VPOPCNTDQ-NEXT:    retq
19727;
19728; AVX512VPOPCNTDQVL-LABEL: ugt_62_v4i64:
19729; AVX512VPOPCNTDQVL:       # %bb.0:
19730; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
19731; AVX512VPOPCNTDQVL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19732; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19733; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19734; AVX512VPOPCNTDQVL-NEXT:    retq
19735;
19736; BITALG_NOVLX-LABEL: ugt_62_v4i64:
19737; BITALG_NOVLX:       # %bb.0:
19738; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19739; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19740; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19741; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19742; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]
19743; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm0
19744; BITALG_NOVLX-NEXT:    retq
19745;
19746; BITALG-LABEL: ugt_62_v4i64:
19747; BITALG:       # %bb.0:
19748; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
19749; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19750; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19751; BITALG-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19752; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19753; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19754; BITALG-NEXT:    retq
19755  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19756  %3 = icmp ugt <4 x i64> %2, <i64 62, i64 62, i64 62, i64 62>
19757  %4 = sext <4 x i1> %3 to <4 x i64>
19758  ret <4 x i64> %4
19759}
19760
19761define <4 x i64> @ult_63_v4i64(<4 x i64> %0) {
19762; AVX1-LABEL: ult_63_v4i64:
19763; AVX1:       # %bb.0:
19764; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19765; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19766; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19767; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19768; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm4
19769; AVX1-NEXT:    vpand %xmm1, %xmm4, %xmm4
19770; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm4
19771; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
19772; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
19773; AVX1-NEXT:    vpsadbw %xmm4, %xmm2, %xmm2
19774; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
19775; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm5
19776; AVX1-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
19777; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19778; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19779; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19780; AVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0
19781; AVX1-NEXT:    vpsadbw %xmm4, %xmm0, %xmm0
19782; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [63,63]
19783; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19784; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1
19785; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
19786; AVX1-NEXT:    retq
19787;
19788; AVX2-LABEL: ult_63_v4i64:
19789; AVX2:       # %bb.0:
19790; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19791; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
19792; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19793; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
19794; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
19795; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
19796; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
19797; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
19798; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19799; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19800; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63]
19801; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19802; AVX2-NEXT:    retq
19803;
19804; AVX512VPOPCNTDQ-LABEL: ult_63_v4i64:
19805; AVX512VPOPCNTDQ:       # %bb.0:
19806; AVX512VPOPCNTDQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19807; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19808; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63]
19809; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19810; AVX512VPOPCNTDQ-NEXT:    retq
19811;
19812; AVX512VPOPCNTDQVL-LABEL: ult_63_v4i64:
19813; AVX512VPOPCNTDQVL:       # %bb.0:
19814; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %ymm0, %ymm0
19815; AVX512VPOPCNTDQVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19816; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19817; AVX512VPOPCNTDQVL-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19818; AVX512VPOPCNTDQVL-NEXT:    retq
19819;
19820; BITALG_NOVLX-LABEL: ult_63_v4i64:
19821; BITALG_NOVLX:       # %bb.0:
19822; BITALG_NOVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
19823; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19824; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19825; BITALG_NOVLX-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19826; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63]
19827; BITALG_NOVLX-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm0
19828; BITALG_NOVLX-NEXT:    retq
19829;
19830; BITALG-LABEL: ult_63_v4i64:
19831; BITALG:       # %bb.0:
19832; BITALG-NEXT:    vpopcntb %ymm0, %ymm0
19833; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19834; BITALG-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
19835; BITALG-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1
19836; BITALG-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
19837; BITALG-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
19838; BITALG-NEXT:    retq
19839  %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)
19840  %3 = icmp ult <4 x i64> %2, <i64 63, i64 63, i64 63, i64 63>
19841  %4 = sext <4 x i1> %3 to <4 x i64>
19842  ret <4 x i64> %4
19843}
19844
19845declare <32 x i8> @llvm.ctpop.v32i8(<32 x i8>)
19846declare <16 x i16> @llvm.ctpop.v16i16(<16 x i16>)
19847declare <8 x i32> @llvm.ctpop.v8i32(<8 x i32>)
19848declare <4 x i64> @llvm.ctpop.v4i64(<4 x i64>)
19849